Pythonで相関係数を求める方法

Pocket

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])

結果
[[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

使い方は次のとおりです。

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)

結果
0.9601816874983334

[ 2021年7月31日 | カテゴリー: Python | タグ: , ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報