Binning met gelijke frequentie in python


In de statistiek is groeperen het proces waarbij numerieke waarden in groepen worden geplaatst.

De meest voorkomende vorm van clustering staat bekend als clustering met gelijke breedte , waarbij we een dataset verdelen in k groepen van gelijke breedte.

Een minder vaak gebruikte vorm van clustering staat bekend als clustering met gelijke frequentie , waarbij we een dataset verdelen in k groepen die allemaal een gelijk aantal frequenties hebben.

In deze tutorial wordt uitgelegd hoe u clustering met gelijke frequentie in Python kunt uitvoeren.

Binning met gelijke frequentie in Python

Stel dat we een dataset hebben met 100 waarden:

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

Gelijke breedtegroepering:

Als we een histogram maken om deze waarden weer te geven, zal Python standaard groeperen met gelijke breedte:

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

Elke groep heeft een gelijke breedte van ongeveer 0,4487, maar elke groep bevat niet een gelijk aantal waarnemingen. Bijvoorbeeld:

  • De eerste bak strekt zich uit van -2,3015387 tot -1,8528279 en bevat 3 waarnemingen.
  • De tweede bak strekt zich uit van -1,8528279 tot -1,40411588 en bevat 1 waarneming.
  • De derde bak strekt zich uit van -1,40411588 tot -0,95540447 en bevat 6 waarnemingen.

Enzovoort.

Gelijke frequentiegroepering:

Om buckets te maken die een gelijk aantal waarnemingen bevatten, kunnen we de volgende functie gebruiken:

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

Voorbeeld van gelijke frequentiegroepering in Python

Elke groep is niet even breed, maar elke groep bevat een gelijk aantal waarnemingen. Bijvoorbeeld:

  • De eerste bak strekt zich uit van -2,3015387 tot -0,93576943 en bevat 10 waarnemingen.
  • De tweede bak strekt zich uit van -0,93576943 tot -0,67124613 en bevat 10 waarnemingen.
  • De derde bak strekt zich uit van -0,67124613 tot -0,37528495 en bevat 10 waarnemingen.

Enzovoort.

Uit het histogram kunnen we zien dat elke bak duidelijk niet even breed is, maar dat elke bak hetzelfde aantal waarnemingen bevat, wat wordt bevestigd door het feit dat de hoogte van elke bak gelijk is.

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert