[Explained] Како направити топлотну мапу у Питхон-у

Vizuelizacija predstavlja ključan pristup u razumevanju podataka i sticanju korisnih i praktičnih uvida. Dobro osmišljen vizuelni prikaz omogućava posmatraču da brzo stekne osnovni utisak o informacijama, samo jednim pogledom.

Među popularnim vizuelizacijama koje se koriste za analizu podataka ističe se toplotna mapa. U ovom članku, detaljno ću objasniti koncept toplotne mape i demonstrirati kako se ona može kreirati u Python-u, koristeći biblioteke Matplotlib, Seaborn i Plotly.

Šta je toplotna mapa?

Izvor: seaborn.pydata.org

Toplotna mapa je dvodimenzionalna grafička reprezentacija podataka koja ih prikazuje kao matricu ili mrežu ćelija. Svaka tačka podataka je predstavljena nijansom boje. Tamnije nijanse označavaju veće vrednosti, dok svetlije nijanse predstavljaju manje vrednosti.

Toplotne mape olakšavaju uočavanje obrazaca, trendova i varijacija unutar podataka. Pružajući sažet pregled, omogućavaju korisnicima da brzo identifikuju područja sa visokim ili niskim vrednostima, klastere ili izuzetke.

Gde se koriste toplotne mape?

Toplotne mape su izuzetno korisne za prikazivanje kako se vrednosti menjaju u prostoru. Uobičajene primene uključuju:

Vreme

Najčešći primer toplotne mape sa kojim se većina ljudi susreće je ona koja prikazuje varijacije temperature na različitim lokacijama.

Na primer, vremenska prognoza iz Daily Express koristi toplotnu mapu za prikaz očekivanih temperatura. Na taj način je lako vizuelno prepoznati koja područja će biti topla, hladna ili između.

Prikaz upotrebe veb-sajta/aplikacije

Izvor: Hotjar

Prateći kretanje miša, klikove i obrasce skrolovanja, toplotne mape pomažu u identifikaciji popularnih ili zanemarenih delova veb stranice. Ovo se zatim može koristiti za optimizaciju korisničkog interfejsa i poboljšanje korisničkog iskustva.

Medicinska dijagnostika

Izvor: researchgate.net

Toplotne mape vizualizuju područja visoke ili niske aktivnosti u telu. Ovo može pomoći u identifikaciji anomalija i bolesti, kao i u praćenju progresije ili odgovora na lečenje kod stanja kao što je rak.

Biblioteke za kreiranje toplotnih mapa u Python-u

Python je popularan jezik za analizu i vizualizaciju podataka, zahvaljujući svojoj jednostavnoj sintaksi i bogatom ekosistemu. Postoji nekoliko biblioteka koje se mogu koristiti za kreiranje toplotnih mapa u Python-u, uključujući:

  • Matplotlib – Popularna biblioteka za vizualizaciju podataka. To je biblioteka niskog nivoa koja nudi širok spektar opcija za prilagođavanje, ali može biti kompleksna za korišćenje.
  • Seaborn – Ova biblioteka za vizualizaciju je izgrađena na vrhu Matplotlib-a i pojednostavljuje neke od njegovih funkcija, istovremeno pružajući vizuelno atraktivnije rezultate.
  • Plotly – Ova biblioteka nudi jednostavan API za kreiranje interaktivnih toplotnih mapa u Python-u.

U narednom odeljku, istražićemo kako se kreiraju toplotne mape koristeći sve ove biblioteke.

Kako generisati toplotnu mapu?

U ovom odeljku, pokazaću kako se kreiraju toplotne mape koristeći Matplotlib, Seaborn i Plotly. Za pisanje koda, koristiću Google Colab, besplatnu instancu Python beležnice koja koristi Google infrastrukturu za izvršavanje koda. Ne zahteva podešavanje i lako se koristi za praćenje ovih primera. Počećemo sa Matplotlib-om.

Matplotlib

Prvo, uvozimo Matplotlib biblioteku.

import matplotlib.pyplot as plt

Takođe, biće nam potreban NumPy za generisanje nasumičnog skupa podataka.

import numpy as np

Za generisanje skupa podataka, koristimo sledeći kod:

# Kreiranje semena za reproduktivnost
np.random.seed(2)

# Generisanje 10 x 10 niza celih brojeva između 1 i 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

Za iscrtavanje podataka, koristimo `imshow` metodu, prosleđujući podatke kao argument. Postoje dodatni argumenti koji se mogu koristiti za dalju prilagodbu.

plt.imshow(data)

Nakon izvršavanja ovog koda, treba da se pojavi toplotna mapa.

Iako je ovo dobar početak, postoji mnogo opcija za prilagođavanje. Na primer, možemo promeniti boje korišćene na slici pomoću `cmap` argumenta koji se prosleđuje funkciji `imshow`. Ako želimo da promenimo boju u različite nijanse plave, koristimo sledeći kod:

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

Kompletan spisak `cmap` opcija se može naći ovde. Rezultat gornjeg koda će biti:

Toplotna mapa bi bila korisnija kada bi postojala legenda koja objašnjava šta boje predstavljaju. Dodajemo legendu pomoću sledećeg koda:

plt.colorbar()

Nakon izvršavanja ovog koda, prikaz treba da izgleda ovako:

Legenda je korisna, ali u nekim slučajevima je potrebno označiti različite vrednosti kako bi gledalac mogao tačno videti šta je predstavljeno. Dodajemo tekst u svaku ćeliju pomoću funkcije `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",
      )

Poslednja stvar koju ćemo uraditi sa toplotnom mapom je postavljanje oznaka na osama. Koristimo `plt.xticks` funkciju za x-osu i `plt.yticks` funkciju za y-osu. Ove metode se koriste na sličan način; jedina razlika je osa na koju svaka metoda utiče.

Prvi argument je lista pozicija na kojima se postavljaju oznake. Ovo je predstavljeno kao niz indeksa. Sledeći argument je lista stvarnih oznaka koje se postavljaju. Evo primera kako bismo postavili oznake:

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 je to! Ovako se kreira toplotna mapa u Matplotlib-u. Kompletan kod je detaljno opisan u nastavku.

import numpy as np
import matplotlib.pyplot as plt

# Kreiranje semena za reproduktivnost
np.random.seed(2)

# Generisanje 10 x 10 niza celih brojeva između 1 i 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

# Kreiranje grafikona sa plavom kao bojom
plt.imshow(data, cmap = 'Blues')

# Prikazivanje palete boja
plt.colorbar()

# Dodavanje vrednosti
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",
      )

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

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

Međutim, korišćenje Matplotlib-a nije najlakše rešenje. Kao što ćemo videti u nastavku, druge biblioteke, kao što su Seaborn i Plotly, olakšavaju proces kreiranja toplotne mape.

Seaborn

U ovom odeljku, ponovo ćemo kreirati prethodni primer koristeći Seaborn. Seaborn je biblioteka koja se nadovezuje na Matplotlib. Pruža apstrakcije koje olakšavaju rad. Za kreiranje toplotne mape, prvo uvozimo potrebne biblioteke.

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

Uvezli smo Matplotlib, jer ga Seaborn zahteva. Takođe moramo da uvezemo NumPy za generisanje nasumičnog skupa podataka. Na kraju, uvozimo Seaborn.

Zatim, generišemo skup podataka koristeći NumPy.

# Kreiranje semena za reproduktivnost
np.random.seed(2)

# Generisanje 10 x 10 niza celih brojeva između 1 i 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

Nakon toga, kreiramo liste sa oznakama.

# Oznake
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 kraju, kreiramo stvarnu toplotnu mapu pozivanjem funkcije `heatmap` modula `sn`.

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

Kao što vidite, prosledili smo nekoliko argumenata. Evo objašnjenja svakog od njih:

  • `data` je skup podataka koji želimo da nacrtamo
  • `cmap` je shema boja pomoću koje želimo da se kreira toplotna mapa
  • `annot` specificira da li želimo da označimo tačke podataka njihovim stvarnim vrednostima
  • `yticklabels` je lista oznaka za vertikalnu osu
  • `xticklabels` je lista oznaka za horizontalnu osu

Na kraju, prikazujemo grafikon koristeći kod:

plt.show()

Ovo će generisati sledeću toplotnu mapu:

Plotly

Za Plotly, proces je sličan Seaborn-u. Evo koda za kreiranje toplotne mape u Plotly:

import plotly.express as px
import numpy as np

# Kreiranje semena za reproduktivnost
np.random.seed(2)

# Generisanje 10 x 10 niza celih brojeva između 1 i 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

# Oznake
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")

Kao što vidite, toplotna mapa se generiše u poslednjem redu pomoću funkcije `px.imshow()`. Ova funkcija prihvata podatke za iscrtavanje kao pozicioni argument. Pored toga, koristi i sledeće argumente:

  • `text_auto` je boolean koji omogućava dodavanje vrednosti kada je postavljen na `True`
  • `x` je lista oznaka osa
  • `y` je lista oznaka y ose
  • `color_continuous_scale` određuje šemu boja koja se koristi za grafikon

Kao što vidite, Plotly je jednostavniji od Seaborn-a i Matplotlib-a. Pored toga, generisani grafikon je interaktivan u poređenju sa drugim bibliotekama koje proizvode statične slike.

Evo snimka ekrana konačnog rezultata:

Završne reči

U ovom članku, pokrili smo kako se kreiraju toplotne mape u Python-u. Objasnili smo kako da koristite glavne biblioteke – Matplotlib, Seaborn i Plotly. Takođe smo videli kako Seaborn i Plotly pružaju pojednostavljene apstrakcije u odnosu na Matplotlib. Jedna od važnih primena toplotnih mapa je praćenje načina na koji ljudi koriste vaše veb stranice.

Sledeće, pogledajte alatke za toplotne mape koje vam pokazuju gde korisnici klikću.