Конференция по Data Science! 02 ноября 2023 Участвовать →

Seaborn Heatmaps: 13 способов настроить визуализацию матрицы корреляции

Для data scientist'ов проверка корреляций является важной частью процесса анализа поисковых данных. Этот анализ является одним из методов, используемых для определения того, какие функции больше всего влияют на целевую переменную, и, в свою очередь, используются при прогнозировании этой целевой переменной. Другими словами, это широко используемый метод выбора функций в машинном обучении.

А поскольку визуализация обычно проще к пониманию, чем табличные данные, - тепловые карты, как правило, используются для визуализации корреляционных матриц. Простой способ построить тепловую карту в Python - это использовать библиотеку Seaborn

 Аргументы тепловой карты Seaborn

Тепловые карты Seaborn приятны для глаз, и они, как правило, почти сразу посылают четкие сообщения о данных. Вот почему этот метод визуализации корреляционной матрицы широко используется аналитиками данных.

Но что еще мы можем получить из тепловой карты, кроме простого графика корреляционной матрицы?

В двух словах: ОЧЕНЬ МНОГОЕ.

Удивительно, но функция тепловой карты Seaborn имеет 18 аргументов, которые можно использовать для настройки корреляционной матрицы, улучшая способ получения быстрых выводов. В рамках данного руководства мы разберем 13 из них.

Итак, перейдем к делу!

Начало работы с Seaborn

Чтобы немного упростить задачу для этого урока, мы будем использовать один из предварительно установленных наборов данных в Seaborn. Первое, что нам нужно сделать, это импортировать библиотеку Seaborn и загрузить данные.

1. #importing all the libraries needed
2. import seaborn as sns
3. import numpy as np
4. import pandas as pd
5. import matplotlib.pyplot as plt
6.
7. tips_df = sns.load_dataset('tips')
8. tips_df.head()

Обратите внимание: если вы используете Google Colab или какой-либо пакет Anaconda, вам не нужно устанавливать Seaborn; вам нужно только импортировать его. В противном случае, используйте эту ссылку для установки Seaborn.

Наши данные, которые называются Tips (предварительно установленный набор данных в библиотеке Seaborn), имеют 7 столбцов, состоящих из 3 числовых и 4 категориальных признаков. Каждая строка отражает тип клиента (будь то мужчина или женщина, курильщик или некурящий), который ужинает или обедает в определенный день недели. Также фиксируется общая сумма счета, чаевые и размер стола для гостя. (Для получения дополнительной информации о предварительно установленных наборах данных в библиотеке Seaborn, кликните здесь). 

Важно отметить, что при построении матрицы корреляции полностью игнорируются любые нечисловые столбцы. В данном уроке все переменные категории были заменены на числовые.

Вот как выглядит DataFrame после обработки данных:

Посмотреть, как были обработаны данные, можно здесь.

Как упоминалось ранее, функция тепловой карты Seaborn может принимать 18 аргументов.

Вот как выглядит функция со всеми аргументами:

sns.heatmap(data, vmin=None, vmax=None, cmap=None,center=None, robust=False, annot=None, fmt=’.2g’, annot_kws=None, linewidths=0, linecolor=’white’, cbar=True, cbar_kws=None, cbar_ax=None, square=False, xticklabels=’auto’, yticklabels=’auto’, mask=None, ax=None, **kwargs)

Просто взглянуть на код и не иметь представления о том, как он работает, может быть весьма удручающе. Давайте разберем это вместе.

Чтобы лучше понять аргументы, мы сгруппируем их в 4 категории:

  1. Основы;
  2. Регулировка оси (измерительной шкалы);
  3. Эстетика;
  4. Изменение формы матрицы.

Основы

1. Самый важный аргумент в функции - ввод данных, поскольку конечной целью является построение корреляции. Метод .corr() будет добавлен к данным в качестве первого аргумента.

sns.heatmap(df_new.corr())

2. Достаточно интерпретировать данные, используя только первый аргумент. Для еще более точной интерпретации необходимо добавить аргумент annot=True, который помогает отобразить коэффициент корреляции.

sns.heatmap(df_new.corr(), annot = True)

3. В некоторых случаях, коэффициенты корреляции могут приближаться к 5 десятичным знакам. Хорошим приемом для уменьшения отображаемого числа и улучшения читабельности является вставка аргумента fmt =’.3g' или fmt = ‘.1g', потому что, по умолчанию, функция отображает две цифры после запятой (больше нуля), т.е. fmt='.2g' (Это не означает, что она всегда отображает два знака после запятой). Давайте определим аргумент по умолчанию fmt='.1g'.

sns.heatmap(df_new.corr(), annot = True, fmt='.1g')

Для остальной части этого урока мы будем придерживаться значения по умолчанию fmt='.2g'

Регулировка оси (измерительной шкалы)

4. Следующие три аргумента связаны с масштабированием цветовой шкалы. Бывают моменты, когда шкала не начинается с нуля, отрицательного числа или заканчивается на определенном числе - или даже имеет отдельный центр. Все это можно настроить, указав эти три аргумента: vmin минимальное значение шкалы; vmax максимальное значение шкалы; и center=. По умолчанию, все три не указаны. Допустим, мы хотим, чтобы наша цветовая шкала была от -1 до 1 и была центрирована на 0.

sns.heatmap(df_new.corr(), annot = True, vmin=-1, vmax=1, center= 0)

Одно очевидное изменение, кроме изменения масштаба, заключается в изменении цвета. Это связано с изменением center от None до Zero или любое другое число. Но это не означает, что мы не можем вернуть прошлый цвет или изменить его на любой другой. Сейчас посмотрим, как это сделать.

Эстетика

5. Сейчас изменим цвет, используя аргумент cmap 

sns.heatmap(df_new.corr(), annot = True, vmin=-1, vmax=1, center= 0, cmap= 'coolwarm')

Для получения дополнительной информации о доступных цветовых кодах, кликните здесь.

6. По умолчанию, толщина и цвет границы каждой строки матрицы установлены на 0 и белый соответственно. Бывает, когда тепловая карта может выглядеть лучше с некоторой толщиной границы и изменением цвета. В этом случае, применяются аргументы linewidths и linecolor. Давайте укажем linewidths и linecolor на 3 и black соответственно. 

sns.heatmap(df_new.corr(), annot = True, vmin=-1, vmax=1, center= 0, cmap= 'coolwarm', linewidths=3, linecolor='black')

Для остальной части этого урока мы вернемся к значениям аргументов cmap, linecolor и linewidths по умолчанию. Это можно сделать с помощью вставки cmap=None, linecolor='white' и linewidths=0 или не вставляя аргументы вообще (что мы и собираемся делать).

7. На данный момент цветовая шкала тепловой карты отображается вертикально. Ее можно сделать горизонтальной, указав аргумент cbar_kws

sns.heatmap(df_new.corr(), annot = True, cbar_kws= {'orientation': 'horizontal'} )

8. Также бывают случаи, когда лучше вообще убрать цветовую шкалу. Это можно сделать, указав cbar=False.

sns.heatmap(df_new.corr(), annot = True, cbar=False)

В оставшейся части этого урока мы будем отображать цветовую шкалу.

9. Посмотрите поближе на матрицу выше - каждая ячейка прямоугольной формы. Мы можем изменить форму ячеек на квадратную с помощью аргумента square=True

sns.heatmap(df_new.corr(), annot = True,square=True)

Изменение формы матрицы

Изменение всей формы матрицы с прямоугольной на треугольную не так просто. Для этого нам нужно импортировать методы NumPy .triu() и .tril(), а затем указать аргумент тепловой карты Seaborn, который называется mask=

.triu() является методом в NumPy, который возвращает нижний треугольник любой заданной ему матрицы, в то время как .tril() возвращает верхний треугольник любой заданной ему матрицы.

Идея состоит в том, чтобы отправить матрицу корреляции в метод NumPy, а затем передать ее в аргумент mask, чтобы создать маску в матрице тепловой карты. Давайте посмотрим, как это работает, ниже.

Сначала с помощью np.trui() метода: 

matrix = np.triu(df_new.corr())
sns.heatmap(df_new.corr(), annot=True, mask=matrix)

Теперь с помощью np.tril() метода:

mask = np.tril(df_new.corr())
sns.heatmap(df_new.corr(), annot=True, mask=mask)

В заключение

Мы разобрали 13 способов настроить нашу тепловую карту Seaborn для корреляционной матрицы. Остальные 5 аргументов используются редко, поскольку они очень специфичны по характеру данных и сформулированным целям. Полный исходный код этого руководства можно найти на GitHub

Источник

Поделиться записью
Вверх