散布図ではなくて散布図行列を描いてみます(1)

グラフ

こんにちは。今回は散布図を描くことにします。

たまたま調べた2項目間の関係を見るのでは不十分です。(と力説され、今は完全にそう思っています。)

ということで、散布図ではなく、散布図行列を描いてみます。

1回で終わらないのは、難しかったというわけではなく、いろいろ気になって調べていたら2回分の分量になりそうだったためです。

今回はPython編です。

Python + Seaborn + matplotlib で単に散布図行列を描いてみる

今回もあやめのデータです。

あやめのデータは、それぞれの花ごとの

  • sepal length(ガクの長さ)
  • sepal width(ガクの幅)
  • petal length(花弁の長さ)
  • petal width(花の幅)

の特徴量があります。それぞれの特徴量の分布がどのように関係しているか見てみることにしましょう。

プログラムは次になります。

import matplotlib.pyplot
import seaborn

iris = seaborn.load_dataset( "iris" )
seaborn.pairplot( iris )
matplotlib.pyplot.show()

これにより、次のような散布図行列が描かれます。

相関行列を作ってみる

グラフは描けましたが、それぞれの特徴量間の相関がどうなっているかはわかりにくいかもしれません。

そこで、それぞれの特徴量間の相関係数を求め、行列の形で表示します。

また、単に数値が並んでいるだけではわかりにくいので、ヒートマップとして表示することにします。

そのプログラムです。

import matplotlib.pyplot
import seaborn

iris = seaborn.load_dataset( "iris" )

corr_mat = iris.corr( method='pearson' )
seaborn.heatmap(
	corr_mat,
	cbar = True,
	square = True,
	vmin = -1.0,
	vmax =  1.0,
	center = 0,
	annot = True,
	annot_kws={ 'size':15 },
	fmt='.2f',
	xticklabels = corr_mat.columns.values,
	yticklabels = corr_mat.columns.values,
)
matplotlib.pyplot.show()

それにより描かれたヒートマップです。

(matplotlib 3.1.1では、ヒートマップがきれいに描けないみたいです。このヒートマップは、matplot 3.1.0にダウングレードして描きました。)

sepal_width(がくの幅)は他の特徴量とは負の相関になっているようです。

また、petal_length(花弁の長さ)とpetal_width(花の幅)とは、かなり相関が強いといえそうです。

Python + Seaborn + matplotlib で品種を区別して散布図行列を描いてみる

このあやめのデータは3つの品種が混ざっていました。

それらを区別して散布図行列を描いてみると、違った見え方になるかもしれません。

それではプログラムです。

import matplotlib.pyplot
import seaborn

iris = seaborn.load_dataset( "iris" )
seaborn.pairplot( iris, hue="species" )
matplotlib.pyplot.show()

最初のプログラムとの違いは、pairplotの引数に hue="species" を加えただけです。

散布図行列です。

かなり品種によって、分布が異なっているようです。

今回はこれでおしまいにします。それではまた。

Posted by 春日井 優