Pythonで相関関係を計算する方法
2 つの変数間の関係を定量化する 1 つの方法は、2 つの変数間の線形関連性の尺度である ピアソン相関係数を使用することです。常に -1 から 1 までの値を取ります。
- -1 は、2 つの変数間の完全な負の線形相関を示します。
- 0 は 2 つの変数間に線形相関がないことを示します
- 1 は、2 つの変数間の完全な正の線形相関を示します。
相関係数がゼロから離れるほど、2 つの変数間の関係が強くなります。
このチュートリアルでは、Python で変数間の相関関係を計算する方法を説明します。
Pythonで相関関係を計算する方法
Python で 2 つの変数間の相関関係を計算するには、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. ]]
これら 2 つの変数間の相関係数は0.335で、正の相関であることがわかります。
デフォルトでは、この関数は相関係数の行列を生成します。 2 つの変数間の相関係数のみを返したい場合は、次の構文を使用できます。
np.corrcoef(var1, var2)[0,1] 0.335
この相関が統計的に有意かどうかをテストするには、Scipy pearsonr()関数を使用してピアソン相関係数に関連付けられた p 値を計算します。この関数は、ピアソン相関係数と両側 p 値を返します。
from scipy.stats.stats import pearsonr pearsonr(var1, var2) (0.335, 0.017398)
相関係数は0.335 、両側 p 値は0.017です。この p 値は 0.05 未満であるため、2 つの変数間に統計的に有意な相関があると結論付けることができます。
Pandas DataFrame 内の複数の変数間の相関関係を計算したい場合は、 .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
DataFrame 内の 2 つの特定の変数間の相関関係のみを計算したい場合は、変数を指定できます。
data['A'].corr(data['B']) -0.775567
追加リソース
次のチュートリアルでは、Python で他の一般的なタスクを実行する方法について説明します。
Python で相関行列を作成する方法
Python で Spearman の順位相関を計算する方法
Python で自己相関を計算する方法