▶ matplotlibによる可視化を基本から解説しています。以下の投稿も合わせてご覧ください。
はじめに
相関係数などで変数間の関係を把握する方法もありますが、まずは可視化するのも有効な方法です。今回はseabornを使って変数間の関係を視覚的に捉える方法をご紹介します。2変数間の関係をとらえるjointplotと各変数間の関係をとらえるpairplotを基本から解説します。
▶ matplotlibによる散布図の描画は以下の記事をご覧ください
変数間の関係を可視化する
2変数間の関係を見る場合と複数の変数の組み合わせ(ペア)の関係をまとめてみる場合で、利用するプロットが異なります。順にみていくことにしましょう。
まずはサンプルデータを準備しましょう。今回はseabornにあらかじめ準備されている学習用データセットである「taxis」を使うことにしましょう。
# ライブラリのインポート
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# データセットの読み込み
df = sns.load_dataset('taxis')
df.head()
2変数間の関係を可視化する
2変数間の関係を見るには散布図をみるとよいでしょう。既にmatplotlibでも紹介しましたが、seabornでももちろん描くことができます。seabornでは散布図とともに各変数のヒストグラムを確認することもできます。
まずは書式を確認しておきましょう。
matplotlibのplt.scatter()のときの描画方法と同じですね。早速試してみましょう。
# fareとtipの散布図を描画
sns.jointplot(x='fare',y='tip',data=df)
このようにx, yに指定した変数で散布図を描きます。散布図だけではなく、各変数のヒストグラムも確認できるのが特徴です。こうしてみると、tipを払わない乗車も結構あることがわかりますね。また、乗車料金は散布図だけではよくわかりませんが、ヒストグラムを見ると7~10くらいのところにやまがあるのがわかりますね。
散布図のプロットが重なって見にくいときは「alpha」を設定すると見やすくなり、どこにデータが密集ているかがわかりやすくなります。
# fareとtipの散布図を描画:alpha=0.3
sns.jointplot(x='fare',y='tip',data=df,alpha=0.3)
正の相関がありそう、ということが見て取れますね。この散布図に回帰直線を描くこともできます。次のように「kind=’reg’」を指定します。
# fareとtipの散布図を描画:回帰直線
sns.jointplot(x='fare',y='tip',data=df,kind='reg')
散布図のプロットにalphaを指定して、回帰直線も引きたい場合、alpha=0.3, kind=’reg’としてもうまくいきません。きっと、何にalphaを指定したのかがわからなくなるのでしょうね。次のようにします。
# fareとtipの散布図を描画:プロットにalphaを指定して回帰直線も描く
sns.jointplot(x='fare',y='tip',data=df,kind='reg',joint_kws={'scatter_kws':dict(alpha=0.3)})
また、送別(カテゴリ変数の値ごとに)色分けすることもできます。
# fareとtipの散布図を描画:pickup_boroughごとに色分け
sns.jointplot(x='fare',y='tip',data=df,alpha=0.3,hue='pickup_borough')
seabornではちょっとコードを変えるだけでいろんなことができますね。
▶ matplotlibで散布図を描く場合は以下の投稿をどうぞ。
▶ seabornではjointplot()だけでなく、relplot()でも散布図を描くことができます。バブルチャートにしてさらに層別に色分けして描画する、などいろんなことができます。
複数の変数間(ペア)の関係を可視化する
次に複数の変数の関係をまとめて可視化しましょう。複数の変数がある場合に、全ての2変数同士の組み合わせの散布図を作成して描画します。散布図行列といいます。次の書式となります。
早速試してみましょう。
# 必要な列項目のみ抽出
df_num = df.loc[:,'distance':'tip']
# 散布図行列の描画
sns.pairplot(df_num)
これなら変数間の関係が一目でわかりますね。この散布図行列はすべての変数の組み合わせを描画するので時間がかかります。そのため、必要な項目のみに絞ったほうが良いでしょう。
この散布図行列を、さらにカテゴリ変数で色分けすることもできます。hueでカテゴリ変数を指定するだけです。やってみましょう。
plt.figure(figsize=(3,3))
# 必要な列項目のみ抽出
df_num = df.loc[:,['distance','fare','tip','pickup_borough']]
# 散布図行列の描画
sns.pairplot(df_num,hue='pickup_borough')
対角線にはいま、カーネル密度推定を表示していますが、これをヒストグラムに変更することもできます。これはdiag_kindにhistを指定します。
plt.figure(figsize=(3,3))
# 必要な列項目のみ抽出
df_num = df.loc[:,['distance','fare','tip','pickup_borough']]
# 散布図行列の描画:対角線をヒストグラム
sns.pairplot(df_num,hue='pickup_borough',diag_kind='hist')
まとめ
seabornはほんとにいろんなことができます。すべてをはじめから把握しようとしてもなかなか難しいと思うので、どういうことができるのかを把握しておいて、その都度調べながら描画していくとよいでしょう。
コメント