Cartes thermiques des matrices de corrélation
Calculez une matrice de corrélation avec DataFrame.corr() et visualisez-la sous forme de carte thermique colorée avec sns.heatmap.
Cartes thermiques des matrices de corrélation est une leçon Pandas & NumPy Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Pandas & NumPy Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Pandas & NumPy Academy comprend 4 leçons au total.
Qu’est-ce qu’une matrice de corrélation ?
Une matrice de corrélation est un tableau carré dont l’entrée (i, j) contient le coefficient de corrélation de Pearson entre la colonne i et la colonne j. Les valeurs vont de -1 (corrélation linéaire négative parfaite) à +1 (corrélation positive parfaite), 0 indiquant l’absence de relation linéaire. La diagonale vaut toujours 1 (une variable est parfaitement corrélée avec elle-même). Les matrices de corrélation constituent la première étape pour comprendre quelles variables évoluent ensemble avant de construire un modèle.
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))Calculer la matrice de corrélation
Appelez DataFrame.corr() pour calculer les corrélations de Pearson deux à deux pour toutes les colonnes numériques. Le paramètre method détermine la corrélation à calculer : 'pearson' (par défaut, linéaire), 'spearman' (fondée sur les rangs, robuste aux valeurs aberrantes et aux relations monotones non linéaires) ou 'kendall'. Pour les données financières ou les données de comptage asymétriques, Spearman est souvent plus informatif que 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))Carte thermique de base avec sns.heatmap
sns.heatmap(data) prend un tableau 2D ou un DataFrame et l’affiche sous forme de grille colorée : la couleur de chaque cellule code sa valeur numérique. Appliquées à une matrice de corrélation, les couleurs chaudes (rouge) représentent généralement une corrélation positive et les couleurs froides (bleu) une corrélation négative. Le paramètre annot=True affiche la valeur numérique dans chaque cellule, ce qui est essentiel pour lire correctement une carte thermique de corrélation.
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()Choisir la bonne palette de couleurs
Pour les matrices de corrélation, utilisez toujours une palette de couleurs divergente centrée sur zéro : cmap='coolwarm', 'RdBu_r' ou 'vlag'. Ces palettes utilisent une couleur pour les valeurs positives, une autre pour les valeurs négatives et un point médian neutre à zéro. Évitez les palettes séquentielles (comme 'Blues') pour les données de corrélation, car elles empêchent de distinguer visuellement les corrélations positives des corrélations négatives. Définissez vmin=-1, vmax=1 pour fixer l’échelle de couleurs sur toute l’étendue des corrélations.
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()Masquer le triangle supérieur
Comme une matrice de corrélation est symétrique (corr[i,j] == corr[j,i]), afficher les deux moitiés est redondant. Utilisez np.triu pour créer un masque du triangle supérieur et transmettez-le à mask= dans sns.heatmap. Cela réduit de moitié le nombre de cellules, rendant le graphique moins chargé et plus facile à lire. Les valeurs de la diagonale (toutes égales à 1.0) peuvent également être masquées, puisqu’elles n’apportent aucune 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()Personnaliser les annotations et la taille des cellules
Contrôlez le format des annotations avec fmt= (par exemple '.2f' pour deux décimales) et la taille de la police avec annot_kws={'size': 10}. Le paramètre linewidths ajoute de fines lignes entre les cellules, ce qui facilite la lecture des grandes matrices. Utilisez square=True pour imposer des cellules carrées quelles que soient les dimensions de la figure, donnant ainsi aux cartes thermiques une apparence nette et équilibrée.
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()Regrouper avec clustermap
sns.clustermap() réordonne les lignes et les colonnes à l’aide d’un regroupement hiérarchique afin de réunir les variables présentant des profils de corrélation similaires. Il devient ainsi beaucoup plus facile d’identifier les blocs de caractéristiques corrélées dans les grandes matrices. Le dendrogramme situé sur les axes supérieur et gauche montre l’arbre des regroupements. Utilisez method='ward' et metric='euclidean' comme valeurs par défaut raisonnables pour un regroupement fondé sur les corrélations.
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()Carte thermique pour les données d’un tableau croisé
Les cartes thermiques ne se limitent pas aux matrices de corrélation : tout tableau numérique 2D bénéficie d’un encodage par les couleurs. Une méthode courante consiste à calculer un tableau croisé (par exemple, le pourboire moyen selon le jour et l’heure), puis à le visualiser sous forme de carte thermique. Un tableau dense de nombres devient ainsi une grille colorée immédiatement lisible, dans laquelle les valeurs les plus élevées et les plus faibles ressortent visuellement.
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()Interpréter les valeurs de corrélation
Pour interpréter les corrélations, utilisez ces repères approximatifs : |r| < 0.2 = négligeable, 0.2-0.4 = faible, 0.4-0.6 = modérée, 0.6-0.8 = forte, > 0.8 = très forte. Toutefois, la corrélation ne vous apprend rien sur la causalité et peut être fallacieuse (corrélation fortuite due à une troisième variable de confusion). Associez toujours l’analyse numérique des corrélations à des nuages de points afin de vérifier que la relation est effectivement linéaire et qu’elle n’est pas déterminée par des valeurs aberrantes.
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))Cartes thermiques de grands ensembles de données : sélectionner un sous-ensemble
Pour les DataFrames comportant de nombreuses colonnes, une carte thermique complète des corrélations devient illisible. Une meilleure approche consiste à filtrer la matrice de corrélation pour n’afficher que les paires dont |r| dépasse un seuil (par exemple 0.5), ou à sélectionner uniquement les caractéristiques les plus corrélées à une variable cible. Vous pouvez également sélectionner un sous-ensemble par domaine : par exemple, représenter séparément les corrélations entre les indicateurs financiers et celles entre les indicateurs opérationnels dans un ensemble de données d’entreprise.
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()Enregistrer les cartes thermiques dans des fichiers
Les cartes thermiques sont souvent intégrées à des rapports et à des présentations. Appelez plt.savefig('filename.png', dpi=150, bbox_inches='tight') après avoir créé la carte thermique pour l’enregistrer. L’argument bbox_inches='tight' empêche les étiquettes des axes d’être tronquées. Pour les rapports PDF, utilisez format='pdf'. Avec sns.clustermap, la figure est stockée dans l’objet renvoyé : 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')Vérification rapide
Testez votre compréhension des cartes thermiques de corrélation présentées dans cette leçon.
Récapitulatif de la leçon
Dans cette leçon, vous avez appris que DataFrame.corr() calcule les corrélations deux à deux, que sns.heatmap les affiche sous forme de grille colorée avec des palettes divergentes et des annotations, et que le masquage du triangle supérieur élimine la redondance. Nous allons maintenant explorer le processus complet d’analyse exploratoire des données — une liste de vérifications systématique pour établir le profil de tout nouvel ensemble de données.
Apprends Python avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 30
- Leçons
- 120
Questions Fréquemment Posées
La leçon « Cartes thermiques des matrices de corrélation » est-elle gratuite ?
Oui — le texte complet de « Cartes thermiques des matrices de corrélation » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Pandas & NumPy Academy, passe à CoddyKit PRO. Le cours Pandas & NumPy Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Cartes thermiques des matrices de corrélation » ?
Calculez une matrice de corrélation avec DataFrame.corr() et visualisez-la sous forme de carte thermique colorée avec sns.heatmap. Tu pratiques Pandas & NumPy Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Pandas & NumPy Academy ?
Aucune expérience préalable n'est requise. Pandas & NumPy Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Cartes thermiques des matrices de corrélation » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Pandas & NumPy Academy ?
Oui. Chaque leçon Pandas & NumPy Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Graphiques de distribution : histplot et kdeplot
- Graphiques catégoriels : boxplot, barplot, violinplot
- Nuages de points et graphiques de paires
- Cartes thermiques des matrices de corrélation