pandasとseabornでデータの可視化(散布図行列)
pandasとseabornを使って、簡単にデータの可視化をします。具体的には、散布図行列(ペアプロット)を作成します。
目次
散布図行列とは
複数の変数に対して、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()
 
線形回帰を描画する
散布図に線形回帰した直線を描画することができます。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()することで表示できます。
公開日
広告
Pythonでデータ分析カテゴリの投稿
- DataFrameの欠損値を特定の値で置き換える
- Pythonでpandas入門1(データの入力とデータへのアクセス)
- Pythonでpandas入門2(データの追加と削除および並び替え)
- Pythonでpandas入門3(データの統計量の計算)
- Pythonでpandas入門4(データの連結と結合)
- Pythonでpandas入門5(欠損値(NaN)の扱い)
- Pythonでデータを学習用と検証用に分割する
- Pythonでデータ分析入門1(初めての回帰分析)
- Pythonでデータ分析入門2(初めてのロジスティック回帰(2クラス分類))
- Pythonでデータ分析入門3(初めての決定木(多クラス分類))
- Pythonで回帰モデルの評価関数
- Pythonで箱ひげ図を描く
- Python(pandas)でExcelファイルを読み込んでDataFrameにする
- pandasでカテゴリ変数を数値データに変換する
- pandasでクロス集計する
- pandasで同じデータ(要素)がいくつあるか調べる
- pandasで相関係数を計算する
- pandasとseabornでデータの可視化(散布図行列)
- pandasの学習用のデータセットを入手する
- scikit-learnのサンプルデータセットを入手する