45_Pandas.DataFrame は、各列間の相関係数を計算し、ヒート マップで視覚化します

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')

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_18351157/article/details/119214494