Binning della frequenza uguale in python


In statistica, il raggruppamento è il processo di inserimento di valori numerici in gruppi .

La forma più comune di clustering è nota come clustering a larghezza uguale , in cui dividiamo un set di dati in k gruppi di uguale larghezza.

Una forma di clustering meno comunemente utilizzata è nota come clustering a frequenza uguale , in cui dividiamo un set di dati in k gruppi aventi tutti lo stesso numero di frequenze.

Questo tutorial spiega come eseguire il clustering a frequenza uguale in Python.

Binning della frequenza uguale in Python

Supponiamo di avere un set di dati contenente 100 valori:

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

Raggruppamento di uguale larghezza:

Se creiamo un istogramma per visualizzare questi valori, Python utilizzerà per impostazione predefinita il raggruppamento di uguale larghezza:

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

Ciascun gruppo ha una larghezza uguale di circa 0,4487, ma ciascun gruppo non contiene la stessa quantità di osservazioni. Per esempio:

  • Il primo bin si estende da -2.3015387 a -1.8528279 e contiene 3 osservazioni.
  • Il secondo contenitore si estende da -1,8528279 a -1,40411588 e contiene 1 osservazione.
  • Il terzo bin si estende da -1,40411588 a -0,95540447 e contiene 6 osservazioni.

E così via.

Raggruppamento a frequenza uguale:

Per creare bucket contenenti un numero uguale di osservazioni, possiamo utilizzare la seguente funzione:

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

Esempio di raggruppamento a frequenza uguale in Python

Ogni gruppo non ha la stessa larghezza, ma contiene la stessa quantità di osservazioni. Per esempio:

  • Il primo contenitore si estende da -2,3015387 a -0,93576943 e contiene 10 osservazioni.
  • Il secondo contenitore si estende da -0,93576943 a -0,67124613 e contiene 10 osservazioni.
  • Il terzo bin si estende da -0,67124613 a -0,37528495 e contiene 10 osservazioni.

E così via.

Possiamo vedere dall’istogramma che ogni contenitore chiaramente non ha la stessa larghezza, ma ogni contenitore contiene lo stesso numero di osservazioni, il che è confermato dal fatto che l’altezza di ciascun contenitore è uguale.

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *