BI
2023/03/22
上野 桃香

【Python】pandas.DataFrameの特定の列の相関係数を出力、可視化する

logo_Python

【Python】pandas.DataFrameの特定の列の相関係数を出力、可視化する

はじめに

データ列のすべての組み合わせの相関係数を表示させるのではなく、ある特定の列とその他の変数の相関係数を表示させたいと思ったことはありませんか?

今回はpandasで特定の列の相関係数を表示し、分かりやすく可視化までしたいと思います。

可視化にはseabornも使います。

相関係数を全て表示したはいいものの、ある特定の列の相関係数を表示させたい人、または分かりやすく整理できずに困っている方は参考にしてください。

まずは基本的な操作となるすべての組み合わせの相関係数を表示する方法を紹介します。

データすべての組み合わせの相関係数を表示

すべての組み合わせの相関係数を表示させるには有名なcorr関数を使います。

例としてよく用いられるいIrisデータセットを使います。

irisデータセットは機械学習でよく使われるアヤメの品種データで、150件のデータがSetosa, Versicolor, Virginicaの3品種に分類されており、それぞれ、Sepal Length(がく片の長さ), Sepal Width(がく片の幅), Petal Length(花びらの長さ), Petal Width(花びらの幅)の4つの特徴量を持っています。

irisデータセットの中身を確認しましょう。


import seaborn as sns
sns.set(style="ticks")

# irisデータセットを読み込み
iris = sns.load_dataset("iris")

# pairplot関数で散布図を作成
sns.pairplot(iris, hue="species")


これでirisデータセットの散布図を作成します。

Irisデータセットの相関図

Irisデータセットの相関図



中身はこのようになっていますね。

では、本題の相関係数を表示させましょう。

import seaborn as sns
sns.set(style="ticks")

# irisデータセットを読み込み
iris = sns.load_dataset("iris")

# pairplot関数で散布図を作成
sns.pairplot(iris, hue="species")

#すべての組み合わせの相関係数を表示
iris.corr()


これですべての組み合わせの相関係数を表示できます。

実行してみましょう。

全ての列の相関係数の値

全ての列の相関係数の値



これで散布図を作成するだけでなく手軽に相関係数を表示できますね。

特定の列の相関係数を表示

特定の列の相関係数を表示させるには、corrのあとに列を指定してあげるだけです。

以下のコードを追加して実行しましょう。


#petal_lengthとその他列の相関係数を表示
#固定したい列指定
y_column='petal_length'

corr_matrix = iris.corr()
y_corr = corr_matrix[y_column]

#表示
y_corr




このように実行すればpetal_lengthとその他の相関係数だけを表示できます。

相関係数の可視化

続いて相関係数の可視化を行いたいと思います。

相関係数の可視化には2通りの方法を紹介します。

一つ目はヒートマップ図、二つ目は横棒グラフとして表示する方法です。どちらもseabornを用いています。

※二つ目は特定の列(今回はpedal_length) の相関係数を表示しています。

相関係数のヒートマップ図

相関係数のヒートマップ図



相関係数の横棒グラフ

相関係数の横棒グラフ



一つ目のヒートマップ図は以下のコードを実行して作成します。


# ヒートマップ図で相関係数を表示 
sns.heatmap(iris.corr())



heatmapにはほかの引数で色の変更や相関係数の値の表示などもできるので細かい部分は調べながら調整しましょう。

二つ目の横棒グラフは以下のコードを実行して作成します。


#横棒グラフで相関係数を表示 
#y_corrには特定の列の相関係数を格納
fig, ax = plt.subplots(figsize=(10, 10))
#横棒グラフ作成
sns.barplot(x=y_corr, y=y_corr.index, ax=ax)
#X,Y軸とグラフタイトル
ax.set_xlabel("Correlation Coefficient")
ax.set_ylabel("Features")
ax.set_title(f"Correlation with {y_column}")
#表示
plt.show()



個人的には二つ目の横棒グラフが気に入っています。

データの列数が多くなるとヒートマップ図よりかは横棒グラフの方が値を比べやすいと感じますね。

おわりに

今回はirisデータセットを例に特定の相関係数を表示し、可視化する方法を紹介しました。データを扱うにあたってseabornは欠かせませんね。

細かい引数の説明は今回省いたので気になった方は是非自分で調べてみてください。

New call-to-action