Możesz spojrzeć na 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
Korelację Pearsona można obliczyć za pomocą liczb numpy'ego
corrcoef
.źródło
Alternatywą może być natywna funkcja Scipy z linregress, która oblicza:
A oto przykład:
zwróci ci:
źródło
lineregress(two_row_df)
Jeśli nie masz ochoty instalować scipy, skorzystałem z tego szybkiego hacka, nieco zmodyfikowanego w stosunku do Programming Collective Intelligence :
(Edytowane pod kątem poprawności.)
źródło
TypeError: unsupported operand type(s) for -: 'itertools.imap' and 'float'
atnum = psum - (sum_x * sum_y/n)
Poniższy kod jest prostą interpretacją definicji :
Test:
zwroty
To zgadza się z Excelem, tym kalkulatorem , SciPy (także NumPy Excelem ), które zwracają odpowiednio 0,981980506 i 0,9819805060619657 i 0,98198050606196574.
R :
EDYCJA : Naprawiono błąd wskazany przez komentatora.
źródło
sum(x) / len(x)
was dzielicie ints, a nie unosi się. Tak więcsum([1,5,7]) / len([1,5,7]) = 13 / 3 = 4
, zgodnie z podziałem na liczby całkowite (podczas gdy chcesz13. / 3. = 4.33...
). Aby to naprawić, przepisz tę linię jakofloat(sum(x)) / float(len(x))
(wystarczy jedna liczba zmiennoprzecinkowa, ponieważ Python konwertuje ją automatycznie).Możesz to również zrobić
pandas.DataFrame.corr
za pomocą:To daje
źródło
Uważam, że zamiast polegać na numpy / scipy, moja odpowiedź powinna być najłatwiejsza do zakodowania i zrozumienia kroków w obliczaniu współczynnika korelacji Pearsona (PCC).
Znaczenie PCC jest po prostu pokazać, jak silnie skorelowane dwie zmienne / listy są. Należy zauważyć, że wartość PCC wynosi od -1 do 1 . Wartość od 0 do 1 oznacza korelację dodatnią. Wartość 0 = najwyższa zmienność (bez żadnej korelacji). Wartość od -1 do 0 oznacza ujemną korelację.
źródło
sum
funkcję.Obliczanie współczynnika Pearsona za pomocą pand w pythonie: Sugeruję wypróbowanie tego podejścia, ponieważ dane zawierają listy. Łatwo będzie wchodzić w interakcję z danymi i manipulować nimi z poziomu konsoli, ponieważ możesz wizualizować strukturę danych i aktualizować ją według własnego uznania. Możesz także wyeksportować zestaw danych i zapisać go oraz dodać nowe dane z konsoli Pythona do późniejszej analizy. Ten kod jest prostszy i zawiera mniej wierszy kodu. Zakładam, że potrzebujesz kilku szybkich linii kodu, aby przesłać dane do dalszej analizy
Przykład:
Jednak nie przesłałeś mi swoich danych, aby zobaczyć rozmiar zestawu danych lub transformacje, które mogą być potrzebne przed analizą.
źródło
Hmm, wiele z tych odpowiedzi ma długi i trudny do odczytania kod ...
Podczas pracy z tablicami sugerowałbym używanie numpy z jego ciekawymi funkcjami:
źródło
Jest to implementacja funkcji korelacji Pearsona za pomocą numpy:
źródło
Oto wariant odpowiedzi mkh, który działa znacznie szybciej od niego, i scipy.stats.pearsonr, używając numba.
źródło
Oto implementacja korelacji Pearsona na podstawie rzadkiego wektora. Wektory tutaj są wyrażone jako lista krotek wyrażona jako (indeks, wartość). Dwa rzadkie wektory mogą mieć różną długość, ale dla całego rozmiaru wektora będą musiały być takie same. Jest to przydatne w aplikacjach do eksploracji tekstu, w których rozmiar wektora jest niezwykle duży ze względu na to, że większość funkcji to zbiór słów, a zatem obliczenia są zwykle wykonywane przy użyciu rzadkich wektorów.
Testy jednostkowe:
źródło
Mam na to bardzo proste i łatwe do zrozumienia rozwiązanie. W przypadku dwóch tablic o równej długości współczynnik Pearsona można łatwo obliczyć w następujący sposób:
źródło
Możesz się zastanawiać, jak zinterpretować swoje prawdopodobieństwo w kontekście poszukiwania korelacji w określonym kierunku (korelacja ujemna lub dodatnia). Oto funkcja, którą napisałem, aby w tym pomóc. To może nawet mieć rację!
Opiera się na informacjach zebranych z http://www.vassarstats.net/rsig.html i http://en.wikipedia.org/wiki/Student%27s_t_distribution , dzięki innym odpowiedziom zamieszczonym tutaj.
źródło
Możesz spojrzeć na ten artykuł. Jest to dobrze udokumentowany przykład obliczania korelacji na podstawie danych historycznych par walutowych Forex z wielu plików przy użyciu biblioteki pand (dla Pythona), a następnie generowania wykresu mapy termicznej przy użyciu biblioteki seaborn.
http://www.tradinggeeks.net/2015/08/calculating-correlation-in-python/
źródło
źródło