Sie können einen Blick darauf werfen scipy.stats
:
from pydoc import help
from scipy.stats.stats import pearsonr
help(pearsonr)
>>>
Help on function pearsonr in module scipy.stats.stats:
pearsonr(x, y)
Calculates a Pearson correlation coefficient and the p-value for testing
non-correlation.
The Pearson correlation coefficient measures the linear relationship
between two datasets. Strictly speaking, Pearson's correlation requires
that each dataset be normally distributed. Like other correlation
coefficients, this one varies between -1 and +1 with 0 implying no
correlation. Correlations of -1 or +1 imply an exact linear
relationship. Positive correlations imply that as x increases, so does
y. Negative correlations imply that as x increases, y decreases.
The p-value roughly indicates the probability of an uncorrelated system
producing datasets that have a Pearson correlation at least as extreme
as the one computed from these datasets. The p-values are not entirely
reliable but are probably reasonable for datasets larger than 500 or so.
Parameters
----------
x : 1D array
y : 1D array the same length as x
Returns
-------
(Pearson's correlation coefficient,
2-tailed p-value)
References
----------
http://www.statsoft.com/textbook/glosp.html#Pearson%20Correlation
Die Pearson-Korrelation kann mit Numpys berechnet werden
corrcoef
.quelle
Eine Alternative kann eine native Scipy-Funktion von linregress sein, die Folgendes berechnet:
Und hier ist ein Beispiel:
wird Sie zurückgeben:
quelle
lineregress(two_row_df)
Wenn Sie keine Lust haben, scipy zu installieren, habe ich diesen schnellen Hack verwendet, der leicht von Programming Collective Intelligence geändert wurde :
(Zur Richtigkeit bearbeitet.)
quelle
TypeError: unsupported operand type(s) for -: 'itertools.imap' and 'float'
annum = psum - (sum_x * sum_y/n)
Der folgende Code ist eine direkte Interpretation der Definition :
Prüfung:
kehrt zurück
Dies stimmt mit Excel überein, diesem Rechner , SciPy (auch NumPy ), der 0,981980506 und 0,9819805060619657 bzw. 0,98198050606196574 zurückgibt.
R :
BEARBEITEN : Es wurde ein Fehler behoben, auf den ein Kommentator hinwies.
quelle
sum(x) / len(x)
dir teile Ints, nicht Floats. Alsosum([1,5,7]) / len([1,5,7]) = 13 / 3 = 4
nach ganzzahliger Division (wohingegen Sie wollen13. / 3. = 4.33...
). Um dies zu beheben, schreiben Sie diese Zeile wie folgt umfloat(sum(x)) / float(len(x))
(ein Gleitkomma reicht aus, da Python es automatisch konvertiert).Sie können dies auch tun mit
pandas.DataFrame.corr
:Das gibt
quelle
Anstatt sich auf Numpy / Scipy zu verlassen, sollte meine Antwort am einfachsten zu codieren und die Schritte zur Berechnung des Pearson-Korrelationskoeffizienten (PCC) zu verstehen sein .
Die Bedeutung von PCC besteht im Wesentlichen darin, Ihnen zu zeigen, wie stark die beiden Variablen / Listen korreliert sind. Es ist wichtig zu beachten, dass der PCC-Wert zwischen -1 und 1 liegt . Ein Wert zwischen 0 und 1 bedeutet eine positive Korrelation. Wert 0 = höchste Variation (keinerlei Korrelation). Ein Wert zwischen -1 und 0 bedeutet eine negative Korrelation.
quelle
sum
Funktion hat.Pearson-Koeffizientenberechnung mit Pandas in Python: Ich würde empfehlen, diesen Ansatz zu versuchen, da Ihre Daten Listen enthalten. Es ist einfach, mit Ihren Daten zu interagieren und sie über die Konsole zu bearbeiten, da Sie Ihre Datenstruktur visualisieren und nach Ihren Wünschen aktualisieren können. Sie können den Datensatz auch exportieren und speichern und neue Daten zur späteren Analyse aus der Python-Konsole hinzufügen. Dieser Code ist einfacher und enthält weniger Codezeilen. Ich gehe davon aus, dass Sie einige kurze Codezeilen benötigen, um Ihre Daten für die weitere Analyse zu überprüfen
Beispiel:
Sie haben Ihre Daten jedoch nicht veröffentlicht, damit ich die Größe des Datensatzes oder die Transformationen sehen kann, die möglicherweise vor der Analyse erforderlich sind.
quelle
Hmm, viele dieser Antworten haben langen und schwer lesbaren Code ...
Ich würde vorschlagen, numpy mit seinen raffinierten Funktionen zu verwenden, wenn Sie mit Arrays arbeiten:
quelle
Dies ist eine Implementierung der Pearson-Korrelationsfunktion unter Verwendung von numpy:
quelle
Hier ist eine Variante von mkhs Antwort, die viel schneller läuft als sie, und scipy.stats.pearsonr mit numba.
quelle
Hier ist eine Implementierung für die Pearson-Korrelation basierend auf einem spärlichen Vektor. Die Vektoren hier werden als Liste von Tupeln ausgedrückt als (Index, Wert). Die zwei spärlichen Vektoren können unterschiedlich lang sein, aber insgesamt muss die Vektorgröße gleich sein. Dies ist nützlich für Text Mining-Anwendungen, bei denen die Vektorgröße extrem groß ist, da die meisten Merkmale eine Wortsammlung sind und daher Berechnungen normalerweise mit spärlichen Vektoren durchgeführt werden.
Unit Tests:
quelle
Ich habe eine sehr einfache und leicht verständliche Lösung dafür. Für zwei Arrays gleicher Länge kann der Pearson-Koeffizient leicht wie folgt berechnet werden:
quelle
Sie fragen sich vielleicht, wie Sie Ihre Wahrscheinlichkeit im Zusammenhang mit der Suche nach einer Korrelation in eine bestimmte Richtung (negative oder positive Korrelation) interpretieren können. Hier ist eine Funktion, die ich geschrieben habe, um Ihnen dabei zu helfen. Es könnte sogar richtig sein!
Es basiert auf Informationen, die ich von http://www.vassarstats.net/rsig.html und http://en.wikipedia.org/wiki/Student%27s_t_distribution erhalten habe , dank anderer Antworten, die hier veröffentlicht wurden.
quelle
Sie können sich diesen Artikel ansehen. Dies ist ein gut dokumentiertes Beispiel für die Berechnung der Korrelation basierend auf historischen Forex-Währungspaardaten aus mehreren Dateien mithilfe der Pandas-Bibliothek (für Python) und die anschließende Erstellung eines Heatmap-Diagramms mithilfe der Seaborn-Bibliothek.
http://www.tradinggeeks.net/2015/08/calculating-correlation-in-python/
quelle
quelle