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.])) 

ตัวอย่างการจัดกลุ่มความถี่ที่เท่ากันใน Python

แต่ละกลุ่มมีความกว้างไม่เท่ากัน แต่แต่ละกลุ่ม มี จำนวนการสังเกตเท่ากัน ตัวอย่างเช่น:

  • ถังขยะแรกขยายจาก -2.3015387 ถึง -0.93576943 และมีข้อสังเกต 10 รายการ
  • ถังขยะที่สองขยายจาก -0.93576943 ถึง -0.67124613 และมีข้อสังเกต 10 รายการ
  • ถังขยะที่สามขยายจาก -0.67124613 ถึง -0.37528495 และมีข้อสังเกต 10 รายการ

และอื่นๆ

จากฮิสโตแกรมเราจะเห็นได้ว่าแต่ละถังมีความกว้างไม่เท่ากันอย่างชัดเจน แต่แต่ละถังมีจำนวนข้อสังเกตเท่ากัน ซึ่งได้รับการยืนยันจากข้อเท็จจริงที่ว่าความสูงของแต่ละถังเท่ากัน

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *