pandasとseabornでデータの可視化(散布図行列)

pandasとseabornを使って、簡単にデータの可視化をします。具体的には、散布図行列(ペアプロット)を作成します。

目次

  1. 散布図行列とは
  2. サンプルデータセット
  3. 散布図行列を描画する
  4. 2変量ヒストグラムを描画する
  5. 線形回帰を描画する
  6. 描画する項目を指定する
  7. 散布図の描画を片側だけにする
  8. 主な関数とメソッド

散布図行列とは

複数の変数に対して、2変数の全ての組み合わせの散布図を作成して、行列状に並べたものです。データに含まれる角変数の相関関係を視覚的に捉えることができます。

seabornを使うと、散布図を1つ1つ描かなくても、全ての散布図をまとめて描画してくれます。

サンプルデータセット

penguinsデータセットを使って散布図行列を描いてみます。

まず、penguinsデータセットの中身を見てみましょう。

import pandas as pd
import seaborn as sns

df = sns.load_dataset('penguins')

print(df.head(5))

DataFrameの内容はこのように表示されます。

species     island  bill_length_mm  bill_depth_mm  flipper_length_mm  body_mass_g     sex
0  Adelie  Torgersen            39.1           18.7              181.0       3750.0    Male
1  Adelie  Torgersen            39.5           17.4              186.0       3800.0  Female
2  Adelie  Torgersen            40.3           18.0              195.0       3250.0  Female
3  Adelie  Torgersen             NaN            NaN                NaN          NaN     NaN
4  Adelie  Torgersen            36.7           19.3              193.0       3450.0  Female

species、island、sexがカテゴリデータ、bill_length_mm、bill_depth_mm、flipper_length_mm、body_mass_gが量的データ(数値)です。

散布図行列を描画する

pairplot関数を実行すると、DataFrameの数値データ(量的データ)について散布図行列(ペアプロット図)が作成されます。

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

df = sns.load_dataset('penguins')

sns.pairplot(df)
plt.show()
最初のプロット

数値データの項目を縦横に同じ順番で並べて、対角線上にはヒストグラムを、それ以外の場所にはその行と列に対応する項目の散布図が描かれています。

カテゴリデータを反映する

カテゴリデータ(質的データ)を使って、散布図を色分けしてみます。色分けするには、hue引数に列名を指定します。

試しに、species(種類)で色分けします。

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

df = sns.load_dataset('penguins')

sns.pairplot(df, hue='species')
plt.show()
色分け

色分けされてますね。

対角線上のグラフはカーネル密度推定になります。

対角上のグラフをヒストグラムにする

対角線上のグラフをヒストグラムにするには、diag_kind引数にhistを指定します。

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

df = sns.load_dataset('penguins')

sns.pairplot(df, hue='species', diag_kind='hist')
plt.show()
色分けヒストグラム

マーカー形状を指定する

散布図のマーカーの形状を指定するには、markers引数にマーカー形状指定のリストを渡します。

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

df = sns.load_dataset('penguins')

sns.pairplot(df, hue='species', markers=['o','s','D'])
plt.show()
マーカー指定

2変量ヒストグラムを描画する

散布図の代わりに2変量ヒストグラムを描画する場合は、kind引数にhistを指定します。

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

df = sns.load_dataset('penguins')

sns.pairplot(df, kind='hist')
plt.show()
2変量ヒストグラム

線形回帰を描画する

散布図に線形回帰した直線を描画することができます。kind引数にregを指定します。

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

df = sns.load_dataset('penguins')

gr = sns.pairplot(df, kind='reg')
plt.show()
線形回帰

描画する項目を指定する

全ての項目を描画する必要がない場合は、描画したい項目をx_varsとy_vars引数に指定します。

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

df = sns.load_dataset('penguins')

sns.pairplot(df, x_vars=['bill_length_mm','bill_depth_mm','flipper_length_mm'], y_vars=['bill_length_mm','flipper_length_mm'])
plt.show()
項目指定

散布図の描画を片側だけにする

対角線の左側と右側の散布図は、同じ図になります。ということで、左側(下側)だけに散布図を描画したい場合は、corner引数にTrueを渡します。

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

df = sns.load_dataset('penguins')

sns.pairplot(df, corner=True,  height=2)
plt.show()
半分描画

主な関数とメソッド

seaborn.pairplot()

import seaborn as sns

grid = sns.pairplot(data, [hue], [hue_order], [palette], [vars], [x_vars], [y_vars], [kind], [diag_kind], [markers], [height], [aspect], [corner], [dropna], [plot_kws], [diag_kws], [grid_kws], [size])

変数

内容

data

DataFrame

散布図行列を描くDataFrame。

hue

str

省略可。既定値はNone。色分けに使う項目。

hue_order

list

省略可。既定値はNone。色分けする要素の順番。

palette

dict

省略可。既定値はNone。色分けのカラーマップ。

vars

list

省略可。既定値はNone。散布図行列に使用する項目。

x_vars

list

省略可。既定値はNone。散布図行列の列に使用する項目。

y_vars

list

省略可。既定値はNone。散布図行列の行に使用する項目。

kind

str

省略可。既定値はscatter。グラフの種類。

diag_kind

str

省略可。既定値はauto。対角線上のグラフの種類。

markers

list

省略可。既定値はNone。散布図のマーカーの形状。

height

scalar

省略可。既定値は2.5。描画する図の大きさ。インチ。

aspect

scalar

省略可。既定値は1。描画する図の縦横費。

corner

bool

省略可。既定値はFalse。対角線より左側(下側)だけグラフを描くかどうか。

dropna

bool

省略可。既定値はFalse。欠損値を省くかどうか。

plot_kws

dict

省略可。既定値はNone。

diag_kws

dict

省略可。既定値はNone。

grid_kws

dict

省略可。既定値はNone。

size

scalar

省略可。既定値はNone。

grid

grid

描画されたPairGridオブジェクト。

描くグラフの種類を指定するkind引数に指定できるのは、scatter(散布図)、kde(カーネル密度推定)、hist(ヒストグラム)、reg(線形回帰)の4種類です。

対角線上のグラフの種類を指定するdiag_kind引数に指定できるのは、auto、hist(ヒストグラム)、kde(カーネル密度推定)、None(散布図)の4種類です。

PairGridオブジェクトが生成されるので、matplotlibのpyplotでpyplot.show()することで表示できます。

公開日

広告