Binning ความถี่เท่ากันใน python
ในทางสถิติ การจัดกลุ่ม เป็นกระบวนการในการวางค่าตัวเลขออกเป็น ก ลุ่มๆ
รูปแบบการจัดกลุ่มที่พบบ่อยที่สุดเรียกว่า การจัดกลุ่มที่มีความกว้างเท่ากัน ซึ่งเราแบ่งชุดข้อมูลออกเป็นกลุ่ม k กลุ่มที่มีความกว้างเท่ากัน
รูปแบบการจัดกลุ่มที่ใช้กันน้อยกว่าเรียกว่า การจัดกลุ่มความถี่เท่ากัน ซึ่งเราแบ่งชุดข้อมูลออกเป็น k กลุ่มโดยทั้งหมดมีจำนวนความถี่เท่ากัน
บทช่วยสอนนี้จะอธิบายวิธีการจัดกลุ่มความถี่เท่ากันใน Python
Binning ความถี่เท่ากันใน Python
สมมติว่าเรามีชุดข้อมูลที่มีค่า 100 ค่า:
import numpy as np import matplotlib.pyplot as plt #create data np.random.seed(1) data = np.random.randn(100) #view first 5 values data[:5] array([ 1.62434536, -0.61175641, -0.52817175, -1.07296862, 0.86540763])
การจัดกลุ่มความกว้างเท่ากัน:
หากเราสร้างฮิสโตแกรมเพื่อแสดงค่าเหล่านี้ Python จะใช้ค่าเริ่มต้นในการจัดกลุ่มที่มีความกว้างเท่ากัน:
#create histogram with equal-width bins n, bins, patches = plt.hist(data, edgecolor='black') plt.show() #display bin boundaries and frequency per bin bins, n (array([-2.3015387 , -1.85282729, -1.40411588, -0.95540447, -0.50669306, -0.05798165, 0.39072977, 0.83944118, 1.28815259, 1.736864, 2.18557541]), array([ 3., 1., 6., 17., 19., 20., 14., 12., 5., 3.]))
แต่ละกลุ่มมีความกว้างเท่ากันประมาณ 0.4487 แต่แต่ละกลุ่มมีจำนวนการสังเกตไม่เท่ากัน ตัวอย่างเช่น:
- ถังขยะแรกขยายจาก -2.3015387 ถึง -1.8528279 และมีข้อสังเกต 3 รายการ
- ถังที่สองขยายจาก -1.8528279 ถึง -1.40411588 และมี 1 การสังเกต
- ถังที่สามขยายจาก -1.40411588 ถึง -0.95540447 และมีข้อสังเกต 6 รายการ
และอื่นๆ
การจัดกลุ่มความถี่ที่เท่ากัน:
หากต้องการสร้างที่เก็บข้อมูลที่มีจำนวนการสังเกตเท่ากัน เราสามารถใช้ฟังก์ชันต่อไปนี้:
#define function to calculate equal-frequency bins def equalObs(x, nbin): nlen = len(x) return np.interp(np.linspace(0, nlen, nbin + 1), np.arange(nlen), np.sort(x)) #create histogram with equal-frequency bins n, bins, patches = plt.hist(data, equalObs(data, 10), edgecolor='black') plt.show() #display bin boundaries and frequency per bin bins, n (array([-2.3015387 , -0.93576943, -0.67124613, -0.37528495, -0.20889423, 0.07734007, 0.2344157, 0.51292982, 0.86540763, 1.19891788, 2.18557541]), array([10., 10., 10., 10., 10., 10., 10., 10., 10., 10.]))
แต่ละกลุ่มมีความกว้างไม่เท่ากัน แต่แต่ละกลุ่ม มี จำนวนการสังเกตเท่ากัน ตัวอย่างเช่น:
- ถังขยะแรกขยายจาก -2.3015387 ถึง -0.93576943 และมีข้อสังเกต 10 รายการ
- ถังขยะที่สองขยายจาก -0.93576943 ถึง -0.67124613 และมีข้อสังเกต 10 รายการ
- ถังขยะที่สามขยายจาก -0.67124613 ถึง -0.37528495 และมีข้อสังเกต 10 รายการ
และอื่นๆ
จากฮิสโตแกรมเราจะเห็นได้ว่าแต่ละถังมีความกว้างไม่เท่ากันอย่างชัดเจน แต่แต่ละถังมีจำนวนข้อสังเกตเท่ากัน ซึ่งได้รับการยืนยันจากข้อเท็จจริงที่ว่าความสูงของแต่ละถังเท่ากัน