目次
Pythonで相関係数を算出する
データ分析をPythonで実施する際、データの相関を抽出する機会が多くなります
今回はPythonで相関係数を出すcorr()をご紹介します
またデータを出すだけではなく、ヒートマップでの可視化も実践していきます
相関についてはこちらの記事でご紹介しています
相関関係とは?分析に欠かせない要素を分かりやすくご紹介事前準備
Seabornライブラリから、タイタニック号のデータを取得しておきます
またPandasも合わせてインポートしておきます
import seaborn as sns
import pandas as pd
df = sns.load_dataset('titanic')
df.head()
相関を抽出する
corr()を利用することで相関係数を算出することができます
ちなみに相関を意味するCorrelationの略です
DataFrameに対しcorr()を実施すると、各列同士の相関係数が算出されます
df.corr()
図のようにクロス集計の形式で相関が表示されます
もちろん同じデータ同士は「1」となります
対象となるデータ型
注意すべきポイントは相関を算出する対象となるデータ型です
アウトプットされるのは「数値型(1.2.3…)」と「Bool型(True/False)」のみです
つまり「性別(sex)」や「乗船クラス(class)」などは「文字列型」のため計算対象外となります
「文字列型」の相関が知りたい場合は「数値型」へ変換します
replace()を使い、男性(male)を0に、女性(female)を1に変換した後に、corr()で相関を算出します
df = df.replace({'male':0,'female':1})
df.corr()
グラフで見やすく可視化する
相関を算出するのは非常に簡単ですが、それだけでは全く役に立ちません
実際のデータ分析に活かすためには、どの要素が大きく影響しあっているかを可視化する必要があります
可視化する方法は大きく2つあります
- ヒートマップ(Seaborn):各データ同士の相関を見たいとき
- 棒グラフ(Matplotlib):1つの目的変数との相関を見たいとき
ヒートマップで可視化
sns.heatmap()を利用し、DataFrameに対してcorr()で相関を算出したものを指定します
sns.heatmap(df.corr())
DataFrameのstyleを使えば、テーブルの段階でヒートマップを作成することができます
df.corr().style.background_gradient(cmap='Reds')
一番相関が高いのが「生存」と「性別」であることが分かります
つまり性別が「1」に近い=女性であるほど、生存が「1」である=生き残るという傾向であることが分かりました
棒グラフで可視化
ヒートマップはすべてのデータの相関を一覧で確認するのは便利ですが、瞬時に示唆を出すことには向いていません
重視している項目(今回は生存したかどうか)に対して、どのデータが一番相関があるかを可視化するには「棒グラフ」が最適です
corr()で算出した表から「生存」のデータを抽出しても良いですが、目的変数と説明変数がばらばらの変数に格納されている場合の対処方法をご紹介します
少々複雑ではありますが、「機械学習」ではTrain / Testと目的変数と説明変数が別々でデータを持つことが多いため、今後のために慣れておきましょう
【survived】に「生存」のリストのみ代入し、【df_1】に「生存」を削除したものを作成します
Survived = df['生存']
df_1 = df.drop(['生存','ID'],axis=1)
続いてcorrwith()を使い【df_1】の説明変数のデータに対して、【survived】の目的変数との相関を算出します
df_corr = df_1.corrwith(survived)
df_corr
最後にmatplotlibを使い棒グラフで可視化します
plot.barhで横棒グラフが作成できます
df_corr.plot.barh(color='red')
「性別」や「運賃」が正の相関があり、「大人の男性」や「旅客クラス」が負の相関があることが分かりました
まとめ
今回はPythonで相関係数を算出し、グラフで可視化する方法をご紹介しました
データ分析や機械学習で重要な役割を果たす機能になりますので、ぜひ覚えて使ってみてください
相関関係とは?分析に欠かせない要素を分かりやすくご紹介