Ich habe einen Datensatz mit einer großen Anzahl von Merkmalen, daher ist die Analyse der Korrelationsmatrix sehr schwierig geworden. Ich möchte eine Korrelationsmatrix zeichnen, die wir mithilfe der dataframe.corr()
Funktion aus der Pandas-Bibliothek erhalten. Gibt es eine eingebaute Funktion der Pandas-Bibliothek, um diese Matrix zu zeichnen?
python
pandas
matplotlib
data-visualization
information-visualization
Gaurav Singh
quelle
quelle
Antworten:
Sie können verwenden
pyplot.matshow()
vonmatplotlib
:Bearbeiten:
In den Kommentaren wurde gefragt, wie die Achsen-Tick-Beschriftungen geändert werden sollen. Hier ist eine Deluxe-Version, die auf einer größeren Figur gezeichnet ist, Achsenbeschriftungen hat, die mit dem Datenrahmen übereinstimmen, und eine Farbleistenlegende, um die Farbskala zu interpretieren.
Ich füge hinzu, wie die Größe und Drehung der Etiketten angepasst wird, und ich verwende ein Zahlenverhältnis, bei dem die Farbleiste und die Hauptfigur dieselbe Höhe haben.
quelle
AttributeError: 'module' object has no attribute 'matshow'
import matplotlib.pyplot as plt
?Wenn Ihr Hauptziel darin besteht, die Korrelationsmatrix zu visualisieren, anstatt ein Diagramm an sich zu erstellen, sind die praktischen
pandas
Gestaltungsoptionen eine praktikable integrierte Lösung:Beachten Sie, dass dies in einem Backend erfolgen muss, das das Rendern von HTML unterstützt, z. B. im JupyterLab-Notizbuch. (Der automatische helle Text auf dunklem Hintergrund stammt aus einer vorhandenen PR und nicht aus der neuesten veröffentlichten Version
pandas
0.23).Styling
Sie können die Zifferngenauigkeit leicht einschränken:
Oder entfernen Sie die Ziffern ganz, wenn Sie die Matrix ohne Anmerkungen bevorzugen:
Die Styling-Dokumentation enthält auch Anweisungen zu erweiterten Styles, z. B. zum Ändern der Anzeige der Zelle, über der sich der Mauszeiger befindet. Um die Ausgabe zu speichern, können Sie den HTML-Code zurückgeben, indem Sie die
render()
Methode anhängen und dann in eine Datei schreiben (oder einfach einen Screenshot für weniger formale Zwecke erstellen).Zeitvergleich
In meinen Tests
style.background_gradient()
war 4x schneller alsplt.matshow()
und 120x schneller alssns.heatmap()
mit einer 10x10 Matrix. Leider skaliert es nicht so gut wieplt.matshow()
: Die beiden benötigen für eine 100x100-Matrix ungefähr die gleiche Zeit und sind für eine 1000x1000-Matrixplt.matshow()
10x schneller.Sparen
Es gibt verschiedene Möglichkeiten, den stilisierten Datenrahmen zu speichern:
render()
Methode anhängen , und schreiben Sie die Ausgabe in eine Datei..xslx
Datei mit bedingter Formatierung, indem Sie dieto_excel()
Methode anhängen .Update für Pandas> = 0,24
Durch Einstellen
axis=None
ist es jetzt möglich, die Farben basierend auf der gesamten Matrix anstatt pro Spalte oder pro Zeile zu berechnen:quelle
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')
. Derzeit gibt es keine Möglichkeit, die cmap auf einen bestimmten Wert zu zentrieren. Dies kann bei abweichenden cmaps eine gute Idee sein.Probieren Sie diese Funktion aus, die auch Variablennamen für die Korrelationsmatrix anzeigt:
quelle
plt.xticks(range(len(corr.columns)), corr.columns, rotation='vertical')
Wenn Sie die vertikale Ausrichtung der Spaltennamen auf der x-Achseplt.tight_layout()
kann auch für lange Spaltennamen nützlich sein.Seaborns Heatmap-Version:
quelle
Sie können die Beziehung zwischen Merkmalen beobachten, indem Sie entweder eine Wärmekarte von Seaborn oder eine Streumatrix von Pandas zeichnen.
Streumatrix:
Wenn Sie auch die Schiefe der einzelnen Features visualisieren möchten, verwenden Sie seegeborene Pairplots.
Sns Heatmap:
Die Ausgabe ist eine Korrelationskarte der Merkmale. dh siehe das folgende Beispiel.
Die Korrelation zwischen Lebensmittel und Waschmitteln ist hoch. Ähnlich:
Produkte mit hoher Korrelation:Aus Paarplots: Sie können denselben Satz von Beziehungen aus Paarplots oder Streumatrix beobachten. Aber aus diesen können wir sagen, ob die Daten normal verteilt sind oder nicht.
Hinweis: Das obige Diagramm stammt aus den Daten, die zum Zeichnen der Heatmap verwendet werden.
quelle
from matplotlib import pyplot as pl
Sie können die imshow () -Methode von matplotlib verwenden
quelle
Wenn Sie Datenrahmen ist
df
, können Sie einfach verwenden:quelle
Statmodels-Grafiken bieten auch eine schöne Ansicht der Korrelationsmatrix
quelle
Der Vollständigkeit halber die einfachste Lösung, die ich mit Seaborn ab Ende 2019 kenne , wenn man Jupyter verwendet :
quelle
Zusammen mit anderen Methoden ist es auch gut, ein Paardiagramm zu haben, das ein Streudiagramm für alle Fälle ergibt.
quelle
Form Korrelationsmatrix, in meinem Fall zdf ist der Datenrahmen, den ich Korrelationsmatrix durchführen muss.
Dann können wir einen Screenshot machen. oder konvertieren Sie HTML in eine Bilddatei.
quelle