Wizualizacja danych to kluczowy element procesu analizy, umożliwiający efektywne zrozumienie informacji i wyciąganie z nich wartościowych wniosków. Dobrze zaprojektowany wykres pozwala odbiorcy na szybkie uchwycenie sedna przekazu.
Jednym z popularnych narzędzi wizualizacji jest mapa cieplna, idealna do prezentacji danych o charakterze macierzowym. W tym artykule zgłębimy tajniki map cieplnych oraz pokażemy, jak je tworzyć w Pythonie, korzystając z bibliotek Matplotlib, Seaborn i Plotly.
Czym jest mapa cieplna?
Źródło: seaborn.pydata.org
Mapa cieplna to dwuwymiarowa reprezentacja danych w formie siatki lub macierzy, gdzie każdemu punktowi danych przypisany jest odcień koloru. Intensywność barwy danego punktu odzwierciedla jego wartość – ciemniejsze odcienie wskazują na wyższe wartości, a jaśniejsze na niższe.
Mapy cieplne są nieocenione w identyfikacji wzorców, trendów i zmian w zbiorach danych. Umożliwiają szybkie dostrzeżenie obszarów o wysokich lub niskich wartościach, skupisk danych oraz wartości odstających.
Gdzie stosuje się mapy cieplne?
Mapy cieplne doskonale sprawdzają się w prezentacji zmian wartości w przestrzeni. Przykłady ich codziennego zastosowania to:
Prognoza pogody
Najbardziej intuicyjnym przykładem mapy cieplnej jest ta przedstawiająca rozkład temperatury na danym obszarze.
Powyższa mapa, zaczerpnięta z Daily Express, wizualizuje prognozowane temperatury za pomocą kolorów, ułatwiając szybkie zorientowanie się w regionalnych różnicach.
Analiza użycia stron internetowych i aplikacji
Źródło: HotJar
Mapy cieplne, śledząc ruchy myszy, kliknięcia i sposób przewijania strony, pozwalają na identyfikację popularnych i pomijanych elementów witryny. Te informacje są kluczowe przy optymalizacji interfejsu użytkownika i poprawie doświadczenia odbiorcy.
Obrazowanie medyczne
Źródło: researchgate.net
W medycynie mapy cieplne wizualizują obszary o podwyższonej lub obniżonej aktywności w organizmie. Ułatwia to wykrywanie anomalii, diagnostykę chorób i ocenę skuteczności leczenia, na przykład w przypadku nowotworów.
Biblioteki Pythona do tworzenia map cieplnych
Python, dzięki swojej przejrzystej składni i bogatemu ekosystemowi, jest chętnie wybierany do analizy i wizualizacji danych. Istnieje wiele bibliotek pozwalających na generowanie map cieplnych, w tym:
- Matplotlib – podstawowa biblioteka do wizualizacji danych, oferująca szerokie możliwości dostosowania, ale wymagająca nieco więcej pracy.
- Seaborn – biblioteka oparta na Matplotlib, upraszczająca wiele funkcji i zapewniająca bardziej atrakcyjne wizualizacje.
- Plotly – biblioteka oferująca prosty interfejs do tworzenia interaktywnych map cieplnych.
W kolejnych sekcjach pokażemy, jak tworzyć mapy cieplne, korzystając z każdej z tych bibliotek.
Jak wygenerować mapę cieplną?
W tej części artykułu pokażemy, jak wygenerować mapy cieplne za pomocą Matplotlib, Seaborn i Plotly. Do kodowania użyjemy Google Colab – darmowego środowiska do uruchamiania notatników Pythona. Zacznijmy od Matplotlib.
Matplotlib
Na początek zaimportujmy bibliotekę Matplotlib.
import matplotlib.pyplot as plt
Będziemy również potrzebować NumPy do wygenerowania losowego zbioru danych.
import numpy as np
Oto kod generujący zbiór danych:
# Ustawienie ziarna generatora liczb losowych dla powtarzalności np.random.seed(2) # Generowanie tablicy 10x10 z liczbami całkowitymi od 1 do 50 data = np.random.randint(low = 1, high = 50, size = (10, 10))
Do wykreślenia danych użyjemy metody imshow, przekazując dane jako argument. Możemy również przekazać dodatkowe argumenty, o których powiemy później.
plt.imshow(data)
Po uruchomieniu komórki powinniśmy zobaczyć prostą mapę cieplną.
Możliwości dostosowywania są jednak znacznie większe. Możemy na przykład zmienić paletę kolorów za pomocą argumentu cmap, przekazywanego do imshow. Aby uzyskać mapę cieplną w różnych odcieniach niebieskiego, użyjemy następującego kodu:
plt.imshow(data, cmap = 'Blues')
Pełna lista dostępnych palet kolorów znajduje się tutaj. Wynikiem powyższego kodu będzie:
Mapa cieplna staje się bardziej czytelna, gdy zawiera legendę wyjaśniającą, co reprezentują poszczególne kolory. Dodajmy ją, używając następującego kodu:
plt.colorbar()
Teraz wykres powinien wyglądać tak:
Legenda jest pomocna, ale w niektórych przypadkach możemy chcieć dodać opis każdej komórki z dokładną wartością. Aby to zrobić, dodamy tekst w każdej komórce za pomocą funkcji 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ą, którą zrobimy, jest ustawienie etykiet osi. Użyjemy funkcji plt.xticks dla osi x i plt.yticks dla osi y. Sposób użycia obu funkcji jest identyczny – jedyną różnicą jest oś, na którą wpływają.
Pierwszym argumentem jest lista pozycji, w których mają być umieszczone etykiety, reprezentowana jako tablica indeksów. Drugi argument to lista etykiet, które zostaną wstawione. Oto przykład:
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 tworzymy mapę cieplną w Matplotlib. Poniżej przedstawiamy pełny kod:
import numpy as np import matplotlib.pyplot as plt # Ustawienie ziarna generatora liczb losowych dla powtarzalności np.random.seed(2) # Generowanie tablicy 10x10 z liczbami całkowitymi od 1 do 50 data = np.random.randint(low = 1, high = 50, size = (10, 10)) # Tworzenie wykresu z kolorem niebieskim plt.imshow(data, cmap = 'Blues') # Wyświetlanie paska kolorów plt.colorbar() # Dodawanie adnotacji wartości 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", ) # Tworzenie list etykiet osi x_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'] y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] # Dodawanie etykiet osi plt.xticks(np.arange(len(x_labels)), labels=x_labels) plt.yticks(np.arange(len(y_labels)), labels=y_labels)
Choć Matplotlib oferuje duże możliwości, nie jest najłatwiejszy w użyciu. Jak zobaczymy, inne biblioteki, takie jak Seaborn i Plotly, upraszczają proces tworzenia map cieplnych.
Seaborn
W tej sekcji odtworzymy poprzedni przykład, używając Seaborn. Jest to biblioteka, która opiera się na Matplotlib i oferuje abstrakcje ułatwiające pracę. Zacznijmy 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ż jest on wymagany przez Seaborn. Musimy też zaimportować NumPy do wygenerowania losowego zestawu danych. Na końcu importujemy Seaborn.
Następnie generujemy dane za pomocą NumPy.
# Ustawienie ziarna generatora liczb losowych dla powtarzalności np.random.seed(2) # Generowanie tablicy 10x10 z liczbami całkowitymi od 1 do 50 data = np.random.randint(low = 1, high = 50, size = (10, 10))
Po wykonaniu tej czynności tworzymy listy etykiet osi.
# Etykiety osi 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 właściwą mapę cieplną, wywołując funkcję heatmap z modułu sn.
hm = sn.heatmap(data = data, cmap = 'Oranges', annot = True, yticklabels = y_labels, xticklabels = x_labels)
Jak widać, przekazaliśmy kilka argumentów. Oto ich wyjaśnienie:
- data to zbiór danych, który chcemy wykreślić
- cmap to paleta kolorów, za pomocą której chcemy utworzyć mapę cieplną
- annot określa, czy chcemy dodać adnotacje z wartościami danych
- yticklabels to lista etykiet dla osi pionowej
- xticklabels to lista etykiet dla osi poziomej
Na koniec wyświetlamy wykres za pomocą:
plt.show()
Wynikiem będzie następująca mapa cieplna:
Plotly
W przypadku Plotly proces tworzenia mapy cieplnej jest podobny do Seaborn. Oto kod:
import plotly.express as px import numpy as np # Ustawienie ziarna generatora liczb losowych dla powtarzalności np.random.seed(2) # Generowanie tablicy 10x10 z liczbami całkowitymi od 1 do 50 data = np.random.randint(low = 1, high = 50, size = (10, 10)) # Etykiety osi 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ć, mapa cieplna jest generowana w ostatniej linii za pomocą funkcji px.imshow(). Funkcja ta przyjmuje dane do wykreślenia jako argument pozycyjny oraz argumenty słowa kluczowego:
- text_auto to wartość logiczna, która włącza adnotacje, gdy jest ustawiona na wartość true
- x to lista etykiet osi x
- y to lista etykiet osi y
- color_continuous_scale określa schemat kolorów używany na wykresie.
Plotly, jak widać, jest prostszy w użyciu niż Seaborn i Matplotlib. Ponadto wykres wygenerowany przez Plotly jest interaktywny, w przeciwieństwie do statycznych obrazów generowanych przez pozostałe biblioteki.
Oto zrzut ekranu z ostatecznym wynikiem:
Podsumowanie
W tym artykule omówiliśmy proces tworzenia map cieplnych w Pythonie. Przeanalizowaliśmy trzy główne biblioteki: Matplotlib, Seaborn i Plotly. Pokazaliśmy, że Seaborn i Plotly oferują uproszczone abstrakcje w stosunku do Matplotlib. Mapy cieplne mają wiele zastosowań, a jednym z kluczowych jest analiza sposobu, w jaki użytkownicy korzystają z Twojej strony internetowej.
Warto także zwrócić uwagę na inne narzędzia do analizy map cieplnych, umożliwiające śledzenie kliknięć użytkowników na stronie.