Равночастотное бинирование в Python

Равночастотное бинирование в Python

В статистике биннинг — это процесс помещения числовых значений в бины .

Наиболее распространенная форма биннинга известна как биннинг равной ширины , при которой мы делим набор данных на k бинов одинаковой ширины.

Менее часто используемая форма биннинга известна как биннинг с равной частотой , в которой мы делим набор данных на k бинов, все из которых имеют одинаковое количество частот.

В этом руководстве объясняется, как выполнить биннинг с равной частотой в python.

Равночастотное бинирование в 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 наблюдений.

И так далее.

Из гистограммы видно, что каждый бин явно не одинаковой ширины, но каждый бин содержит одинаковое количество наблюдений, что подтверждается тем фактом, что высота каждого бина одинакова.

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.