</>
Тема 1 из 4

Категории: подсчёт и средние

seaborn — надстройка над matplotlib для статистических графиков. Она сама группирует данные, считает средние и количества, подбирает цвета и подписи. То, что в matplotlib заняло бы десяток строк подготовки данных, в seaborn делается одной строкой — прямо по таблице pandas.

import seaborn as sns
import pandas as pd

Сокращение sns общепринятое. seaborn рисует в обычные области matplotlib, поэтому всё из курса matplotlib — подписи, размеры, subplots — работает и здесь.

Данные — таблица

Функции seaborn принимают таблицу data= и имена столбцов:

df = pd.DataFrame({
    "класс": ["7а", "7б", "7а", "7б", "7а"],
    "балл":  [80, 65, 92, 70, 88],
})
sns.barplot(data=df, x="класс", y="балл")

Вместо имён можно передавать и сами списки: sns.barplot(x=[...], y=[...]).

countplot — сколько раз встречается

pets = pd.DataFrame({"питомец": ["кот", "пёс", "кот", "рыбка", "кот", "пёс"]})
sns.countplot(data=pets, x="питомец")

Каждый столбец — количество строк с этой категорией. Это то же, что value_counts() + bar, но в одну строку.

barplot — среднее по группам

barplot группирует строки по категории x и считает среднее значение y в каждой группе:

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

Тонкая линия над столбцом — интервал неопределённости: насколько точно оценено среднее по выборке. Чем меньше данных в группе, тем он длиннее. Отключается так: errorbar=None.

Вместо среднего можно считать другое — параметр estimator:

sns.barplot(data=df, x="класс", y="балл", estimator="sum", errorbar=None)
sns.barplot(data=df, x="класс", y="балл", estimator="median")

Порядок категорий

По умолчанию категории идут в порядке появления в данных (для чисел — по возрастанию). Порядок задают явно параметром order:

sns.countplot(data=pets, x="питомец", order=["рыбка", "пёс", "кот"])

order = pets["питомец"].value_counts().index     # по убыванию частоты
sns.countplot(data=pets, x="питомец", order=order)

Горизонтальные столбцы

Если категорию передать в y, а числа в x, столбцы станут горизонтальными — удобно для длинных названий:

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

Оформление

ax = sns.barplot(data=df, x="класс", y="балл", color="tab:orange")
ax.set_title("Средний балл")
ax.set_ylabel("Балл")

Функции seaborn возвращают область matplotlib (ax) — с ней работают как обычно. palette="pastel" задаёт набор цветов, sns.set_theme() меняет общий стиль всех графиков.

Итог

  • функции seaborn принимают data=таблица и имена столбцов x, y;
  • countplot — количество по категориям, barplot — среднее (или другой estimator) по категориям;
  • errorbar=None — без интервалов неопределённости;
  • order=[...] — порядок категорий;
  • категория в y — горизонтальные столбцы; результат — обычная область matplotlib.