Heatmap простыми словами

Проверь себя · 1/3разбор после ответа
В таблице users адрес электронной почты хранится в разном регистре: Anna@mail.ru, anna@MAIL.ru и т.д. Как надёжнее всего найти все записи с конкретным адресом вне зависимости от регистра?

Короткое объяснение

Heatmap (тепловая карта) — визуализация данных через цвет. Яркость или оттенок ячейки показывает значение.

Используется для:

  • Матрицы корреляций
  • Cohort retention
  • Activity по часам × дням
  • Карты кликов на сайте

Примеры

Correlation matrix

       A    B    C
A  [1.0  0.8  0.2]
B  [0.8  1.0  0.3]
C  [0.2  0.3  1.0]

Красные ячейки = высокая корреляция. Глаз сразу видит связи.

Cohort heatmap

Cohort    | M0   | M1   | M2   | M3
Jan 2026  | 100% | 40%  | 20%  | 15%
Feb 2026  | 100% | 45%  | 25%  | 20%
Mar 2026  | 100% | 35%  | 15%  | 10%

Цвет = retention %. Видим, какая когорта лучше.

Activity heatmap

Дни недели × часы суток. Цвет = количество заказов. Видим, когда пик.

В Python (seaborn)

import seaborn as sns
import matplotlib.pyplot as plt

# correlation matrix
corr = df.corr()
sns.heatmap(corr, annot=True, cmap='RdBu_r', center=0)
plt.show()

Cohort retention

cohort_pivot = pd.pivot_table(
    df, values='retention',
    index='cohort', columns='period'
)
sns.heatmap(cohort_pivot, annot=True, fmt='.0%', cmap='YlGn')

Плюсы и минусы

Плюсы

  • Мгновенное восприятие. Большая таблица чисел — сложно. Heatmap — интуитивно.
  • Паттерны. Видны группировки, тренды, выбросы.
  • Компактность. Много данных в одной картинке.

Минусы

  • Не для точных значений. Сложно различить «0.65» и «0.72» по цвету. Добавляйте annot=True.
  • Проблемы с дальтонизмом. Красно-зелёные палитры путают. Используйте безопасные (Viridis, RdBu).
  • Порядок важен. Строки и колонки влияют на восприятие. Сортируйте по логике (дата, кластер).
  • Слишком много ячеек. 500×500 — невозможно прочитать. Максимум ~50×50.

Палитры цветов

Sequential

Для возрастающих значений (retention, revenue):

  • Viridis (современный стандарт)
  • YlGn (жёлто-зелёный)
  • Blues / Reds

Diverging

Для значений с «нейтральной» точкой (корреляция: -1 / 0 / +1):

  • RdBu (красный-синий)
  • coolwarm

Qualitative

Не для heatmap.

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Виды heatmap

Standard 2D

Оси x, y + цвет.

Correlation matrix

Специальный случай — квадратная матрица.

Calendar heatmap

По дням года. Github contributions — классика.

Geographic heatmap

На карте. Плотность событий.

Web heatmap

Клики и скроллы на странице (Hotjar, Crazy Egg).

Подготовка данных в SQL

SELECT
    DATE_PART('dow', event_at) AS day_of_week,
    DATE_PART('hour', event_at) AS hour,
    COUNT(*) AS events
FROM events
GROUP BY 1, 2;

Pivot в Python для heatmap.

На собесе

«Что такое heatmap?» Визуализация через цвет. Для матриц и больших датасетов.

«Когда использовать?» Correlation matrix, cohort retention, паттерны активности.

«Ограничения?» Не для точных значений. Не для дальтоников без подходящих палитр.

Частые ошибки

1. Нет annot на маленькой матрице

Корреляции 5×5 без чисел в ячейках — зритель строит догадки по оттенкам. annot=True экономит всем время.

2. Красно-зелёная палитра по умолчанию

~8% мужчин её не различают. Переходите на Viridis или RdBu — работает у всех.

3. Алфавитная сортировка

По умолчанию seaborn сортирует по алфавиту. Для cohort heatmap или кластерной матрицы это убивает паттерн — сортируйте вручную по дате или по кластеру.

4. 200×200 ячеек

Глаз не различает столько градаций. Агрегируйте в квантили или группы, иначе это не визуализация, а шум.

Связанные темы

FAQ

Heatmap или table?

Table — для точных чисел. Heatmap — для визуального поиска паттернов.

Annot=True обязательно?

Для небольших матриц — да. Для больших — загромождает.

Виды heatmap?

Standard 2D, correlation matrix, calendar, geographic, web.