Seaborn: шпаргалка для аналитика
Зачем аналитику Seaborn
Seaborn — высокоуровневая обёртка над matplotlib. Один вызов функции даёт красивый график, который в чистом matplotlib потребовал бы 20 строк.
import seaborn as sns
import matplotlib.pyplot as pltТипы графиков
Распределение одной переменной
# Гистограмма
sns.histplot(data=df, x='amount', bins=30)
# С разделением по категории
sns.histplot(data=df, x='amount', hue='category', multiple='stack')
# KDE (плотность)
sns.kdeplot(data=df, x='amount', hue='category')
# Boxplot
sns.boxplot(data=df, x='category', y='amount')
# Violinplot — boxplot + KDE
sns.violinplot(data=df, x='category', y='amount')
# Stripplot — точки
sns.stripplot(data=df, x='category', y='amount', jitter=True)Две переменные
# Scatterplot
sns.scatterplot(data=df, x='price', y='revenue')
# С цветом по категории
sns.scatterplot(data=df, x='price', y='revenue', hue='segment')
# С размером точки
sns.scatterplot(data=df, x='price', y='revenue', size='users')
# Регрессия (scatter + линия)
sns.regplot(data=df, x='price', y='revenue')
# lmplot — с фасетами
sns.lmplot(data=df, x='price', y='revenue', col='category')
# Joint plot — scatter + гистограммы
sns.jointplot(data=df, x='price', y='revenue', kind='scatter')
# kind='kde', 'hex', 'reg'Временные ряды
# Линейный график
sns.lineplot(data=df, x='date', y='dau')
# С группировкой
sns.lineplot(data=df, x='date', y='conversion', hue='group',
ci=95) # 95% confidence intervalАгрегаты и сравнения
# Bar chart
sns.barplot(data=df, x='category', y='revenue')
# Countplot (частоты)
sns.countplot(data=df, x='category')
# Pointplot (как bar, но точка с ошибкой)
sns.pointplot(data=df, x='category', y='revenue')Heatmap
# Корреляционная матрица
corr = df.corr()
sns.heatmap(corr, annot=True, cmap='coolwarm', center=0)
# Когорты / сводная
pivot = df.pivot_table(index='cohort', columns='period', values='retention')
sns.heatmap(pivot, annot=True, fmt='.0%', cmap='YlGnBu')Facet Grid
Разделение графиков по подкатегориям:
# FacetGrid — строки и столбцы по категориям
g = sns.FacetGrid(df, col='platform', row='country')
g.map(sns.scatterplot, 'x', 'y')
# catplot — универсальный facet
sns.catplot(data=df, x='category', y='revenue',
col='platform', kind='bar')
# kind='box', 'violin', 'bar', 'strip'
# relplot — facet scatterplot/lineplot
sns.relplot(data=df, x='date', y='metric',
col='segment', kind='line')Попробовать силы на подобных вопросах проще всего в тренажёре Карьерник — прямо в Telegram, без регистрации через сайт.
Стили и оформление
# Глобальный стиль
sns.set_style('whitegrid')
# 'darkgrid', 'whitegrid', 'dark', 'white', 'ticks'
# Контекст (размеры)
sns.set_context('notebook')
# 'paper', 'notebook', 'talk', 'poster'
# Цветовая палитра
sns.set_palette('husl')
# или конкретная: sns.color_palette('viridis', 5)Комбинация с matplotlib
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
sns.histplot(data=df, x='x', ax=axes[0])
sns.boxplot(data=df, x='cat', y='y', ax=axes[1])
plt.tight_layout()
plt.show()ax=axes[i] — направляет seaborn в нужный subplot.
Типичные задачи
1. Распределение с разделением
sns.histplot(data=df, x='amount', hue='group', multiple='dodge')2. Корреляция всех пар
sns.pairplot(df)
# С цветом по категории
sns.pairplot(df, hue='category')3. Когортная тепловая карта
retention = df.pivot_table(...)
plt.figure(figsize=(12, 8))
sns.heatmap(retention, annot=True, fmt='.0%', cmap='YlGnBu')4. A/B результаты
sns.lineplot(data=df, x='date', y='conversion', hue='group', ci=95)
plt.axvline(x='2026-04-01', color='red', linestyle='--', label='Launch')
plt.legend()5. Boxplot с jitter-точками
sns.boxplot(data=df, x='category', y='amount')
sns.stripplot(data=df, x='category', y='amount', color='black', alpha=0.3)6. Регрессия с confidence interval
sns.regplot(data=df, x='x', y='y', ci=95)7. Частоты категорий
sns.countplot(data=df, x='category', order=df['category'].value_counts().index)8. Линейные тренды по группам
sns.relplot(data=df, x='date', y='metric',
hue='segment', kind='line', ci=None)9. Двумерная гистограмма / hex
sns.jointplot(data=df, x='x', y='y', kind='hex')10. Custom tick labels и заголовки
ax = sns.barplot(data=df, x='cat', y='val')
ax.set_title('My chart')
ax.set_xlabel('Category')
ax.set_ylabel('Value')
ax.set_xticklabels(ax.get_xticklabels(), rotation=45)Частые ошибки
1. Слишком много категорий в hue
5-7 категорий — предел. Больше — каша.
2. Маленький figsize
plt.figure(figsize=(12, 6)) # перед seaborn-вызовом
sns.heatmap(...)3. Не использовать ax parameter
Если рисуете в subplot, обязательно ax=.
Пройти 30–50 задач по теме за вечер можно в Telegram-тренажёре. Это то, что отличает «знаю» от «уверенно отвечу на собесе».
10 собеседовательных вопросов
1. Когда seaborn vs matplotlib?
Seaborn — быстрые статистические визуализации с из коробки красивым стилем. Matplotlib — полный контроль, custom-графики.
2. Как визуализировать retention по когортам?
Heatmap через sns.heatmap(pivot_table).
3. Как показать A/B-результаты?
Lineplot с hue='group' и confidence interval.
4. Как сравнить распределения?
boxplot, violinplot, histplot с hue.
5. Корреляционная матрица?
sns.heatmap(df.corr(), annot=True, cmap='coolwarm').
6. Facet grid — зачем?
Создавать много графиков по подкатегориям с одного кода.
7. Как сохранить seaborn-график?
plt.savefig('fig.png', dpi=300, bbox_inches='tight') после построения.
8. Как настроить стиль?
sns.set_style('whitegrid') + sns.set_context('notebook').
9. Что такое hue и style?
Параметры разделения данных. hue — цвет, style — стиль линии/маркера.
10. Как показать ошибки/CI?
Параметр ci=95 в lineplot, barplot, regplot. ci=None чтобы убрать.
Как тренироваться
Seaborn быстро учится на примерах: возьмите Kaggle-датасет, постройте 10 разных типов графиков.
Совет: в дашбордах для бизнеса — seaborn/matplotlib. В интерактивных — plotly. На собесе знания базовых типов seaborn достаточно.
Читайте также
FAQ
Где взять cheatsheet?
https://seaborn.pydata.org/cheatsheet.html — официальная шпаргалка.
seaborn дольше загружается?
Да, на старте. Кеш первый импорт — 1-2 сек. Не критично в notebook.
Почему мои графики некрасивые?
Сет фоновый стиль: sns.set_theme() в начале. И figsize побольше: plt.figure(figsize=(10, 6)).
Можно ли интерактивные графики?
Нет, seaborn — статичные. Для интерактивных — plotly или altair.