2018年5月14日月曜日

開発環境

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 コメント:

コメントを投稿