Гистограммы в Pandas

Гистограмма — это способ оценить распределение значений: сколько раз встречаются разные диапазоны. В Pandas достаточно вызвать .hist() на Series или DataFrame.

Когда использовать

  • Понять, нормально ли распределены показания датчика.

  • Найти бимодальные распределения (два «пика»).

  • Сравнить несколько устройств на одном изображении.

Пример 1. Гистограмма Series

import pandas as pd
import matplotlib.pyplot as plt

s = pd.Series([10, 11, 12, 12, 13, 13, 14, 15, 14, 13])
s.hist(bins=5)
plt.savefig("h1.png")

Пример 2. На DataFrame

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({
    "temp": [20, 22, 23, 25, 21, 24],
    "hum":  [55, 60, 58, 53, 56, 57],
})
df.hist(bins=4)
plt.savefig("h2.png")

Будет построено по гистограмме на каждый числовой столбец.

Пример 3. Своё число корзин

import pandas as pd
import matplotlib.pyplot as plt

s = pd.Series(range(100))
s.hist(bins=20)
plt.savefig("h3.png")

Пример 4. По группам через by

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({
    "v": [10, 11, 30, 31, 12, 32],
    "g": ["a", "a", "b", "b", "a", "b"],
})
df["v"].hist(by=df["g"])
plt.savefig("h4.png")

Получаем сетку: одна гистограмма на группу.

Пример 5. Через plot

import pandas as pd
import matplotlib.pyplot as plt

s = pd.Series([1, 2, 2, 3, 3, 3, 4, 4, 5])
s.plot(kind="hist", bins=5)
plt.savefig("h5.png")

Пример 6. Density (плотность)

import pandas as pd
import matplotlib.pyplot as plt

s = pd.Series([1, 2, 2, 3, 3, 3, 4, 4, 5])
s.plot(kind="kde")
plt.savefig("h6.png")

KDE сглаживает гистограмму в кривую плотности.

Пример 7. Числа без графика

Иногда нужны просто корзины, без рисунка:

import pandas as pd

s = pd.Series([10, 11, 12, 20, 21, 30])
bins = pd.cut(s, bins=3)
print(bins.value_counts().sort_index())

Output:

(9.98, 16.667]    3
(16.667, 23.333]  2
(23.333, 30.0]    1
Name: count, dtype: int64

Подводные камни

  • Число корзин сильно влияет на форму: маленькое — «гладко», большое — «шумно».

  • Гистограмма не различает порядок данных — для временных рядов используйте Графики в Pandas (.plot).

  • Логарифмическая ось (log=True) помогает для распределений с длинным хвостом.

См. также

Примечание

Лицензия и источники

Техническое описание адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Перевод на русский, примеры и пояснения — © AlashEd Wiki.