Si votre objectif principal est de visualiser la matrice de corrélation, plutôt que de créer un tracé en soi, les pandas
options de style pratiques sont une solution intégrée viable:
import pandas as pd
import numpy as np
rs = np.random.RandomState(0)
df = pd.DataFrame(rs.rand(10, 10))
corr = df.corr()
corr.style.background_gradient(cmap='coolwarm')
# 'RdBu_r' & 'BrBG' are other good diverging colormaps
Notez que cela doit être dans un backend qui prend en charge le rendu HTML, tel que le bloc-notes JupyterLab. (Le texte clair automatique sur fond sombre provient d'un PR existant et non de la dernière version publiée, pandas
0,23).
Coiffant
Vous pouvez facilement limiter la précision des chiffres:
corr.style.background_gradient(cmap='coolwarm').set_precision(2)
Ou supprimez complètement les chiffres si vous préférez la matrice sans annotations:
corr.style.background_gradient(cmap='coolwarm').set_properties(**{'font-size': '0pt'})
La documentation de style comprend également des instructions de styles plus avancés, telles que la façon de modifier l'affichage de la cellule sur laquelle le pointeur de la souris survole. Pour enregistrer la sortie, vous pouvez retourner le code HTML en ajoutant la render()
méthode, puis l'écrire dans un fichier (ou simplement prendre une capture d'écran à des fins moins formelles).
Comparaison de temps
Dans mes tests, style.background_gradient()
était 4x plus rapide que plt.matshow()
et 120x plus rapide sns.heatmap()
qu'avec une matrice 10x10. Malheureusement, il n'est pas aussi évolutif que cela plt.matshow()
: les deux prennent environ le même temps pour une matrice 100x100 et plt.matshow()
sont 10 fois plus rapides pour une matrice 1000x1000.
Économie
Il existe plusieurs façons d’enregistrer la trame de données stylisée:
- Renvoyez le code HTML en ajoutant le
render()
méthode, puis écrivez la sortie dans un fichier.
- Enregistrez en tant que
.xslx
fichier avec une mise en forme conditionnelle en ajoutant la to_excel()
méthode.
- Combinez avec imgkit pour enregistrer un bitmap
- Faites une capture d'écran (à des fins moins formelles).
Mise à jour pour les pandas> = 0,24
En définissant axis=None
, il est désormais possible de calculer les couleurs en fonction de la matrice entière plutôt que par colonne ou par ligne:
corr.style.background_gradient(cmap='coolwarm', axis=None)