Категории: подсчёт и средние
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.