Gleichfrequenz-Binning in Python

Von Fabian
Kategorie: Python
Lesezeit: 3 Minuten

In der Statistik wird beim Binning numerische Werte in Bins platziert.

Die häufigste Form des Binning ist das Binning gleicher Breite, bei dem wir einen Datensatz in k Bins gleicher Breite unterteilen.

Eine weniger häufig verwendete Form des Binning ist das Binning mit gleicher Frequenz, bei dem wir einen Datensatz in k Bins unterteilen, die alle die gleiche Anzahl von Frequenzen haben.

In diesem Tutorial wird erklärt, wie Sie in Python Binning mit gleicher Frequenz durchführen.

Gleichfrequenz-Binning in Python

Angenommen, wir haben einen Datensatz, der 100 Werte enthält:

import numpy as np
import matplotlib.pyplot as plt

# Daten erstellen
np.random.seed(1)
data = np.random.randn(100)

# Die ersten 5 Werte anzeigen
data[:5]

array([ 1.62434536, -0.61175641, -0.52817175, -1.07296862,  0.86540763])

Binning mit gleicher Breite:

Wenn wir ein Histogramm erstellen, um diese Werte anzuzeigen, verwendet Python standardmäßig Binning gleicher Breite:

# Histogramm mit gleich breiten Bins erstellen
n, bins, patches = plt.hist(data, edgecolor='black')
plt.show()

#Anzeigen von Bin-Grenzen und Häufigkeit pro 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.]))

Equalfreqbinningpython

Jeder Bin hat eine gleiche Breite von ungefähr 0,4487, aber jeder Bin enthält nicht die gleiche Anzahl von Beobachtungen. Zum Beispiel:

  • Der erste Bin erstreckt sich von -2,3015387 bis -1,8528279 und enthält 3 Beobachtungen.
  • Der zweite Bin erstreckt sich von -1,8528279 bis -1,40411588 und enthält 1 Beobachtung.
  • Der dritte Bin erstreckt sich von -1,40411588 bis -0,95540447 und enthält 6 Beobachtungen.

Und so weiter.

Gleichfrequenz-Binning:

Um Bins zu erstellen, die die gleiche Anzahl von Beobachtungen enthalten, können Sie die folgende Funktion verwenden:

#Funktion definieren zur Berechnung von gleichfrequenten Bins 
def equalObs(x, nbin):
    nlen = len(x)
    return np.interp(np.linspace(0, nlen, nbin + 1),
                     np.arange(nlen),
                     np.sort(x))

# Histogramm mit gleichfrequenten Bins erstellen 
n, bins, patches = plt.hist(data, equalObs(data, 10), edgecolor='black')
plt.show()

#Anzeigen von Bin-Grenzen und Häufigkeit pro 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.]))

Gleiches Frequenz-Binning im Python-Beispiel

Jeder Bin hat nicht die gleiche Breite, aber jeder Bin enthält die gleiche Anzahl von Beobachtungen. Zum Beispiel:

  • Der erste Bin erstreckt sich von -2.3015387 bis -0.93576943 und enthält 10 Beobachtungen.
  • Der zweite Bin erstreckt sich von -0,93576943 bis -0,67124613 und enthält 10 Beobachtungen.
  • Der dritte Bin erstreckt sich von -0,67124613 bis -0,37528495 und enthält 10 Beobachtungen.

Und so weiter.

Wir können dem Histogramm entnehmen, dass jeder Bin eindeutig nicht die gleiche Breite hat, aber jeder Bin die gleiche Anzahl von Beobachtungen enthält, was durch die Tatsache bestätigt wird, dass jede Binhöhe gleich ist.

Statistik: Der Weg zur Datenanalyse

* Amazon Affiliate Link


Das könnte Sie auch interessieren: