開発環境
- 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 コメント:
コメントを投稿