Pythonで相関係数を求めたかったのですが、標準ライブラリのstatisticsに相関係数を求める関数がありません。
相関係数を求める式
numpyを使う方法
numpyのcorrcoefを使います。
import numpy
x_list = [0,1,9,6,3,8,4,5,7]
y_list = [1,1,8,5,4,7,5,6,6]
r = numpy.corrcoef(x_list, y_list)
print(r)
print(r[0, 1])
x_list = [0,1,9,6,3,8,4,5,7]
y_list = [1,1,8,5,4,7,5,6,6]
r = numpy.corrcoef(x_list, y_list)
print(r)
print(r[0, 1])
結果
[[1. 0.96018169]
[0.96018169 1. ]]
0.9601816874983335
行列として返るので[0, 1]を取ります。
関数を定義
関数correlを作ってみました。
def correl(x_list, y_list):
count = len(x_list)
x_average = sum(x_list) / count
y_average = sum(y_list) / count
a = 0
b = 0
c = 0
for i in range(len(x_list)):
a += (x_list[i] - x_average) * (y_list[i] - y_average)
b += (x_list[i] - x_average) ** 2
c += (y_list[i] - y_average) ** 2
r = a / b ** 0.5 / c ** 0.5
return r
count = len(x_list)
x_average = sum(x_list) / count
y_average = sum(y_list) / count
a = 0
b = 0
c = 0
for i in range(len(x_list)):
a += (x_list[i] - x_average) * (y_list[i] - y_average)
b += (x_list[i] - x_average) ** 2
c += (y_list[i] - y_average) ** 2
r = a / b ** 0.5 / c ** 0.5
return r
使い方は次のとおりです。
x_list = [0,1,9,6,3,8,4,5,7]
y_list = [1,1,8,5,4,7,5,6,6]
r = correl(x_list, y_list)
print(r)
y_list = [1,1,8,5,4,7,5,6,6]
r = correl(x_list, y_list)
print(r)
結果
0.9601816874983334
コメント