本記事ではPythonで相関係数のヒートマップを作る方法を紹介します。
Pythonで相関係数を算出するにはPandasというライブラリを、ヒートマップを作るためにはSeabornというライブラリを使用します。
相関係数とは
相関係数とは2つのデータの関係の強さを数値化したものです。-1以上、1以下の値をとります。
1に近ければ正の相関が、-1に近ければ負の相関があるといえます。
ヒートマップとは
ヒートマップは二次元配列データの数値の大小を色によってわかりやすく示したものです。
左はヒートマップを使わない例で、右はヒートマップを使った例です。
ヒートマップを使用すると、明るい色は高い値、暗い色は低い値ということが一目でわかると思います。


相関係数とヒートマップの実装方法
事前準備
それでは相関係数とヒートマップを実装してゆきます。
まず、事前準備としてPandasとSeabornをインストールします。
pip install pandas seaborn
なお、Google Colaboratoryには既にPandasとSeabornはインストール済みです。
実装
今回は、カルフォルニアの住宅価格に関する相関係数をヒートマップ化してみましょう。
# ① カルフォルニア住宅価格データの準備
from sklearn.datasets import fetch_california_housing
california_housing = fetch_california_housing(as_frame=True)
# ② データの相関係数を算出する
X_df = california_housing.data
y_df = california_housing.target
X_df['MedHouseVal'] = y_df
corr = X_df.corr()
# ③ ヒートマップの出力
sns.set(rc = {'figure.figsize':(15,8)})
sns.heatmap(corr, annot=True)
上記のコードについて解説してゆきます。
- ①カルフォルニア住宅価格データの準備
from sklearn.datasets import fetch_california_housing
でカルフォルニア住宅価格データ取得関数を使用できるようにし、fetch_california_housing(as_frame=True)
でデータを取得します。
引数にas_frame=True
を入力することでデータをDataFrame
の形で取得できます。as_frame=False
とするとデータをnumpy.array
で取得できます。
相関係数を算出するにはDataFrame
の方が都合がよいのでas_frame=True
としましょう。 - ②データの相関係数を算出する
california_housing.data
で特徴量のDataFrame
を取得できます。特徴量の一覧は下記のとおりです。MedInc ブロックの所得中央値 HouseAge ブロックの家屋年齢の中央値 AveRooms 1世帯あたりの平均部屋数 AveBedrms 1世帯あたりの平均寝室数 Population ブロックの人口 AveOccup 世帯人数の平均値 Latitude 緯度 Longitude 経度 Price 住宅価格 california_housing.target
で目的変数のDataFrame
を取得できます。MedHouseVal 住宅価格 これらの特徴量と目的変数を
X_df['MedHouseVal'] = y_df
で一つのDataFrame
にひとまとめにし、X_df.corr()
で相関係数を算出できます。 - ③ヒートマップの出力
sns.set(rc = {'figure.figsize':(15,8)})
でヒートマップのサイズを指定します。sns.heatmap(corr, annot=True)
でヒートマップを出力します。annot=True
にするとヒートマップに数値が表示されます。
先程のコードを実行すると下記のヒートマップが表示されます。

これをみると、AveBedrmsとAveBedrms、MedIncとMedHouseValの相関係数が高いことがわかります。
