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.