Kaggle(17) - ヒートマップ

ヒートマップは散布図と同じように相関を分析するために使用します。

メリットとしては次の通りです。

  • 相関の程度が色で表示されるため直感的に分かりやすい。
  • 多くのデータ同士の相関を一度に確認できる。

データセットのカラム数が多い場合は、まずヒートマップで分析を行い、相関がありそうなデータを絞り込んでさらに詳細に分析を行うといった手法をとることができます。

デメリットとしては、色や相関でしか表現されないのでデータの切り口を変えることで強い相関があるデータを見落とす可能性があるということです。

そのため散布図と併用して分析するのがよいと思います。

データの読み込み

まずはタイタニックのデータセットを読み込みます。

1
2
3
4
5
import seaborn as sns
from matplotlib import pyplot as plt
sns.set(style='darkgrid')
titanic = sns.load_dataset('titanic')
titanic

ヒートマップの表示

ヒートマップを表示します。

ヒートマップは数値型のデータだけを対象としています。(カテゴリデータや日付データは除外されます)

1
2
plt.figure(figsize=(9, 6))
sns.heatmap(titanic.corr(), annot=True)

生死(survived)とやや強い相関がみられるのは成人男子(adult_male)だということが見てとれます。

試しに成人女性(adult_female)と20歳未満(under_20)のカラムを追加して、ヒートマップに表示してみます。

1
2
3
4
5
6
7
8
9
10
11
12
def func(d):
#print(d.sex, d.age)
if d.sex == 'female' and d.age > 19:
return True
else:
return False

titanic['adult_female'] = titanic.apply(func, axis=1)
titanic['under_20'] = titanic.age.apply(lambda x: True if x < 20 else False)

plt.figure(figsize=(9, 6))
sns.heatmap(titanic.corr(), annot=True)

成人女性(adult_female)と生死の相関は0.41となり、やや正の相関がありそうです。

20歳未満(under_20)と生死の相関は0.096とほとんど相関関係がないことが確認できました。

(実行環境としてGoogleさんのColaboratoryを使用ています。)