Matplotlibで散布図行列を描く方法

Matplotlibで散布図行列を描く方法

データの相関を確認するときに便利な散布図行列を描画する方法です。Seaborn(Matplotlibのラッパー)のpairplotを利用するとマトリック状に配置された複数の散布図が簡単に作成できます。

相関確認の定番グラフ、散布図行列の作り方


データ準備と内容確認

データはRで有名なIris(アヤメの計測データ)を利用しています。IrisデータはSeabornのデータセットにも入っています。

Irisデータは『setosa』、『versicolor』、『virginica』という3種類の品種のアヤメの”がく片 (Sepal)”と”花弁 (Petal)” の幅および長さを計測したデータです。

sepal length(cm)がく片の長さ
sepal width(cm)がく片の幅
petal length(cm)花弁の長さ
petal width(cm)花弁の幅

In [1]:
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

iris = sns.load_dataset("iris")  # アヤメの計測データ読み込み
In [2]:
iris.head()
Out[2]:
sepal_length sepal_width petal_length petal_width species
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa
In [3]:
iris.tail()
Out[3]:
sepal_length sepal_width petal_length petal_width species
145 6.7 3.0 5.2 2.3 virginica
146 6.3 2.5 5.0 1.9 virginica
147 6.5 3.0 5.2 2.0 virginica
148 6.2 3.4 5.4 2.3 virginica
149 5.9 3.0 5.1 1.8 virginica
In [4]:
iris.describe()
Out[4]:
sepal_length sepal_width petal_length petal_width
count 150.000000 150.000000 150.000000 150.000000
mean 5.843333 3.057333 3.758000 1.199333
std 0.828066 0.435866 1.765298 0.762238
min 4.300000 2.000000 1.000000 0.100000
25% 5.100000 2.800000 1.600000 0.300000
50% 5.800000 3.000000 4.350000 1.300000
75% 6.400000 3.300000 5.100000 1.800000
max 7.900000 4.400000 6.900000 2.500000
In [5]:
iris.groupby(['species']).mean()
Out[5]:
sepal_length sepal_width petal_length petal_width
species
setosa 5.006 3.428 1.462 0.246
versicolor 5.936 2.770 4.260 1.326
virginica 6.588 2.974 5.552 2.026



散布図行列グラフ1(カテゴリ分けなし)

Seabornから読み込んだIrisデータの場合、pairplotの第1引数に読み込んだデータ変数を指定するだけでグラフが描画できます。

In [1]:
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

iris = sns.load_dataset("iris")  # アヤメの計測データ読み込み
sns.pairplot(iris) # 散布図行列の描画

# sns.plt.savefig('iris-graph1.png') ## png画像書き出し
Out[1]:
<seaborn.axisgrid.PairGrid at 0xaeee4a0c>



散布図行列グラフ2(カテゴリ分けあり)

カテゴリで色分けする場合は、pairplotのオプション引数hueにカテゴリ列名を指定します。

In [1]:
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

iris = sns.load_dataset("iris")  # アヤメの計測データ読み込み
sns.pairplot(iris, hue='species') # 散布図行列の描画、カテゴリで色分け

# sns.plt.savefig('iris-graph2.png') ## png画像書き出し
Out[1]:
<seaborn.axisgrid.PairGrid at 0xb408e3ac>


散布図行列グラフはPandasのscatter_matrixでも作成できますが、Seabbornのpariplotを利用した方が簡単で綺麗に作図ができます。


スポンサーリンク

0 件のコメント :

コメントを投稿