Wie finden Sie die Top-Korrelationen in einer Korrelationsmatrix mit Pandas? Es gibt viele Antworten, wie dies mit R gemacht werden kann ( Korrelationen als geordnete Liste anzeigen, nicht als große Matrix oder effiziente Methode, um stark korrelierte Paare aus großen Datenmengen in Python oder R zu erhalten ), aber ich frage mich, wie das geht mit Pandas? In meinem Fall ist die Matrix 4460 x 4460, kann es also nicht visuell machen.
python
pandas
correlation
Kyle Brandt
quelle
quelle
@ HYRYs Antwort ist perfekt. Bauen Sie einfach auf dieser Antwort auf, indem Sie etwas mehr Logik hinzufügen, um Doppel- und Selbstkorrelationen sowie die richtige Sortierung zu vermeiden:
Das ergibt folgende Ausgabe:
quelle
au_corr = au_corr.drop(labels=labels_to_drop).sort_values(ascending=False)
:# -- partial selection or non-unique index
Lösung mit wenigen Zeilen ohne redundante Variablenpaare:
Dann können Sie die Namen der Variablenpaare (die pandas.Series multi-indexes sind) und deren Werte wie folgt durchlaufen:
quelle
os
als Variablenname zu verwenden, weil es dieos
von maskiert,import os
wenn im Code verfügbarWenn Sie einige Funktionen der Antworten von @HYRY und @ arun kombinieren, können Sie die wichtigsten Korrelationen für den Datenrahmen
df
in einer einzigen Zeile drucken, indem Sie Folgendes verwenden:Hinweis: Der einzige Nachteil ist, dass durch Hinzufügen von 1.0-Korrelationen, die keine Variable für sich sind, diese durch
drop_duplicates()
Hinzufügen hinzugefügt werdenquelle
drop_duplicates
alle Korrelationen fallen gelassen, die gleich sind?v1
zuv2
undv3
zuv4
) nicht genau gleich istVerwenden Sie den folgenden Code, um die Korrelationen in absteigender Reihenfolge anzuzeigen.
quelle
corr = df.corr()
Sie können dies grafisch anhand dieses einfachen Codes tun, indem Sie Ihre Daten ersetzen.
quelle
Viele gute Antworten hier. Der einfachste Weg, den ich gefunden habe, war eine Kombination einiger der obigen Antworten.
quelle
Verwenden Sie diese Option
itertools.combinations
, um alle eindeutigen Korrelationen aus der eigenen Korrelationsmatrix von pandas.corr()
abzurufen, eine Liste von Listen zu erstellen und diese in einen DataFrame zurückzugeben, um '.sort_values' zu verwenden. Stellen Sie einascending = True
, dass oben die niedrigsten Korrelationen angezeigt werdencorrank
Nimmt einen DataFrame als Argument, weil es erforderlich ist.corr()
.quelle
Ich wollte
unstack
dieses Problem nicht oder zu kompliziert machen, da ich nur einige stark korrelierte Features als Teil einer Feature-Auswahlphase löschen wollte.So kam ich zu der folgenden vereinfachten Lösung:
Wenn Sie in diesem Fall korrelierte Features löschen möchten, können Sie das gefilterte
corr_cols
Array zuordnen und die ungeradzahligen (oder geradzahligen) Features entfernen.quelle
corr_cols = corr.max().sort_values(ascending=False)
zucorr_cols = corr.unstack()
Ich habe hier einige der Lösungen ausprobiert, aber dann habe ich mir tatsächlich eine eigene ausgedacht. Ich hoffe, dass dies für den nächsten nützlich sein könnte, also teile ich es hier:
quelle
Dies ist ein Verbesserungscode von @MiFi. Diese eine Reihenfolge in abs, aber ohne die negativen Werte auszuschließen.
quelle
Die folgende Funktion sollte den Trick machen. Diese Implementierung
und es ist auch konfigurierbar, so dass Sie sowohl die Selbstkorrelationen als auch die Duplikate behalten können. Sie können auch beliebig viele Feature-Paare melden.
quelle
Ich mochte den Beitrag von Addison Klinke am meisten, da er der einfachste war, verwendete aber den Vorschlag von Wojciech Moszczyńsk zum Filtern und Diagrammieren, erweiterte den Filter jedoch, um absolute Werte zu vermeiden.
Erstellt, gefiltert und grafisch dargestellt
Funktion
Am Ende habe ich eine kleine Funktion erstellt, um die Korrelationsmatrix zu erstellen, zu filtern und dann zu reduzieren. Als Idee könnte es leicht erweitert werden, z. B. asymmetrische Ober- und Untergrenzen usw.
quelle