Гистограммы в 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.