J'ai un ensemble de données avec un grand nombre de fonctionnalités, donc l'analyse de la matrice de corrélation est devenue très difficile. Je veux tracer une matrice de corrélation que nous obtenons en utilisant la dataframe.corr()
fonction de la bibliothèque pandas. Existe-t-il une fonction intégrée fournie par la bibliothèque pandas pour tracer cette matrice?
212
Réponses:
Vous pouvez utiliser à
pyplot.matshow()
partir dematplotlib
:Éditer:
Dans les commentaires, il y avait une demande sur la façon de changer les étiquettes des graduations des axes. Voici une version de luxe qui est dessinée sur une plus grande taille de figure, a des étiquettes d'axe pour correspondre au cadre de données et une légende de barre de couleur pour interpréter l'échelle de couleurs.
J'inclus comment ajuster la taille et la rotation des étiquettes, et j'utilise un ratio de chiffres qui fait sortir la barre de couleur et la figure principale de la même hauteur.
la source
AttributeError: 'module' object has no attribute 'matshow'
import matplotlib.pyplot as plt
?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: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:
Ou supprimez complètement les chiffres si vous préférez la matrice sans annotations:
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 queplt.matshow()
et 120x plus rapidesns.heatmap()
qu'avec une matrice 10x10. Malheureusement, il n'est pas aussi évolutif que celaplt.matshow()
: les deux prennent environ le même temps pour une matrice 100x100 etplt.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:
render()
méthode, puis écrivez la sortie dans un fichier..xslx
fichier avec une mise en forme conditionnelle en ajoutant lato_excel()
méthode.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:la source
import seaborn as sns corr = df.corr() cm = sns.light_palette("green", as_cmap=True) cm = sns.diverging_palette(220, 20, sep=20, as_cmap=True) corr.style.background_gradient(cmap=cm).set_precision(2)
corr.style.background_gradient(cmap='coolwarm')
. Il n'existe actuellement aucun moyen de centrer la cmap sur une valeur spécifique, ce qui peut être une bonne idée avec des cmaps divergentes.Essayez cette fonction, qui affiche également des noms de variables pour la matrice de corrélation:
la source
plt.xticks(range(len(corr.columns)), corr.columns, rotation='vertical')
si vous voulez une orientation verticale des noms de colonnes sur l'axe des xplt.tight_layout()
peut également être utile pour les noms de colonne longs.Version de la carte thermique de Seaborn:
la source
Vous pouvez observer la relation entre les entités en dessinant une carte thermique à partir de la mer ou une matrice de dispersion des pandas.
Matrice de dispersion:
Si vous souhaitez également visualiser l'asymétrie de chaque fonctionnalité, utilisez des diagrammes de paires nés en mer.
Sns Heatmap:
Le résultat sera une carte de corrélation des entités. c'est à dire voir l'exemple ci-dessous.
La corrélation entre l'épicerie et les détergents est élevée. De même:
Pdoducts à corrélation élevée:De Pairplots: Vous pouvez observer le même ensemble de relations à partir de pairplots ou de matrice de dispersion. Mais à partir de ceux-ci, nous pouvons dire que les données sont normalement distribuées ou non.
Remarque: Ce qui précède est le même graphique tiré des données, qui est utilisé pour dessiner une carte thermique.
la source
from matplotlib import pyplot as pl
Vous pouvez utiliser la méthode imshow () de matplotlib
la source
Si votre dataframe est,
df
vous pouvez simplement utiliser:la source
les graphiques statmodels donnent également une belle vue de la matrice de corrélation
la source
Pour être complet, la solution la plus simple que je connaisse avec Seaborn à la fin de 2019, si l'on utilise Jupyter :
la source
Avec d'autres méthodes, il est également bon d'avoir un pairplot qui donnera un nuage de points pour tous les cas -
la source
Matrice de corrélation de forme, dans mon cas, zdf est la trame de données dont j'ai besoin pour effectuer la matrice de corrélation.
Ensuite, nous pouvons prendre une capture d'écran. ou convertissez le HTML en fichier image.
la source