</>
Тема 2 из 4

Распределения

Среднее значение — лишь одно число. Оно не говорит, как данные распределены: все ли примерно одинаковые или есть выбросы, одна ли «горка» значений или две. В seaborn для этого есть гистограммы и «ящики с усами».

histplot — гистограмма

import seaborn as sns

marks = [3, 4, 4, 5, 5, 5, 4, 3, 2, 5, 4, 4]
sns.histplot(x=marks, bins=4)

Как и в matplotlib, bins — число интервалов от минимума до максимума данных. Но у seaborn есть удобные альтернативы:

  • binwidth=10 — ширина интервала вместо их количества;
  • binrange=(0, 100) — на каком отрезке строить интервалы;
  • discrete=True — по столбцу на каждое целое значение (для оценок, количества детей и т. п.).

Что показывает высота: stat

stat Высота столбца
"count" (по умолчанию) сколько значений в интервале
"percent" процент от всех значений
"proportion" доля от 0 до 1
"density" плотность: площадь всех столбцов равна 1

Проценты и доли удобны, чтобы сравнивать группы разного размера.

Кривая плотности

sns.histplot(x=marks, kde=True)   # гистограмма + сглаженная кривая
sns.kdeplot(x=marks)              # только кривая

Кривая показывает «форму» распределения без зависимости от выбора интервалов.

Сравнение групп: hue

Параметр hue — столбец, по которому данные делятся на группы разного цвета:

sns.histplot(data=df, x="рост", hue="пол", multiple="dodge")

multiple задаёт, как показывать группы: "layer" — поверх друг друга, "dodge" — рядом, "stack" — стопкой.

boxplot — ящик с усами

boxplot компактно показывает распределение в каждой группе:

sns.boxplot(data=df, x="класс", y="балл")

Как читать ящик:

  • линия внутри — медиана: половина значений меньше, половина больше;
  • края ящика — первый и третий квартили: внутри ящика — средние 50 % значений;
  • «усы» тянутся до самых дальних значений, которые не слишком далеко от ящика;
  • отдельные точки за усами — выбросы, необычно большие или малые значения.

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

Порядок групп, как и в barplot, задаётся параметром order.

Итог

  • histplot(x=..., bins=...) или binwidth=..., binrange=(a, b), discrete=True;
  • stat="count" / "percent" / "proportion" / "density" — что показывает высота;
  • kde=True или kdeplot — сглаженная кривая;
  • hue — группы разными цветами, multiple — как их совмещать;
  • boxplot — медиана, квартили, усы и выбросы по группам.