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