45_Pandas.DataFrame は、各列間の相関係数を計算し、ヒート マップで視覚化します
pandas.DataFrame の列間の相関係数を計算するには、corr() メソッドを使用します。
ここで、以下について説明する。
- pandas.DataFrame.corr() の基本的な使い方
- 数値型またはブール型の列の計算対象
- 欠損値を除外して数える NaN
- 相関係数の計算方法を指定: 引数方式
- ヒートマップを使用して相関係数を視覚化: seaborn
以下の pandas.DataFrame を例に取ります。
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.DataFrame({
'A': range(5),
'B': [x**2 for x in range(5)],
'C': [x**3 for x in range(5)]})
print(df)
# A B C
# 0 0 0 0
# 1 1 1 1
# 2 2 4 8
# 3 3 9 27
# 4 4 16 64
pandas.DataFrame.corr() の基本的な使い方
pandas.DataFrame オブジェクトから corr() メソッドを呼び出して、各列間の相関係数を計算します。結果は pandas.DataFrame に返されます。
df_corr = df.corr()
print(df_corr)
print(type(df_corr))
# A B C
# A 1.000000 0.958927 0.905882
# B 0.958927 1.000000 0.987130
# C 0.905882 0.987130 1.000000
# <class 'pandas.core.frame.DataFrame'>
数値型またはブール型の列の計算対象
明確にするために、文字列とブール値の列を追加します。
df['D'] = list('abcde')
df['E'] = [True, False, True, True, False]
print(df)
# A B C D E
# 0 0 0 0 a True
# 1 1 1 1 b False
# 2 2 4 8 c True
# 3 3 9 27 d True
# 4 4 16 64 e False
print(df.dtypes)
# A int64
# B int64
# C int64
# D object
# E bool
# dtype: object
corr() メソッドは、データ型オブジェクト (string) の列を除外し、数値 (int、float) 型と bool 型の列の間の相関係数を計算します。
bool 型の場合、True は 1、False は 0 と見なされます。
df_corr = df.corr()
print(df_corr)
# A B C E
# A 1.000000 0.958927 0.905882 -0.288675
# B 0.958927 1.000000 0.987130 -0.346023
# C 0.905882 0.987130 1.000000 -0.424522
# E -0.288675 -0.346023 -0.424522 1.000000
欠損値を除外して数える NaN
欠損値 Nan を含む pandas.DataFrame オブジェクトを解釈用に準備します。
df_nan = df.copy()
df_nan.iloc[[2, 3, 4], 1] = np.nan
print(df_nan)
# A B C D E
# 0 0 0.0 0 a True
# 1 1 1.0 1 b False
# 2 2 NaN 8 c True
# 3 3 NaN 27 d True
# 4 4 NaN 64 e False
corr() メソッドでは、欠損値 NaN が削除され、相関係数が計算されます。
df_nan_corr = df_nan.corr()
print(df_nan_corr)
# A B C E
# A 1.000000 1.0 0.905882 -0.288675
# B 1.000000 1.0 1.000000 -1.000000
# C 0.905882 1.0 1.000000 -0.424522
# E -0.288675 -1.0 -0.424522 1.000000
相関係数の計算方法を指定します: method
corr() メソッドでは、相関係数の計算方法を引数メソッドで指定できます。
以下の3種類からお選びください。
- 'pearson' : ピアソンの積率相関係数 (既定)
- 'kendall': ケンドール順位相関係数
- 'spearman': 槍兵の順位相関係数
ヒートマップを使用して相関係数を視覚化: seaborn
Python の視覚化ライブラリ seaborn を使用すると、corr() を使用するのと同じように、pandas.DataFrames をヒートマップとして簡単に視覚化できます。
sns.heatmap(df_corr, vmax=1, vmin=-1, center=0)
plt.savefig('./data/45/seaborn_heatmap_corr_example.png')
元のデータには多くの列 (特徴量) がありますが、前述のように、corr() メソッドはデータ型がオブジェクトの列を除外します。
df_house = pd.read_csv('./data/45/house_prices_train.csv', index_col=0)
print(df_house.shape)
# (1460, 80)
print(df_house.dtypes.value_counts())
# object 43
# int64 34
# float64 3
# dtype: int64
df_house_corr = df_house.corr()
print(df_house_corr.shape)
# (37, 37)
seaborn.heatmap() 関数で視覚化します。
fig, ax = plt.subplots(figsize=(12, 9))
sns.heatmap(df_house_corr, square=True, vmax=1, vmin=-1, center=0)
plt.savefig('./data/45/seaborn_heatmap_house_price.png')