Heatmap простыми словами
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.
Виды 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 ячеек
Глаз не различает столько градаций. Агрегируйте в квантили или группы, иначе это не визуализация, а шум.
Связанные темы
- Корреляция простыми словами
- Cohort analysis простыми словами
- seaborn vs matplotlib
- Dashboard простыми словами
FAQ
Heatmap или table?
Table — для точных чисел. Heatmap — для визуального поиска паттернов.
Annot=True обязательно?
Для небольших матриц — да. Для больших — загромождает.
Виды heatmap?
Standard 2D, correlation matrix, calendar, geographic, web.