[Explained] Як створити теплову карту в Python

Візуалізація даних є надзвичайно важливим інструментом для аналізу та отримання корисної інформації. Ефективне візуальне представлення дозволяє швидко зрозуміти суть даних, лише поглянувши на нього.

Серед різноманітних методів візуалізації, теплові карти користуються великою популярністю. У цій статті ми розберемося, що таке теплова карта і як її створити за допомогою Python, використовуючи бібліотеки Matplotlib, Seaborn та Plotly.

Що являє собою теплова карта?

Джерело: seaborn.pydata.org

Теплова карта – це графічне двовимірне представлення даних у вигляді матриці або сітки. Кожен елемент даних відображається за допомогою певного відтінку кольору. Темніші відтінки вказують на більші значення, тоді як світліші – на менші.

Завдяки тепловим картам легко ідентифікувати закономірності, тренди та відхилення в даних. Вони допомагають швидко виявити області з високими або низькими значеннями, кластери або аномалії.

Де знаходять застосування теплові карти?

Теплові карти ефективно демонструють варіацію значень у просторі. Ось кілька прикладів їх використання у повсякденному житті:

Прогнозування погоди

Мабуть, найпоширеніший приклад – це теплова карта, що ілюструє температурні зміни в різних регіонах.

Наприклад, на веб-сайті Daily Express використовують теплову карту для демонстрації прогнозованих температур. Це дозволяє легко визначити, які області будуть спекотними, холодними або матимуть помірну температуру.

Аналіз використання веб-сайтів та додатків

Джерело: HotJar

Відстежуючи рухи миші, кліки та прокручування, теплові карти дозволяють визначити популярні та малоактивні зони веб-сторінки. Ця інформація використовується для оптимізації інтерфейсу та покращення користувацького досвіду.

Медична візуалізація

Джерело: researchgate.net

У медицині теплові карти візуалізують зони з підвищеною або зниженою активністю в організмі. Це допомагає виявляти аномалії, діагностувати захворювання, а також відстежувати прогрес лікування, наприклад, при раку.

Бібліотеки Python для створення теплових карт

Python є популярною мовою для аналізу та візуалізації даних завдяки простоті синтаксису та розгалуженій екосистемі. Існує декілька бібліотек, які дозволяють створювати теплові карти в Python:

  • Matplotlib – популярна бібліотека для візуалізації даних низького рівня, що надає широкі можливості налаштування, але може бути складною у використанні.
  • Seaborn – бібліотека, побудована на основі Matplotlib, яка спрощує деякі її функції та дозволяє створювати більш якісні візуалізації.
  • Plotly – бібліотека, що пропонує простий API для створення інтерактивних теплових карт на Python.

У наступних розділах ми розглянемо, як створити теплові карти за допомогою цих бібліотек.

Як створити теплову карту?

У цьому розділі ми розглянемо, як створити теплові карти з використанням Matplotlib, Seaborn та Plotly. Для розробки я буду використовувати Google Colab. Це безкоштовне середовище Python, що використовує інфраструктуру Google. Ви також можете скористатися ним, щоб повторити приклади. Розпочнемо з Matplotlib.

Matplotlib

Спочатку імпортуємо бібліотеку Matplotlib.

import matplotlib.pyplot as plt

Також нам знадобиться NumPy для генерації випадкових даних.

import numpy as np

Для створення набору даних використаємо наступний код:

# Зафіксуємо випадковість для відтворюваності результатів
np.random.seed(2)

# Генеруємо матрицю 10x10 з цілими числами від 1 до 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

Для відображення даних скористаємося методом imshow, передавши йому нашу матрицю. Пізніше ми розглянемо, як використовувати додаткові аргументи.

plt.imshow(data)

Після запуску коду ви отримаєте теплову карту.

Matplotlib надає широкі можливості налаштування. Для початку можна змінити кольорову гаму, передавши аргумент cmap методу imshow. Наприклад, щоб змінити кольори на відтінки синього, використайте наступний код.

plt.imshow(data, cmap = 'Blues')

Повний перелік можливих параметрів cmap можна знайти тут. Результатом буде:

Для кращого розуміння теплової карти потрібна шкала, що пояснює, які значення відповідають яким кольорам. Для цього додамо наступний код:

plt.colorbar()

Тепер ваш графік має виглядати так:

Шкала кольорів є корисною, але іноді потрібно відобразити конкретні значення у кожній клітинці. Для цього скористаємося методом plt.text().

for i in range(data.shape[0]):
   for j in range(data.shape[1]):
      plt.text(j, i, '%d' % data[i, j],
         horizontalalignment="center",
         verticalalignment="center",
      )

Наостанок, додамо позначки на осях. Для цього скористаємося функціями plt.xticks для осі x і plt.yticks для осі y. Ці методи мають однакову структуру, але впливають на різні осі.

Перший аргумент – це список позицій для відміток, представлених у вигляді масиву індексів. Другий аргумент – список підписів. Ось приклад:

x_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

plt.xticks(np.arange(len(x_labels)), labels=x_labels)
plt.yticks(np.arange(len(y_labels)), labels=y_labels)

Все готово! Таким чином ви створили теплову карту в Matplotlib. Повний код наведено нижче.

import numpy as np
import matplotlib.pyplot as plt

# Зафіксуємо випадковість для відтворюваності результатів
np.random.seed(2)

# Генеруємо матрицю 10x10 з цілими числами від 1 до 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

# Відображаємо теплову карту з синьою кольоровою гамою
plt.imshow(data, cmap = 'Blues')

# Додаємо шкалу кольорів
plt.colorbar()

# Додаємо значення в кожну клітинку
for i in range(data.shape[0]):
   for j in range(data.shape[1]):
      plt.text(j, i, '%d' % data[i, j],
         horizontalalignment="center",
         verticalalignment="center",
      )

# Створюємо списки підписів для осей
x_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

# Додаємо підписи до осей
plt.xticks(np.arange(len(x_labels)), labels=x_labels)
plt.yticks(np.arange(len(y_labels)), labels=y_labels)

Однак Matplotlib не є найпростішим варіантом. Інші бібліотеки, такі як Seaborn і Plotly, роблять процес створення теплових карт значно простішим.

Seaborn

У цьому розділі ми повторимо попередній приклад, використовуючи Seaborn. Seaborn – це бібліотека, побудована на основі Matplotlib. Вона надає абстракції, що спрощують роботу. Для створення теплової карти почнемо з імпорту необхідних бібліотек.

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sn

Ми імпортували Matplotlib, оскільки вона потрібна Seaborn. Далі нам потрібен NumPy для створення випадкових даних. Нарешті, ми імпортуємо Seaborn.

Далі ми генеруємо набір даних з NumPy.

# Зафіксуємо випадковість для відтворюваності результатів
np.random.seed(2)

# Генеруємо матрицю 10x10 з цілими числами від 1 до 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

Після цього створюємо списки позначень для осей.

# Підписи для осей
x_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

Потім створюємо саму теплову карту, викликаючи функцію heatmap модуля sn.

hm = sn.heatmap(data = data, cmap = 'Oranges', annot = True, yticklabels = y_labels, xticklabels = x_labels)

Як бачите, ми передали кілька аргументів. Ось пояснення кожного:

  • data – набір даних, який ми хочемо візуалізувати
  • cmap – кольорова схема для теплової карти
  • annot – вказує, чи потрібно анотувати дані їхніми значеннями
  • yticklabels – список підписів для вертикальної осі
  • xticklabels – список підписів для горизонтальної осі.

Наостанок відобразимо графік, використовуючи код:

plt.show()

Результатом буде теплова карта:

Plotly

У випадку з Plotly процес схожий на Seaborn. Ось код для створення теплової карти у Plotly:

import plotly.express as px
import numpy as np

# Зафіксуємо випадковість для відтворюваності результатів
np.random.seed(2)

# Генеруємо матрицю 10x10 з цілими числами від 1 до 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

# Підписи для осей
x_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

px.imshow(data, text_auto = True, x = x_labels, y = y_labels, color_continuous_scale="greys")

Як бачите, теплова карта генерується в останньому рядку за допомогою функції px.imshow(). Ця функція приймає дані для візуалізації як позиційний аргумент. Крім того, вона приймає наступні іменовані аргументи:

  • text_auto – логічне значення, що вмикає анотацію, якщо встановлено значення true
  • x – список підписів для відміток осі x
  • y – список підписів для відміток осі y
  • color_continuous_scale – визначає колірну схему для графіка.

Plotly простіший у використанні, ніж Seaborn і Matplotlib. Крім того, створений графік є інтерактивним, на відміну від інших бібліотек, що генерують статичні зображення.

Ось скріншот результату:

Підсумок

У цій статті ми розглянули процес створення теплових карт в Python за допомогою бібліотек Matplotlib, Seaborn та Plotly. Ми побачили, що Seaborn та Plotly пропонують спрощені абстракції над Matplotlib. Одним із найважливіших застосувань теплових карт є аналіз поведінки користувачів на веб-сайтах.

Далі ознайомтеся з інструментами, що дозволяють відстежувати кліки користувачів на веб-сторінках.