Python 数学、統計、機械学習:散布図と相関分析(1)

1.相関分析

相関分析とは、二種類のデータの関係の強さを相関係数で表現する分析手法

分析の手順は

  1. 散布図を描く
  2. 散布図をみて関連性を推測

相関係数とは、

  1. 2変数間の関連性の強さを図る
  2. 一般的に小文字のr (correlation) であらわす
  3. 常に -1 ~ 1 の間の値をとる
  4. 正の値の場合、正の相関、負の値の場合、負の相関がある

相関係数の強弱

相関係数 相関の強さ
~ 0.3未満 ほぼ無相関
0.3 ~ 0.5未満 非常に弱い相関
0.5 ~ 0.7未満 相関がある
0.7 ~ 0.9未満 強い相関
0.9以上 非常に強い相関

2.散布図を描く

基本統計量、ヒストグラムで使用したボストンの住宅価格のデータセットの各説明変数(x) と 住宅価格の中央値(y) の散布図を描く。

以下のサイトから引用

https://pythondatascience.plavox.info/matplotlib/%E6%95%A3%E5%B8%83%E5%9B%B3

matplotlib.pyplot.scatter(x, y, s=20, c=None, marker='o', cmap=None, norm=None,
                          vmin=None, vmax=None, alpha=None, linewidths=None,
                          verts=None, edgecolors=None, hold=None, data=None,
                          **kwargs)
パラメータ 内容
x.y グラフに出力するデータ
s サイズ (デフォルト値: 20)
c 色、または、連続した色の値
marker マーカーの形 (デフォルト値: ‘o’= 円)
cmap カラーマップ。c が float 型の場合のみ利用可能です。
norm c を float 型の配列を指定した場合のみ有効。正規化を行う場合の Normalize インスタンスを指定。
vmin,vmax 正規化時の最大、最小値。 指定しない場合、データの最大・最小値となります。norm にインスタンスを指定した場合、vmin, vmax の指定は無視されます。
alpha 透明度。0(透明)~1(不透明)の間の数値を指定。
linewidths線の太さ。
edgecolors 線の色。

from sklearn import datasets
import pandas as pd
import matplotlib.pyplot as plt
import math

def correl_sccater(*feature_index):
    """
    https://pythondatascience.plavox.info/matplotlib/%E6%95%A3%E5%B8%83%E5%9B%B3
    :return:
    """
    boston = datasets.load_boston()

    df_ex = pd.DataFrame(boston.data)
    df_ex.columns = boston.feature_names
    import pprint
    print(pprint.pprint(df_ex))

    df_res = pd.DataFrame(boston.target)
    df_res.columns = ['Price']

    y = df_res['Price']
    fig = plt.figure()

    cnt = len(feature_index)
    cols = 1 if cnt == 1 else (2 if cnt < 6 else 4)
    rows = math.ceil(cnt / cols)
    idx = 1
    for feature in feature_index:

        x = df_ex[feature]
        ax = fig.add_subplot(rows, cols, idx)

        ax.set_title(feature, fontdict={'fontsize': 10}, pad=2)
        ax.scatter(x, y, s=0.5)
        idx = idx + 1

    plt.tight_layout()
    plt.show()


if __name__ == "__main__":
    correl_sccater('CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT')
    #correl_sccater('RM')

scatter