Jak obliczyć korelację w pythonie
Jednym ze sposobów ilościowego określenia związku między dwiema zmiennymi jest użycie współczynnika korelacji Pearsona , który jest miarą liniowego związku między dwiema zmiennymi . Zawsze przyjmuje wartość z zakresu od -1 do 1, gdzie:
- -1 oznacza całkowicie ujemną korelację liniową pomiędzy dwiema zmiennymi
- Wartość 0 oznacza brak liniowej korelacji pomiędzy dwiema zmiennymi
- 1 wskazuje doskonale dodatnią korelację liniową pomiędzy dwiema zmiennymi
Im współczynnik korelacji jest bardziej od zera, tym silniejszy jest związek między obiema zmiennymi.
W tym samouczku wyjaśniono, jak obliczyć korelację między zmiennymi w Pythonie.
Jak obliczyć korelację w Pythonie
Aby obliczyć korelację między dwiema zmiennymi w Pythonie, możemy użyć funkcji Numpy corrcoef() .
import numpy as np np.random.seed(100) #create array of 50 random integers between 0 and 10 var1 = np.random.randint(0, 10, 50) #create a positively correlated array with some random noise var2 = var1 + np.random.normal(0, 10, 50) #calculate the correlation between the two arrays np.corrcoef(var1, var2) [[ 1. 0.335] [ 0.335 1. ]]
Można zauważyć, że współczynnik korelacji pomiędzy tymi dwiema zmiennymi wynosi 0,335 , co jest korelacją dodatnią.
Domyślnie funkcja ta tworzy macierz współczynników korelacji. Gdybyśmy chcieli tylko zwrócić współczynnik korelacji między dwiema zmiennymi, moglibyśmy zastosować następującą składnię:
np.corrcoef(var1, var2)[0,1] 0.335
Aby sprawdzić, czy ta korelacja jest istotna statystycznie, możemy obliczyć wartość p powiązaną ze współczynnikiem korelacji Pearsona za pomocą funkcji Scipy pearsonr() , która zwraca współczynnik korelacji Pearsona, a także dwustronną wartość p.
from scipy.stats.stats import pearsonr pearsonr(var1, var2) (0.335, 0.017398)
Współczynnik korelacji wynosi 0,335 , a dwustronna wartość p wynosi 0,017 . Ponieważ ta wartość p jest mniejsza niż 0,05, można wyciągnąć wniosek, że istnieje statystycznie istotna korelacja pomiędzy obiema zmiennymi.
Jeśli chcesz obliczyć korelację między wieloma zmiennymi w ramce danych Pandas, możesz po prostu użyć funkcji .corr() .
import pandas as pd data = pd.DataFrame(np.random.randint(0, 10, size=(5, 3)), columns=['A', 'B', 'C']) data ABC 0 8 0 9 1 4 0 7 2 9 6 8 3 1 8 1 4 8 0 8 #calculate correlation coefficients for all pairwise combinations data.corr() ABC A 1.000000 -0.775567 -0.493769 B -0.775567 1.000000 0.000000 C -0.493769 0.000000 1.000000
A jeśli chcesz obliczyć tylko korelację między dwiema określonymi zmiennymi w ramce DataFrame, możesz określić zmienne:
data['A'].corr(data['B']) -0.775567
Dodatkowe zasoby
Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania w Pythonie:
Jak utworzyć macierz korelacji w Pythonie
Jak obliczyć korelację rangi Spearmana w Pythonie
Jak obliczyć autokorelację w Pythonie