Pandas & NumPy Academy · Lektion

Värmekartor för korrelationsmatriser

Beräkna en korrelationsmatris med DataFrame.corr() och visualisera den som en färgkodad värmekarta med sns.heatmap.

Lektion 4 av 413 steg

Värmekartor för korrelationsmatriser är en gratis lektion i Pandas & NumPy Academy på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Pandas & NumPy Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Pandas & NumPy Academy innehåller totalt 4 lektioner.

Vad är en korrelationsmatris?

En korrelationsmatris är en kvadratisk tabell där posten (i, j) innehåller Pearsons korrelationskoefficient mellan kolumn i och kolumn j. Värdena sträcker sig från -1 (perfekt negativ linjär korrelation) till +1 (perfekt positiv), där 0 betyder att det inte finns något linjärt samband. Diagonalen är alltid 1 (en variabel är perfekt korrelerad med sig själv). Korrelationsmatriser är det första steget när man vill förstå vilka variabler som förändras tillsammans innan man bygger en modell.

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))

Beräkna korrelationsmatrisen

Anropa DataFrame.corr() för att beräkna parvisa Pearson-korrelationer för alla numeriska kolumner. Parametern method styr vilken korrelation som ska beräknas: 'pearson' (standard, linjär), 'spearman' (rangbaserad, robust mot avvikare och icke-linjära monotona samband) eller 'kendall'. För skeva finansiella data eller antalsdata är Spearman ofta mer informativt än 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))

Grundläggande värmekarta med sns.heatmap

sns.heatmap(data) tar en tvådimensionell matris eller DataFrame och återger den som ett färgrutnät — färgen i varje cell kodar dess numeriska värde. När funktionen används på en korrelationsmatris representerar varma färger (rött) vanligtvis positiv korrelation, medan kalla färger (blått) representerar negativ korrelation. Parametern annot=True skriver ut det numeriska värdet i varje cell, vilket är avgörande för att läsa av en korrelationsvärmekarta korrekt.

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()

Välj rätt färgkarta

För korrelationsmatriser ska Ni alltid använda en divergerande färgkarta centrerad kring noll: cmap='coolwarm', 'RdBu_r' eller 'vlag'. Dessa kartor använder en färg för positiva värden, en annan för negativa och en neutral mittpunkt vid noll. Undvik sekventiella färgkartor (som 'Blues') för korrelationsdata, eftersom de gör det omöjligt att visuellt skilja mellan positiva och negativa korrelationer. Ange vmin=-1, vmax=1 för att låsa färgskalan till hela korrelationsintervallet.

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()

Maskera den övre triangeln

Eftersom en korrelationsmatris är symmetrisk (corr[i,j] == corr[j,i]) är det överflödigt att visa båda halvorna. Använd np.triu för att skapa en mask för den övre triangeln och skicka den till mask= i sns.heatmap. Det halverar antalet celler och gör diagrammet mindre rörigt och lättare att läsa. Diagonalvärdena (alla 1.0) kan också maskeras eftersom de inte tillför någon information.

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()

Anpassa etiketter och cellstorlek

Styr etikettformatet med fmt= (till exempel '.2f' för två decimaler) och teckenstorleken med annot_kws={'size': 10}. Parametern linewidths lägger till tunna linjer mellan cellerna, vilket gör rutnätet lättare att läsa för stora matriser. Använd square=True för att tvinga fram kvadratiska celler oavsett figurens mått, vilket ger värmekartor ett rent och balanserat utseende.

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()

Klustring med clustermap

sns.clustermap() ordnar om rader och kolumner med hjälp av hierarkisk klustring för att gruppera variabler med liknande korrelationsmönster. Det gör det mycket enklare att identifiera block av korrelerade egenskaper i stora matriser. Dendrogrammet på de övre och vänstra axlarna visar klustringsträdet. Använd method='ward' och metric='euclidean' som rimliga standardvärden för korrelationsbaserad klustring.

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()

Värmekarta för data i en pivottabell

Värmekartor är inte begränsade till korrelationsmatriser — alla tvådimensionella numeriska tabeller kan dra nytta av färgkodning. Ett vanligt mönster är att beräkna en pivottabell (till exempel genomsnittlig dricks per dag och tid) och sedan visualisera den som en värmekarta. Det omvandlar en tät tabell med siffror till ett färgrutnät som snabbt kan överblickas, där de högsta och lägsta värdena framträder visuellt.

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()

Tolka korrelationsvärden

Använd följande ungefärliga riktvärden när Ni tolkar korrelationer: |r| < 0.2 = försumbar, 0.2-0.4 = svag, 0.4-0.6 = måttlig, 0.6-0.8 = stark, > 0.8 = mycket stark. Korrelation säger dock ingenting om kausalitet och kan vara skenbar (korrelerad av en slump på grund av en tredje, bakomliggande variabel). Kombinera alltid numerisk korrelationsanalys med spridningsdiagram för att kontrollera att sambandet faktiskt är linjärt och inte drivs av avvikare.

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))

Värmekartor för stora datamängder: delmängder

För DataFrames med många kolumner blir en fullständig korrelationsvärmekarta oläslig. Ett bättre tillvägagångssätt är att filtrera korrelationsmatrisen så att endast par med |r| över ett tröskelvärde visas (till exempel 0.5), eller att välja ut de egenskaper som korrelerar starkast med en målvariabel. Ni kan också skapa delmängder utifrån domän — till exempel genom att separat visa korrelationer mellan finansiella mått och mellan operativa mått i en affärsdatamängd.

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()

Spara värmekartor i filer

Värmekartor ingår ofta i rapporter och presentationer. Anropa plt.savefig('filename.png', dpi=150, bbox_inches='tight') efter att värmekartan har skapats för att spara den. Argumentet bbox_inches='tight' förhindrar att axeltext beskärs. För PDF-rapporter använder Ni format='pdf'. När Ni använder sns.clustermap lagras figuren i det returnerade objektet: 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')

Snabbkontroll

Testa Er förståelse av korrelationsvärmekartor från den här lektionen.

Sammanfattning av lektionen

I den här lektionen har Ni lärt Er att DataFrame.corr() beräknar parvisa korrelationer, att sns.heatmap återger dem som ett färgrutnät med divergerande färgkartor och annoteringar samt att maskering av den övre triangeln tar bort överflödig information. Härnäst utforskar vi hela arbetsflödet för explorativ dataanalys — en systematisk checklista för profilering av alla nya datamängder.

Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
30
Lektioner
120

Vanliga frågor

Är lektionen ”Värmekartor för korrelationsmatriser” gratis?

Ja – hela texten till ”Värmekartor för korrelationsmatriser” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Pandas & NumPy Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Pandas & NumPy Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Värmekartor för korrelationsmatriser”?

Beräkna en korrelationsmatris med DataFrame.corr() och visualisera den som en färgkodad värmekarta med sns.heatmap. Ni övar på Pandas & NumPy Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Pandas & NumPy Academy?

Du behöver inga förkunskaper. Utbildningen i Pandas & NumPy Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Värmekartor för korrelationsmatriser”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Pandas & NumPy Academy-lektionen?

Ja. Varje Pandas & NumPy Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Fördelningsdiagram: histplot och kdeplot
  2. Kategoriska diagram: boxplot, barplot, violinplot
  3. Punktdiagram och parvisa diagram
  4. Värmekartor för korrelationsmatriser
← Tillbaka till Pandas & NumPy Academy