開発環境
- macOS High Sierra - Apple
- Emacs (Text Editor)
- Python 3.6 (プログラミング言語)
Pythonからはじめる数学入門 (Amit Saha (著)、黒川 利明 (翻訳)、オライリージャパン)の2章(データを統計量で記述する)、3.9(プログラミングチャレンジ)、問題3-1(よりよい相関係数を求めるプログラム)を取り組んでみる。
コード(Emacs)
Python 3
#!/usr/bin/env python3
def find_corr_x_y(x, y):
n = len(x)
if n != len(y):
raise Exception('相関係数は計算できない')
prod = [xi * yi for xi, yi in zip(x, y)]
sum_prod_x_y = sum(prod)
sum_x = sum(x)
sum_y = sum(y)
squared_sum_x = sum_x ** 2
squared_sum_y = sum_y ** 2
x_square = [xi ** 2 for xi in x]
x_square_sum = sum(x_square)
y_square = [yi ** 2 for yi in y]
y_square_sum = sum(y_square)
numerator = n * sum_prod_x_y - sum_x * sum_y
denominator_term1 = n * x_square_sum - squared_sum_x
denominator_term2 = n * y_square_sum - squared_sum_y
denominator = (denominator_term1 * denominator_term2) ** 0.5
correlation = numerator / denominator
return correlation
if __name__ == '__main__':
x = [1, 2, 3, 4]
y = [2, 4, 6, 8]
print(find_corr_x_y(x, y))
x.append(5)
try:
print(find_corr_x_y(x, y))
except Exception as err:
print(type(err), err)
x.pop()
y = sorted(y, reverse=True)
print(find_corr_x_y(x, y))
入出力結果(Terminal, Jupyter(IPython))
$ ./sample1.py 1.0 <class 'Exception'> 相関係数は計算できない -1.0 $
0 コメント:
コメントを投稿