Heatmaps voor correlatiematrices
Bereken een correlatiematrix met DataFrame.corr() en visualiseer deze als een heatmap met kleurcodering met sns.heatmap.
Heatmaps voor correlatiematrices is een gratis Pandas & NumPy Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Pandas & NumPy Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Pandas & NumPy Academy bevat in totaal 4 lessen.
Wat is een correlatiematrix?
Een correlatiematrix is een vierkante tabel waarin de waarde op positie (i, j) de Pearson-correlatiecoëfficiënt tussen kolom i en kolom j bevat. De waarden lopen van -1 (perfect negatieve lineaire correlatie) tot +1 (perfect positieve correlatie), waarbij 0 betekent dat er geen lineair verband is. De diagonaal is altijd 1 (een variabele correleert perfect met zichzelf). Correlatiematrices zijn de eerste stap om te begrijpen welke variabelen samen bewegen voordat je een model bouwt.
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# Compute correlation matrix for numeric columns
tips = sns.load_dataset('tips')
corr = tips[['total_bill', 'tip', 'size']].corr()
print(corr.round(2))De correlatiematrix berekenen
Roep DataFrame.corr() aan om paarsgewijze Pearson-correlaties voor alle numerieke kolommen te berekenen. De parameter method bepaalt welke correlatie wordt berekend: 'pearson' (standaard, lineair), 'spearman' (op rang gebaseerd en robuust tegen uitschieters en niet-lineaire monotone verbanden) of 'kendall'. Voor scheve financiële gegevens of telgegevens is Spearman vaak informatiever dan Pearson.
import pandas as pd
import seaborn as sns
tips = sns.load_dataset('tips')
numeric = tips.select_dtypes(include='number')
# Pearson vs Spearman
pearson = numeric.corr(method='pearson')
spearman = numeric.corr(method='spearman')
print('Pearson:')
print(pearson.round(2))
print('\nSpearman:')
print(spearman.round(2))Eenvoudige heatmap met sns.heatmap
sns.heatmap(data) neemt een tweedimensionale array of DataFrame en geeft die weer als een kleurrooster: de kleur van elke cel codeert de numerieke waarde. Wanneer je dit toepast op een correlatiematrix, staan warme kleuren (rood) meestal voor positieve correlatie en koele kleuren (blauw) voor negatieve correlatie. De parameter annot=True drukt de numerieke waarde in elke cel af. Dat is essentieel om een correlatieheatmap correct te lezen.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
corr = tips.select_dtypes('number').corr()
sns.heatmap(corr, annot=True, fmt='.2f')
plt.title('Correlation Heatmap — Tips Dataset')
plt.tight_layout()
plt.show()De juiste kleurenschaal kiezen
Gebruik voor correlatiematrices altijd een divergerende kleurenschaal die gecentreerd is op nul: cmap='coolwarm', 'RdBu_r' of 'vlag'. Deze schalen gebruiken één kleur voor positieve waarden, een andere voor negatieve waarden en een neutraal middelpunt voor nul. Vermijd sequentiële kleurenschalen (zoals 'Blues') voor correlatiegegevens, omdat je daarmee positieve en negatieve correlaties visueel niet van elkaar kunt onderscheiden. Stel vmin=-1, vmax=1 in om de kleurenschaal vast te zetten op het volledige correlatiebereik.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
corr = tips.select_dtypes('number').corr()
sns.heatmap(
corr,
annot=True,
fmt='.2f',
cmap='coolwarm',
vmin=-1,
vmax=1,
center=0
)
plt.title('Correlation Heatmap with Diverging Palette')
plt.tight_layout()
plt.show()De bovenste driehoek maskeren
Omdat een correlatiematrix symmetrisch is (corr[i,j] == corr[j,i]), is het overbodig om beide helften te tonen. Gebruik np.triu om een masker voor de bovenste driehoek te maken en geef dit door met mask= aan sns.heatmap. Hierdoor wordt het aantal cellen gehalveerd, waardoor het diagram minder druk en gemakkelijker te lezen wordt. Je kunt ook de diagonale waarden (allemaal 1.0) maskeren, omdat die geen informatie bevatten.
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
tips = sns.load_dataset('tips')
corr = tips.select_dtypes('number').corr()
# Mask the upper triangle (including diagonal)
mask = np.triu(np.ones_like(corr, dtype=bool))
sns.heatmap(
corr,
mask=mask,
annot=True,
fmt='.2f',
cmap='coolwarm',
vmin=-1,
vmax=1
)
plt.title('Lower-Triangle Correlation Heatmap')
plt.tight_layout()
plt.show()Aantekeningen en celgrootte aanpassen
Regel de opmaak van de aantekeningen met fmt= (bijvoorbeeld '.2f' voor twee decimalen) en de tekengrootte met annot_kws={'size': 10}. De parameter linewidths voegt dunne lijnen tussen cellen toe, waardoor het rooster bij grote matrices gemakkelijker te lezen is. Gebruik square=True om vierkante cellen af te dwingen, ongeacht de afmetingen van de figuur. Zo krijgen heatmaps een strakke, evenwichtige uitstraling.
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# Load a wider dataset for a more interesting heatmap
penguins = sns.load_dataset('penguins').select_dtypes('number')
corr = penguins.corr()
mask = np.triu(np.ones_like(corr, dtype=bool))
sns.heatmap(
corr,
mask=mask,
annot=True,
fmt='.2f',
cmap='vlag',
vmin=-1,
vmax=1,
linewidths=0.5,
square=True,
annot_kws={'size': 10}
)
plt.title('Penguins Correlation Matrix')
plt.tight_layout()
plt.show()Clusteren met clustermap
sns.clustermap() ordent rijen en kolommen opnieuw met behulp van hiërarchische clustering, zodat variabelen met vergelijkbare correlatiepatronen bij elkaar komen te staan. Hierdoor kun je blokken gecorreleerde kenmerken in grote matrices veel gemakkelijker herkennen. Het dendrogram op de bovenste en linkeras toont de clusterstructuur. Gebruik method='ward' en metric='euclidean' als verstandige standaardinstellingen voor clustering op basis van correlaties.
import seaborn as sns
import matplotlib.pyplot as plt
penguins = sns.load_dataset('penguins').select_dtypes('number').dropna()
corr = penguins.corr()
sns.clustermap(
corr,
cmap='coolwarm',
vmin=-1,
vmax=1,
annot=True,
fmt='.2f',
figsize=(6, 6)
)
plt.suptitle('Clustered Correlation Matrix', y=1.02)
plt.show()Heatmap voor gegevens uit een draaitabel
Heatmaps zijn niet beperkt tot correlatiematrices: elke tweedimensionale numerieke tabel profiteert van kleurcodering. Een veelgebruikt patroon is het berekenen van een draaitabel (bijvoorbeeld de gemiddelde fooi per dag en tijdstip) en deze vervolgens als heatmap te visualiseren. Zo verandert een dichte tabel met getallen in een kleurrooster dat je direct kunt scannen, waarbij de hoogste en laagste waarden visueel meteen opvallen.
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
tips = sns.load_dataset('tips')
# Pivot: average bill by day and time
pivot = tips.pivot_table(
values='total_bill',
index='day',
columns='time',
aggfunc='mean'
)
sns.heatmap(pivot, annot=True, fmt='.1f', cmap='YlOrRd')
plt.title('Average Bill by Day and Time')
plt.tight_layout()
plt.show()Correlatiewaarden interpreteren
Gebruik bij het interpreteren van correlaties deze grove richtlijnen: |r| < 0.2 = verwaarloosbaar, 0.2-0.4 = zwak, 0.4-0.6 = matig, 0.6-0.8 = sterk, > 0.8 = zeer sterk. Correlatie zegt echter niets over causaliteit en kan schijnbaar zijn (toevallig gecorreleerd door een derde, verstorende variabele). Combineer numerieke correlatieanalyse altijd met spreidingsdiagrammen om te controleren of het verband werkelijk lineair is en niet door uitschieters wordt veroorzaakt.
import pandas as pd
import seaborn as sns
# Find the most correlated pairs
penguins = sns.load_dataset('penguins').select_dtypes('number').dropna()
corr = penguins.corr()
# Unstack to get pairs, remove self-correlations, sort
pairs = (corr
.unstack()
.reset_index()
.rename(columns={'level_0': 'var1', 'level_1': 'var2', 0: 'r'})
.query('var1 != var2')
.assign(abs_r=lambda df: df['r'].abs())
.sort_values('abs_r', ascending=False)
.drop_duplicates(subset='abs_r')
)
print(pairs.head(6).to_string(index=False))Heatmaps voor grote gegevensverzamelingen: deelverzamelingen
Voor DataFrames met veel kolommen wordt een volledige correlatieheatmap onleesbaar. Een betere aanpak is om de correlatiematrix te filteren en alleen paren te tonen met |r| boven een drempelwaarde (bijvoorbeeld 0.5), of alleen de kenmerken te selecteren die het sterkst met een doelvariabele correleren. Je kunt ook op domein filteren, bijvoorbeeld door correlaties tussen financiële maatstaven afzonderlijk van operationele maatstaven in een bedrijfsgegevensverzameling weer te geven.
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# Show only features with |r| > 0.4 with any other feature
penguins = sns.load_dataset('penguins').select_dtypes('number').dropna()
corr = penguins.corr()
# Filter columns that have at least one high correlation (excluding diagonal)
high_corr = (corr.abs() > 0.4).any(axis=1)
filtered = corr.loc[high_corr, high_corr]
mask = np.triu(np.ones_like(filtered, dtype=bool))
sns.heatmap(filtered, mask=mask, annot=True,
fmt='.2f', cmap='coolwarm', vmin=-1, vmax=1)
plt.title('High-Correlation Subset')
plt.tight_layout()
plt.show()Heatmaps opslaan in bestanden
Heatmaps worden vaak opgenomen in rapporten en presentaties. Roep plt.savefig('filename.png', dpi=150, bbox_inches='tight') aan nadat je de heatmap hebt gemaakt om deze op te slaan. Het argument bbox_inches='tight' voorkomt dat aslabels worden afgesneden. Gebruik voor PDF-rapporten format='pdf'. Bij sns.clustermap wordt de figuur opgeslagen in het geretourneerde object: g = sns.clustermap(...); g.savefig('plot.png').
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
tips = sns.load_dataset('tips')
corr = tips.select_dtypes('number').corr()
mask = np.triu(np.ones_like(corr, dtype=bool))
fig, ax = plt.subplots(figsize=(6, 5))
sns.heatmap(corr, mask=mask, annot=True, fmt='.2f',
cmap='coolwarm', vmin=-1, vmax=1,
linewidths=0.5, ax=ax)
ax.set_title('Correlation Heatmap')
# Save to file
plt.savefig('/tmp/correlation_heatmap.png', dpi=150, bbox_inches='tight')
plt.close()
print('Saved to /tmp/correlation_heatmap.png')Korte controle
Test je begrip van correlatieheatmaps uit deze les.
Samenvatting van de les
In deze les heb je geleerd dat DataFrame.corr() paarsgewijze correlaties berekent, dat sns.heatmap deze weergeeft als een kleurrooster met divergerende kleurenschalen en aantekeningen, en dat het maskeren van de bovenste driehoek overbodigheid verwijdert. Hierna verkennen we de volledige pipeline voor verkennende gegevensanalyse: een systematische checklist voor het profileren van elke nieuwe gegevensverzameling.
Leer Python met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 30
- Lessen
- 120
Veelgestelde vragen
Is de les “Heatmaps voor correlatiematrices” gratis?
Ja — de volledige tekst van “Heatmaps voor correlatiematrices” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Pandas & NumPy Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Pandas & NumPy Academy bevat in totaal 4 lessen.
Wat leer ik in “Heatmaps voor correlatiematrices”?
Bereken een correlatiematrix met DataFrame.corr() en visualiseer deze als een heatmap met kleurcodering met sns.heatmap. Je oefent met Pandas & NumPy Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Pandas & NumPy Academy te beginnen?
Ervaring vooraf is niet nodig. Pandas & NumPy Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Heatmaps voor correlatiematrices”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Pandas & NumPy Academy?
Ja. Elke les over Pandas & NumPy Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Verdelingsgrafieken: histplot en kdeplot
- Categorische grafieken: boxplot, barplot, violinplot
- Spreidingsgrafieken en pairplots
- Heatmaps voor correlatiematrices