Pythonで相関係数を求めて可視化する方法
相関分析をPythonで実行し、可視化まで行ってみます。
Excelでも相関分析は可能ですが、Pythonで実行すれば一度に全データの分布の傾向が一気に見れたり、視覚的に美しい図を作成したりと、ハイレベルな分析が簡単にできます。
データの読み込み
今回は以下のような、5科目テストの成績データを使って相関分析を行ってみます。
まずは、データフレームに読み込みます。
1 2 3 4 5 |
#データの読み込み import numpy as np import pandas as pd df_score = pd.read_csv("成績データ.csv",index_col="名前") |
今回はこのデータを用いて分析を行っていきます。
データ間の相関係数の計算
まず、単純に全てのデータ間の相関係数を見たいだけなら非常に簡単です。
1 2 |
df_corr = df_corr = df_score.corr() print(df_corr) |
1 2 3 4 5 6 |
国語 算数 英語 理科 社会 国語 1.000000 0.320452 0.532979 0.402017 0.465048 算数 0.320452 1.000000 0.146600 0.589234 0.344563 英語 0.532979 0.146600 1.000000 0.273339 0.558078 理科 0.402017 0.589234 0.273339 1.000000 0.509317 社会 0.465048 0.344563 0.558078 0.509317 1.000000 |
corr()を呼び出すと、データの中から数値の列のみ抽出して、その全ての組み合わせについて相関係数を一気に確認することができます。
今回の場合は、数値ではない「性別」列を自動で排除して計算してくれます。
数値なのに相関係数が計算されない場合は、見た目は数値なのに文字列型と判別されている場合がありますので、dtypesなどで列ごとの型を確認すると良いかもしれません、
Seabornによる相関係数の可視化
さて、結果を視覚的に表示してみます。
今回のように5要素くらいであれば数値の表だけでもそこまで困りませんが、20×20くらいになってくると、どこの相関係数が高くてどこが低いのか、パッと見で分かりづらくなっています。
そんな時は図にしてみましょう。
以下のように、seabornライブラリを使えば図にするのも簡単です。
1 2 3 4 5 |
import matplotlib.pyplot as plt import japanize_matplotlib import seaborn as sns sns.heatmap(df_corr) |
matplotlibと、matplotlibの日本語表示ライブラリjapanize_matplotlibも併せて読み込んでいます。
実行すると・・・
図になって出てきました。
相関係数が高いほど色が白く、低いほど色が黒くなっています。
これなら数字の羅列を見なくても、色の濃さで相関の高い低いが分かります。
お次は、もう少しこの図の見た目を整えてみます。
見た目の調整
見た目が綺麗かどうかは見る人によって変わりますので一概にこれが正解とは言えませんが、図の中に相関係数を小数点第2位まで入れて、色味を青にしてみます。
1 2 3 4 |
sns.set_context("talk") fig = plt.subplots(figsize=(8, 8)) sns.heatmap(df_corr, annot=True,fmt='.2f',cmap='Blues',square=True) |
このように見た目を整えれば、そのままPowerPointに掲載しても問題ない図を作ることができます。
実際の分布の確認
さて、これで全ての変数間の相関変数を求めることができました。
しかし、相関分析の記事にて述べたように、相関係数の値をそのまま鵜呑みにしてしまうことは危険です。
詳細は上の記事にゆずりますが、実際に分布がどうなっているかを確認することが理想です。
そんな時もseabornを使えば一発です。
pairplotメソッドを使うと、全ての変数間の散布図を見ることができ、さらに男女別の傾向も見ることもできます。
1 |
sns.pairplot(df_score,hue="性別") |
全データ間の分布図が男女でカラー別に表示され、対角線上には科目別のヒストグラムが並んでいます。
散布図まで見れば、相関係数を信じてよいかどうかの判断材料になりますし、男女別の傾向まで掴むことができます。
以上が、Pythonにおける相関分析の方法でした。
ほんの数行で様々なバリエーションの分析ができますので、是非活用してみて下さい。