Chapter 07

Seabornで関係性を分析する

mimitako
mimitako
2022.10.09に更新

関係性の分析

pairplot のように全体を俯瞰するような分析がいくつかあります。その中でもデータ列ごとの相関関係を一発で見る heatmap などを今回は紹介します。

heatmap

heatmap は数値の大きさによって色を変えるグラフで、相関係数など、各データ列同士の関係性を簡単に比較検討できます。まずは見てみましょう。

モジュールのインポート

使い始める前にいくつかのモジュールをインポートしておきます。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

データセットのインポート

今回使用するデータは iris(あやめ)のデータセットです。

iris_data = sns.load_dataset("iris")

データ構造は次の通りです。

sepal length はがくの長さ、sepal width はがくの幅、petal length は花びらの長さ、petal width は花びらの幅です。species は iris ことあやめの種類を示しています。

heatmap を描写する

普段は data に DataFrame を指定しますが、今回は.corr()で相関係数を算出しています。

fig, ax = plt.subplots(1,1,dpi = 300)
ax = sns.heatmap(
  data = iris_data.corr(),
)

このように相関係数に応じて色が変わるため、どの変数(列)が別の変数とどのような関係性にあるのか人目でわかるようになります。

しかし、このままでは正直なんとなくしかわかりません。このグラフに相関係数の値をつけたいと思います。annot = True とすることで、表示されますので見てみましょう。

fig, ax = plt.subplots(1,1,dpi = 300)
ax = sns.heatmap(
  data = iris_data.corr(),
  annot=True,
)

色についても cmap で指定できます。

fig, ax = plt.subplots(1,1,dpi = 300)
ax = sns.heatmap(
  data = iris_data.corr(),
  annot=True,
  cmap = "hot"
)

cmap は matplotlib のカラーパレットから選択できますので、好きな色を指定すると良いでしょう。

もうひとつの heatmap

前述の heatmap は一般的なものですが、scatter type のヒートマップも作成できます。

少し複雑な加工が必要となりますが、シンプルな見た目となるため通常の heatmap よりも見やすいです。スッキリと表現したい場合におすすめです。

# 白線をグラフ中二追加します。
sns.set_theme(style="whitegrid")
# 相関分析の結果を別の対応表にまとめます。
iris_corr_mat = iris_data.corr().stack().reset_index(name="correlation")

fig = sns.relplot(
  data = iris_corr_mat, # 再作成した相関分析結果を利用します。
  x= "level_0", # level_0という名前が割り当てられますので、それを利用します。
  y= "level_1", # level_1という名前が割り当てられますので、それを利用します。
  hue = "correlation", # 相関係数の値をhueで利用します。
  size = "correlation", # 相関係数の値をsizeとして利用します。
  palette= "hsv",
  hue_norm = (-1,1),
  edgecolor=".7",
  height=3.2, # グラフサイズをこの値でうまく調整します。
  # sizes=(25, 150),
  # size_norm=(-1.0, 1.0),
)
fig.set(xlabel="", ylabel="", aspect="equal") # 不要なラベルを削除します。
fig.despine(left=True, bottom=True)  # x軸とy軸の罫線を削除します。
for label in fig.ax.get_xticklabels(): # x軸のラベルを90度回転させます。
    label.set_rotation(90)

普段利用しないかもしれませんが、変わり種がほしい方はぜひ利用してみてください。