Korrelaatiomatriisien lämpökartat
Laskekaa korrelaatiomatriisi DataFrame.corr()-menetelmällä ja esittäkää se väreillä koodattuna lämpökarttana sns.heatmap-funktiolla.
Korrelaatiomatriisien lämpökartat on ilmainen Pandas & NumPy Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Pandas & NumPy Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Pandas & NumPy Academy-kurssilla on yhteensä 4 oppituntia.
Mikä on korrelaatiomatriisi?
Korrelaatiomatriisi on neliötaulukko, jossa solu (i, j) sisältää sarakkeen i ja sarakkeen j välisen Pearsonin korrelaatiokertoimen. Arvot vaihtelevat välillä -1 (täydellinen negatiivinen lineaarinen korrelaatio) ja +1 (täydellinen positiivinen korrelaatio), ja 0 tarkoittaa lineaarisen yhteyden puuttumista. Diagonaalin arvot ovat aina 1 (muuttuja korreloi täydellisesti itsensä kanssa). Korrelaatiomatriisit ovat ensimmäinen askel sen ymmärtämisessä, mitkä muuttujat muuttuvat yhdessä, ennen mallin rakentamista.
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))Korrelaatiomatriisin laskeminen
Kutsukaa DataFrame.corr()-metodia laskeaksenne Pearsonin parittaiset korrelaatiot kaikille numeerisille sarakkeille. method-parametri määrittää laskettavan korrelaation: 'pearson' (oletus, lineaarinen), 'spearman' (järjestyslukuihin perustuva, poikkeama-arvoille ja epälineaarisille monotonisille yhteyksille vankka) tai 'kendall'. Vinoissa talous- tai lukumääräaineistoissa Spearman on usein informatiivisempi kuin 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))Peruslämpökartta komennolla sns.heatmap
sns.heatmap(data) ottaa kaksiulotteisen taulukon tai DataFramen ja esittää sen väriruudukkona: kunkin solun väri ilmaisee sen numeerisen arvon. Kun sitä käytetään korrelaatiomatriisiin, lämpimät värit (punainen) kuvaavat yleensä positiivista korrelaatiota ja viileät värit (sininen) negatiivista korrelaatiota. annot=True-parametri tulostaa numeerisen arvon jokaisen solun sisään, mikä on olennaista korrelaatiolämpökartan täsmällisessä tulkinnassa.
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()Oikean värikartan valitseminen
Käyttäkää korrelaatiomatriiseille aina nollaan keskitettyä diverging-värikarttaa: cmap='coolwarm', 'RdBu_r' tai 'vlag'. Näissä kartoissa positiivisille arvoille on yksi väri, negatiivisille toinen ja nollassa neutraali keskikohta. Välttäkää korrelaatiotiedoissa peräkkäisiä värikarttoja (kuten 'Blues'), koska niiden avulla positiivisia ja negatiivisia korrelaatioita ei voi erottaa visuaalisesti. Asettakaa vmin=-1, vmax=1, jotta väriskaala kattaa koko korrelaatioalueen.
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()Yläkolmion peittäminen
Koska korrelaatiomatriisi on symmetrinen (corr[i,j] == corr[j,i]), molempien puoliskojen näyttäminen on tarpeetonta. Luokaa np.triu-komennolla yläkolmion maski ja välittäkää se sns.heatmap-komennon mask=-parametrille. Tämä puolittaa solujen määrän, jolloin kaavio on vähemmän sekava ja helpompi lukea. Myös diagonaalin arvot (kaikki 1.0) voidaan peittää, koska ne eivät sisällä tietoa.
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()Selitteiden ja solukoon mukauttaminen
Hallitkaa selitteiden muotoilua fmt=-parametrilla (esimerkiksi '.2f' kahdelle desimaalille) ja fonttikokoa annot_kws={'size': 10}-parametrilla. linewidths-parametri lisää ohuet viivat solujen väliin, mikä helpottaa suurten matriisien lukemista. Pakottakaa solut neliöiksi square=True-parametrilla kuvion mitoista riippumatta. Näin lämpökartasta tulee selkeä ja tasapainoisen näköinen.
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()Ryhmittely clustermap-komennolla
sns.clustermap() järjestää rivit ja sarakkeet uudelleen hierarkkisen ryhmittelyn avulla niin, että samankaltaisia korrelaatiokuvioita sisältävät muuttujat ryhmittyvät yhteen. Tämä helpottaa huomattavasti korreloivien piirteiden ryhmien tunnistamista suurista matriiseista. Ylä- ja vasemman akselin dendrogrammi näyttää ryhmittelypuun. Käyttäkää method='ward'- ja metric='euclidean'-parametreja järkevinä oletusarvoina korrelaatioihin perustuvassa ryhmittelyssä.
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()Pivot-taulukkotietojen lämpökartta
Lämpökartat eivät rajoitu korrelaatiomatriiseihin: mikä tahansa kaksiulotteinen numeerinen taulukko hyötyy arvojen esittämisestä väreillä. Yleinen toimintatapa on laskea pivot-taulukko (esimerkiksi juomarahan keskiarvo päivän ja kellonajan mukaan) ja visualisoida se sitten lämpökarttana. Näin tiheä numerotaulukko muuttuu nopeasti silmäiltäväksi väriruudukoksi, josta suurimmat ja pienimmät arvot erottuvat heti.
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()Korrelaatioarvojen tulkitseminen
Käyttäkää korrelaatioiden tulkinnassa seuraavia suuntaa-antavia rajoja: |r| < 0.2 = merkityksetön, 0.2-0.4 = heikko, 0.4-0.6 = kohtalainen, 0.6-0.8 = voimakas, > 0.8 = erittäin voimakas. Korrelaatio ei kuitenkaan kerro mitään kausaliteetista, ja se voi olla näennäinen (kolmannen sekoittavan muuttujan vuoksi sattumalta syntyvä korrelaatio). Yhdistäkää numeerinen korrelaatioanalyysi aina hajontakaavioihin varmistaaksenne, että yhteys on todella lineaarinen eikä poikkeama-arvojen aiheuttama.
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))Suurten aineistojen lämpökartat: osajoukkojen valinta
Kun DataFramessa on paljon sarakkeita, koko korrelaatiolämpökartasta tulee vaikealukuinen. Parempi lähestymistapa on suodattaa korrelaatiomatriisi niin, että näytetään vain parit, joiden |r| ylittää tietyn rajan (esimerkiksi 0.5), tai valita vain kohdemuuttujan kanssa voimakkaimmin korreloivat piirteet. Voitte myös rajata tarkastelun osa-alueen mukaan: esimerkiksi liiketoiminta-aineistossa talousmittareiden väliset korrelaatiot voidaan esittää erikseen operatiivisista mittareista.
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()Lämpökarttojen tallentaminen tiedostoihin
Lämpökarttoja käytetään usein raporteissa ja esityksissä. Kutsukaa lämpökartan luonnin jälkeen plt.savefig('filename.png', dpi=150, bbox_inches='tight') tallentaaksenne sen. bbox_inches='tight'-argumentti estää akselien otsikoiden leikkautumisen. PDF-raportteja varten käyttäkää format='pdf'. Kun käytätte sns.clustermap-komentoa, kuva tallennetaan palautettuun olioon: 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')Pikatarkistus
Testatkaa tässä oppitunnissa oppimanne korrelaatiolämpökarttoja koskevat asiat.
Oppitunnin yhteenveto
Tässä oppitunnissa opitte, että DataFrame.corr() laskee parittaiset korrelaatiot, sns.heatmap esittää ne väriruudukkona diverging-värikarttojen ja selitteiden avulla, ja yläkolmion peittäminen poistaa päällekkäisyyden. Seuraavaksi tutustumme koko tutkivan data-analyysin prosessiin: järjestelmälliseen tarkistuslistaan minkä tahansa uuden aineiston profilointiin.
Opi Python tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 30
- Oppitunnit
- 120
Usein kysytyt kysymykset
Onko oppitunti ”Korrelaatiomatriisien lämpökartat” ilmainen?
Kyllä – oppitunnin ”Korrelaatiomatriisien lämpökartat” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Pandas & NumPy Academy-kurssin, päivitä CoddyKit PROhon. Pandas & NumPy Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Korrelaatiomatriisien lämpökartat”?
Laskekaa korrelaatiomatriisi DataFrame.corr()-menetelmällä ja esittäkää se väreillä koodattuna lämpökarttana sns.heatmap-funktiolla. Harjoittelet Pandas & NumPy Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Pandas & NumPy Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Pandas & NumPy Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Korrelaatiomatriisien lämpökartat”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Pandas & NumPy Academy-oppitunnilla?
Kyllä. Jokainen Pandas & NumPy Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Jakaumakuvaajat: histplot ja kdeplot
- Kategoriset kuvaajat: boxplot, barplot, violinplot
- Pistekaaviot ja parikuvaajat
- Korrelaatiomatriisien lämpökartat