Python 3 で数学を。

Python 3 とライブラリで数学の問題を解いていきます。統計学や機械学習はときどき。

相関係数 (自作) (Python 3, NumPy: corrcoef(), SciPy: stats, pearsonr())

使用するライブラリ

NumPy

Python 3 コード

correlation_coefficient.py

#!/usr/bin/env python3


"""(docstring)
"""


import numpy as np


def correlation_coefficient(x, y):
    """(docstring)
    """
    # 相関係数の数式: Σ(xi - xbar)(yi - ybar) / √Σ(xi - xbar)^2√Σ(yi - ybar)^2

    # Deviation from the mean. (平均からの偏差)。
    x_dftm = (x - np.mean(x))
    y_dftm = (y - np.mean(y))

    numerator = sum(x_dftm * y_dftm)
    denominator = (np.sqrt(np.sum(x_dftm**2))
                   * np.sqrt(np.sum(y_dftm**2)))

    return numerator / denominator


if __name__ == '__main__':
    from scipy.stats import pearsonr

    dat1 = np.array([1, 2, 3])
    dat2 = np.array([2, 5, 5])

    print('自作関数の相関係数: ', correlation_coefficient(dat1, dat2))
    print('')

    print('NumPy の corrcoef():\n', np.corrcoef(dat1, dat2))
    print('')

    r, _ = pearsonr(dat1, dat2)
    print('SciPy の pearsonr(): ', r)

出力

$ python3 correlation_coefficient.py
自作関数の相関係数:  0.8660254037844387

NumPy の corrcoef():
 [[1.        0.8660254]
 [0.8660254 1.       ]]

SciPy の pearsonr():  0.8660254037844387

参考文献

数式を参考:

統計学入門 (基礎統計学?)

統計学入門 (基礎統計学?)

データを参考:

品質管理のための統計手法 (日経文庫)

品質管理のための統計手法 (日経文庫)