[Explained] Jak stworzyć mapę cieplną w Pythonie

Wizualizacja to ważny sposób nadawania sensu danym oraz wyciągania pouczających i przydatnych spostrzeżeń. Dobra grafika pozwala czytelnikowi uzyskać podstawowe znaczenie informacji jednym rzutem oka.

Popularną wizualizacją używaną do przeglądania danych jest mapa cieplna. W tym artykule wyjaśnię mapę cieplną i jak ją utworzyć w Pythonie przy użyciu Matplotlib, Seaborn i Plotly.

Co to jest mapa cieplna?

Źródło: seaborn.pydata.org

Mapa termiczna to dwuwymiarowy obraz przedstawiający dane jako macierz lub siatkę punktów. Odcień wykresu kolorów reprezentuje każdy punkt danych. Ciemniejsze odcienie reprezentują wyższe wartości niż jaśniejsze odcienie.

Mapy cieplne ułatwiają identyfikację wzorców, trendów i zmian w danych. Dostarczają podsumowanych informacji, które pozwalają użytkownikom szybko zobaczyć obszary o wysokich lub niskich wartościach, klastrach lub wartościach odstających.

Gdzie są używane mapy cieplne?

Mapy cieplne są pomocne w pokazywaniu zmian wartości w przestrzeni. Codzienne przypadki użycia obejmują:

Pogoda

Najpopularniejsza mapa cieplna, którą większość ludzi widziała, to dosłowna mapa cieplna – pokazująca, jak zmienia się temperatura w różnych miejscach.

To jest przykładowa prognoza pogody z Daily Express pokazując oczekiwane temperatury jako mapę cieplną. Ułatwia to wizualizację, które miejsca będą gorące, zimne lub pośrednie.

Wyświetlanie użycia witryny/aplikacji

Źródło: HotJar

Dzięki śledzeniu ruchów myszy, kliknięć i wzorców przewijania mapy cieplne pomagają zidentyfikować popularne lub zaniedbane obszary strony internetowej. Można to następnie wykorzystać do optymalizacji interfejsów użytkownika i poprawy komfortu użytkowania.

Obrazowanie medyczne

Źródło: researchgate.net

Mapy cieplne wizualizują obszary o wysokiej lub niskiej aktywności w ciele. Może to identyfikować anomalie i choroby oraz oceniać postęp lub odpowiedź na leczenie w stanach takich jak rak.

Biblioteki do tworzenia map ciepła w Pythonie

Python jest popularnym językiem do analizy i wizualizacji danych. Wynika to z prostej składni i rozbudowanego ekosystemu. Istnieje wiele bibliotek, których można użyć do tworzenia map ciepła w Pythonie. Obejmują one:

  • Matplotlib – popularna biblioteka do wizualizacji danych. Jest to biblioteka niskiego poziomu, która zapewnia więcej opcji dostosowywania, ale jest skomplikowana.
  • Seaborn — ta biblioteka wizualizacji jest zbudowana na bazie Matplotlib i upraszcza niektóre z jej funkcji, zapewniając jednocześnie lepiej wyglądające wizualizacje.
  • Plotly — jest to biblioteka wizualizacji, która zapewnia łatwy w użyciu interfejs API do tworzenia map cieplnych w Pythonie.

W następnej sekcji przyjrzymy się, jak tworzyć mapy cieplne przy użyciu wszystkich tych bibliotek.

Jak wygenerować mapę termiczną?

W tej sekcji zbadam, jak tworzyć mapy popularności za pomocą Matplotlib, Seaborn i Plotly. Aby kodować, będę używać Współpraca Google. Jest to bezpłatna instancja Notatnika Pythona, która używa infrastruktury Google do uruchamiania Twojego kodu. Nie wymaga konfiguracji, więc możesz go również użyć do śledzenia. Na początek omówimy najpierw Matplotlib.

Matplotlib

Aby rozpocząć, zaczynamy od zaimportowania biblioteki Matplotlib.

import matplotlib.pyplot as plt

Będziemy również potrzebować NumPy do wygenerowania losowego zestawu danych.

import numpy as np

Aby wygenerować zestaw danych, dodamy następujący kod:

# Creating a seed for reproducibility
np.random.seed(2)

# Generating 10 x 10 array of integers between 1 and 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

Aby wykreślić dane, używamy metody imshow. Przekazujemy dane jako argument. Możemy zrobić więcej, przekazując dodatkowe argumenty, którymi zajmiemy się później.

plt.imshow(data)

Jeśli uruchomisz komórkę, powinieneś zobaczyć mapę termiczną.

Chociaż jest to świetne, dostępnych jest wiele opcji dostosowywania. Na początek możesz zmienić kolor używany w obrazie za pomocą argumentu cmap, który przekazujesz do imshow. Na przykład, jeśli chcesz zmienić kolor używany przez mapę cieplną na różne odcienie niebieskiego, wygenerowałbyś następujący wykres.

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

Znajduje się pełna lista opcji cmap Tutaj. W każdym razie wynikiem powyższego byłoby:

Mapa termiczna byłaby bardziej użyteczna, gdyby istniał klucz wyjaśniający, co reprezentują kolory. Aby to zrobić, dodaj następujący kod:

plt.colorbar()

Następnie powinieneś otrzymać figurę, która wygląda tak:

Pasek kolorów jest przydatny, ale w niektórych przypadkach możesz chcieć opisać różne wartości, aby widz mógł dokładnie zobaczyć, co jest reprezentowane. Aby to zrobić, wpiszesz tekst w każdej komórce za pomocą 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",
      )

Ostatnią rzeczą, jaką zrobimy z mapą cieplną, jest ustawienie znaczników na osiach. Użyjemy funkcji plt.xticks dla osi x i funkcji plt.yticks dla osi y. Te metody są nazywane w ten sam sposób; jedyną różnicą jest oś, na którą wpływa każda metoda.

Pierwszym argumentem jest lista miejsc do wstawienia znaczników. Jest to reprezentowane jako tablica indeksów. Poniższy argument to rzeczywista lista etykiet, które zostaną wstawione. Oto przykład, jak wstawilibyśmy znaczniki:

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)

I to wszystko! W ten sposób tworzysz mapę cieplną w Matplotlib. Pełne rozwiązanie kodu jest szczegółowo opisane poniżej.

import numpy as np
import matplotlib.pyplot as plt

# Creating a seed for reproducibility
np.random.seed(2)

# Generating 10 x 10 array of integers between 1 and 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

# Creating a plot with blue as a color
plt.imshow(data, cmap = 'Blues')

# Displaying a color bar
plt.colorbar()

# Annotating values
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",
      )

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

# Adding the tick labels
plt.xticks(np.arange(len(x_labels)), labels=x_labels)
plt.yticks(np.arange(len(y_labels)), labels=y_labels)

Jednak użycie Matplotlib nie jest najłatwiejszym rozwiązaniem. Jak zobaczymy dalej, inne biblioteki, takie jak Seaborn i Matplotlib, upraszczają proces tworzenia mapy cieplnej.

Urodzony w morzu

W tej sekcji odtworzymy poprzedni przykład przy użyciu Seaborn. Seaborn to biblioteka, która opiera się na Matplotlib. Zawiera abstrakcje, które ułatwiają pracę. Aby utworzyć mapę cieplną, zaczynamy od zaimportowania bibliotek, których będziemy używać.

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

Zaimportowaliśmy Matplotlib, ponieważ wymaga tego Seaborn. Następnie musimy również zaimportować NumPy, aby wygenerować losowy zestaw danych. Na koniec musimy zaimportować Seaborn.

Następnie generujemy zestaw danych za pomocą NumPy.

# Creating a seed for reproducibility
np.random.seed(2)

# Generating 10 x 10 array of integers between 1 and 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

Po wykonaniu tej czynności tworzymy nasze listy etykiet kleszczy.

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

Na koniec tworzymy rzeczywistą mapę cieplną, wywołując funkcję mapy cieplnej modułu sn.

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

Jak widać, wymieniliśmy kilka argumentów. Oto wyjaśnienie dla każdego:

  • data to zestaw danych, który chcemy wykreślić
  • cmap to schemat kolorów, za pomocą którego chcemy utworzyć mapę cieplną
  • adnot określa, czy chcemy opatrzyć punkty danych ich rzeczywistą wartością
  • yticklabels to lista etykiet, które chcemy dla znaczników osi pionowej
  • xticklabels to lista etykiet dla znaczników osi poziomej.

Na koniec pokazujemy fabułę za pomocą kodu:

plt.show()

Spowoduje to wygenerowanie następującej mapy cieplnej:

spiskowo

W przypadku Plotly proces jest podobny do Seaborn. Oto zarys kodu do tworzenia mapy cieplnej w Plotly:

import plotly.express as px
import numpy as np

# Creating a seed for reproducibility
np.random.seed(2)

# Generating 10 x 10 array of integers between 1 and 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

# Tick labels
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")

Jak widać, heatmapa jest generowana w ostatniej linii za pomocą funkcji px.imshow(). Ta funkcja przyjmuje dane do wykreślenia jako argument pozycyjny. Ponadto przyjmuje argument słowa kluczowego w następujący sposób:

  • text_auto to wartość logiczna, która włącza adnotację, gdy jest ustawiona na wartość true
  • x to lista etykiet osi x
  • y to lista znaczników na osi y
  • color_continuous_scale określa schemat kolorów używany na wykresie.

Jak widać, Plotly jest prostszy niż Seaborn i Matplotlib. Ponadto wygenerowany wykres jest interaktywny w porównaniu z innymi bibliotekami, które tworzą obrazy statyczne.

Oto końcowy zrzut ekranu z wynikiem:

Ostatnie słowa

W tym artykule omówiliśmy, jak tworzyć mapy cieplne w Pythonie. Omówiliśmy główne biblioteki — Matplotlib, Seaborn i Plotly. Widzieliśmy również, jak Seaborn i Plotly zapewniają uproszczone abstrakcje w Matplotlib. Jednym z krytycznych zastosowań map cieplnych jest śledzenie, w jaki sposób ludzie korzystają z Twoich witryn.

Następnie sprawdź narzędzia map cieplnych, które informują, gdzie klikają Twoi użytkownicy.