Visualisering är ett viktigt sätt att förstå data och dra informativa och handlingsbara insikter. En bra bild låter läsaren få en grundläggande känsla av informationen med bara en blick.
En populär visualisering som används för att visa data är en värmekarta. I den här artikeln kommer jag att förklara en värmekarta och hur man skapar en i Python med Matplotlib, Seaborn och Plotly.
Innehållsförteckning
Vad är en värmekarta?
Källa: seaborn.pydata.org
En värmekarta är en tvådimensionell bild som representerar data som en matris eller ett rutnät av punkter. En nyans av ett färgdiagram representerar varje datapunkt. Mörkare nyanser representerar högre värden än ljusare nyanser.
Värmekartor gör det enkelt att identifiera mönster, trender och variationer i data. De tillhandahåller sammanfattad information som låter användare snabbt se områden med höga eller låga värden, kluster eller extremvärden.
Var används värmekartor?
Värmekartor är användbara för att visa hur värden varierar över rymden. Vardagliga användningsfall inkluderar:
Väder
Den mest populära värmekartan som de flesta har sett är en bokstavlig värmekarta – som visar hur temperaturen varierar över olika platser.
Detta är ett exempel på väderprognos från Daily Express visar de förväntade temperaturerna som en värmekarta. Detta gör det lättare att visualisera vilka platser som kommer att vara varma, kalla eller däremellan.
Visar användning av webbplats/app
Källa: HotJar
Genom att spåra musrörelser, klick och rullningsmönster hjälper värmekartor att identifiera populära eller försummade områden på en webbsida. Detta kan sedan användas för att optimera användargränssnitt och förbättra användarupplevelsen.
Medicinsk bildbehandling
Källa: researchgate.net
Värmekartor visualiserar områden med hög eller låg aktivitet i kroppen. Detta kan identifiera anomalier och sjukdomar och bedöma utvecklingen eller svaret på behandling vid tillstånd som cancer.
Bibliotek för att skapa värmekartor i Python
Python är ett populärt språk för dataanalys och visualisering. Detta beror på dess enkla syntax och omfattande ekosystem. Det finns flera bibliotek som du kan använda för att skapa värmekartor i Python. Dessa inkluderar:
- Matplotlib – Ett populärt datavisualiseringsbibliotek. Det är ett lågnivåbibliotek som ger fler anpassningsalternativ men är komplicerat.
- Seaborn – Detta visualiseringsbibliotek är byggt ovanpå Matplotlib och förenklar några av dess funktioner samtidigt som det ger snyggare visualiseringar.
- Plotly – Detta är ett visualiseringsbibliotek som tillhandahåller ett lättanvänt API för att skapa Heatmaps i Python.
I nästa avsnitt kommer vi att utforska hur man skapar värmekartor med alla dessa bibliotek.
Hur skapar man en värmekarta?
I det här avsnittet kommer jag att utforska hur man skapar värmekartor med Matplotlib, Seaborn och Plotly. För att koda kommer jag att använda Google Colab. Det är en gratis instans av en Python Notebook som använder Google Infrastructure för att köra din kod. Den kräver ingen installation, så du kan också använda den för att följa med. Till att börja med kommer vi att täcka Matplotlib först.
Matplotlib
Till att börja med börjar vi med att importera Matplotlib-biblioteket.
import matplotlib.pyplot as plt
Vi kommer också att behöva NumPy för att generera en slumpmässig datauppsättning.
import numpy as np
För att generera datasetet lägger vi till följande 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))
För att plotta data använder vi imshow-metoden. Vi skickar in data som argument. Vi kan göra mer genom att föra vidare argument som vi kommer in på senare.
plt.imshow(data)
Om du kör cellen bör du se en värmekarta.
Även om detta är bra, finns det många anpassningsalternativ tillgängliga för dig. Till att börja med kan du ändra färgen som används i bilden med cmap-argumentet som du skickar till imshow. Om du till exempel vill ändra färgen som används av värmekartan till olika nyanser av blått, skulle du skapa plotten med följande.
plt.imshow(data, cmap = 'Blues')
Den fullständiga listan över cmap-alternativ finns här. Hur som helst, resultatet av ovanstående skulle bli:
En värmekarta skulle vara mer användbar om det fanns en nyckel för att förklara vad färgerna representerade. För att göra detta, lägg till följande kod:
plt.colorbar()
Efter detta bör du få en figur som ser ut så här:
En färgstapel är användbar, men i vissa fall kanske du vill kommentera de olika värdena så att tittaren kan se exakt vad som representeras. För att göra detta skulle du skriva text i var och en av cellerna med 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", )
Det sista vi kommer att göra med värmekartan är att sätta bocketiketterna på axlarna. Vi kommer att använda plt.xticks-funktionen för x-axeln och plt.yticks-funktionen för y-axeln. Dessa metoder kallas på samma sätt; den enda skillnaden är den axel som varje metod påverkar.
Det första argumentet är listan över platser att infoga bockar. Detta representeras som en rad index. Följande argument är den faktiska listan över etiketter som skulle infogas. Här är ett exempel på hur vi skulle infoga bockar:
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)
Och det är allt! Det är så du skapar en värmekarta i Matplotlib. Den kompletta kodlösningen beskrivs nedan.
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)
Att använda Matplotlib är dock inte den lättaste lösningen. Som vi kommer att se härnäst förenklar andra bibliotek, som Seaborn och Matplotlib, processen att bygga en värmekarta.
Seaborn
I det här avsnittet kommer vi att återskapa det tidigare exemplet med Seaborn. Seaborn är ett bibliotek som bygger ovanpå Matplotlib. Det ger abstraktioner som gör det lättare att arbeta med. För att skapa en värmekarta börjar vi med att importera de bibliotek vi ska använda.
import matplotlib.pyplot as plt import numpy as np import seaborn as sn
Vi importerade Matplotlib eftersom Seaborn kräver det. Därefter måste vi också importera NumPy för att generera en slumpmässig datauppsättning. Till sist måste vi importera Seaborn.
Därefter genererar vi datasetet med hjälp av 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))
Efter att ha gjort detta skapar vi våra listor med kryssetiketter.
# 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']
Sedan, slutligen, skapar vi den faktiska värmekartan genom att anropa värmekartafunktionen för sn-modulen.
hm = sn.heatmap(data = data, cmap = 'Oranges', annot = True, yticklabels = y_labels, xticklabels = x_labels)
Som du kan se, gick vi igenom flera argument. Här är en förklaring för var och en:
- data är den datauppsättning vi vill plotta
- cmap är färgschemat vi vill att värmekartan ska skapas med
- annot anger om vi vill kommentera datapunkterna med deras faktiska värde
- yticklabels är listan över etiketter vi vill ha för de vertikala axeltickarna
- xticklabels är listan över etiketter för horisontella axelfickringar.
Till sist visar vi handlingen med hjälp av koden:
plt.show()
Detta kommer att generera följande värmekarta:
Handling
För Plotly liknar processen Seaborn. Här är koden för att skapa en värmekarta i 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")
Som du kan se genereras värmekartan på den sista raden med funktionen px.imshow() . Denna funktion tar in data för att plotta som ett positionsargument. Dessutom tar det sökordsargument enligt följande:
- text_auto är ett booleskt värde som aktiverar anteckningen när den är satt till true
- x är en lista med kryssetiketter på x-axeln
- y är en lista över bocketiketter på y-axeln
- color_continuous_scale bestämmer färgschemat som används för grafen.
Som du kan se är Plotly enklare än Seaborn och Matplotlib. Dessutom är grafen som genereras interaktiv jämfört med andra bibliotek som producerar statiska bilder.
Här är skärmdumpen för slutresultatet:
Slutord
I den här artikeln behandlade vi hur man skapar värmekartor i Python. Vi täckte huvudbiblioteken – Matplotlib, Seaborn och Plotly. Vi såg också hur Seaborn och Plotly ger förenklade abstraktioner över Matplotlib. En viktig användning av Heatmaps är att spåra hur människor använder dina webbplatser.
Kolla sedan in heatmap-verktyg som berättar var dina användare klickar.