Binning à fréquence égale en Python
En statistiques, le regroupement est le processus consistant à placer des valeurs numériques dans des groupes .
La forme de regroupement la plus courante est connue sous le nom de regroupement à largeur égale , dans laquelle nous divisons un ensemble de données en k groupes de largeur égale.
Une forme de regroupement moins couramment utilisée est connue sous le nom de regroupement à fréquence égale , dans laquelle nous divisons un ensemble de données en k groupes ayant tous un nombre égal de fréquences.
Ce tutoriel explique comment effectuer un regroupement à fréquence égale en python.
Binning à fréquence égale en Python
Supposons que nous ayons un ensemble de données contenant 100 valeurs :
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])
Regroupement de largeur égale :
Si nous créons un histogramme pour afficher ces valeurs, Python utilisera par défaut le regroupement de largeur égale :
#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.]))
Chaque groupe a une largeur égale d’environ 0,4487, mais chaque groupe ne contient pas une quantité égale d’observations. Par exemple:
- Le premier bin s’étend de -2,3015387 à -1,8528279 et contient 3 observations.
- Le deuxième bac s’étend de -1,8528279 à -1,40411588 et contient 1 observation.
- Le troisième bac s’étend de -1,40411588 à -0,95540447 et contient 6 observations.
Et ainsi de suite.
Regroupement à fréquence égale :
Pour créer des compartiments contenant un nombre égal d’observations, nous pouvons utiliser la fonction suivante :
#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.]))
Chaque groupe n’a pas une largeur égale, mais chaque groupe contient une quantité égale d’observations. Par exemple:
- Le premier bac s’étend de -2,3015387 à -0,93576943 et contient 10 observations.
- Le deuxième bac s’étend de -0,93576943 à -0,67124613 et contient 10 observations.
- Le troisième bac s’étend de -0,67124613 à -0,37528495 et contient 10 observations.
Et ainsi de suite.
Nous pouvons voir sur l’histogramme que chaque bac n’a clairement pas la même largeur, mais chaque bac contient le même nombre d’observations, ce qui est confirmé par le fait que la hauteur de chaque bac est égale.