</>
Тема 4 из 4

Тепловые карты

Тепловая карта — это таблица, в которой значения показаны цветом. Она подходит, когда у данных два «измерения»: дни и часы, ученики и предметы, признаки и признаки. С одного взгляда видно, где значения большие, а где маленькие.

heatmap по таблице

sns.heatmap принимает таблицу (DataFrame или двумерный массив) и раскрашивает каждую клетку:

import seaborn as sns
import pandas as pd

marks = pd.DataFrame(
    [[5, 4, 5], [3, 4, 4], [4, 5, 3]],
    index=["Аня", "Боря", "Вика"],
    columns=["алгебра", "физика", "химия"],
)
sns.heatmap(marks)

Подписи строк берутся из индекса таблицы, подписи столбцов — из названий столбцов. Справа рисуется цветовая шкала.

Подписи в клетках

sns.heatmap(marks, annot=True, fmt="d")
  • annot=True — написать значение в каждой клетке;
  • fmt — формат числа: "d" — целое, ".2f" — два знака после точки, ".0%" — проценты.

Цвета и шкала

sns.heatmap(marks, cmap="RdYlGn", vmin=2, vmax=5)
  • cmap — палитра: "viridis" (по умолчанию в matplotlib), "Blues", "coolwarm", "RdYlGn" (от красного через жёлтый к зелёному) и десятки других;
  • vmin, vmax — какие значения соответствуют краям шкалы. Без них шкала растягивается от минимума до максимума данных, и одна и та же оценка «4» в разных классах окажется разного цвета. Фиксированная шкала делает карты сравнимыми;
  • center=0 — для данных со знаком: ноль окажется в середине палитры.

Сводная таблица: из длинных данных — в прямоугольные

Часто данные приходят «длинными» — одна строка на событие:

день,час,гостей
пн,9,3
пн,10,5
вт,9,2

Для тепловой карты их нужно разложить в прямоугольную таблицу — это делает pivot_table:

table = df.pivot_table(index="день", columns="час", values="гостей",
                       aggfunc="sum", fill_value=0)
sns.heatmap(table, annot=True, fmt="d")
  • index — что станет строками, columns — столбцами;
  • aggfunc — как объединять несколько значений в одной клетке ("sum", "mean", "count");
  • fill_value — чем заполнить клетки без данных.

Строки и столбцы сводной таблицы упорядочены по возрастанию.

Корреляции

Классическое применение тепловой карты — матрица корреляций: насколько связаны пары числовых столбцов.

corr = df.corr()
sns.heatmap(corr, annot=True, fmt=".2f", cmap="coolwarm", vmin=-1, vmax=1)

Коэффициент корреляции лежит от −1 до 1: близко к 1 — величины растут вместе, к −1 — одна растёт, другая падает, около 0 — линейной связи нет. На диагонали всегда 1: столбец полностью связан сам с собой.

Итог

  • sns.heatmap(таблица) — значения цветом; подписи из индекса и столбцов;
  • annot=True, fmt — числа в клетках;
  • cmap — палитра, vmin/vmax — фиксированная шкала, center — середина;
  • pivot_table(index, columns, values, aggfunc, fill_value) — длинные данные в прямоугольную таблицу;
  • df.corr() + heatmap — матрица корреляций.