【python】iris(アヤメ)のデータセットをpandasとseabornを使って可視化する
この記事はこんな人にオススメです
  • irisのデータセットを具体的に知りたい人
  • seabornとpandasを使って展開したい人

こんにちは.けんゆー(@kenyu0501_)です.
サポートベクターマシンなどの機械学習を試してみたいと思ったときには,Scikit-learnのデータセットを使ってみるのは楽で良い方法だと思います.
その中でも,提供されているアヤメのデータ(iris)は,よく使われるデータセットです.
今回は,そのアヤメのデータセットがどのような構造になっているのかや,実際にseabornやpandasを用いてグラフ化してみようと思います.

アヤメのデータセットとは!?

アヤメ(iris)は,もしかしたら機械学習を扱う世界中のデータサイエンティストに最も知られた花の品種かもしれないですね.
なぜなら,1936年に「The use of multiple measurements in taxonomic problems (分類問題における複数箇所の測定の使用) 」(実際の論文PDFはこちら)で3種類のアヤメが使用されて以来,機械学習などの分野で広く扱われてきたからです.
Ronald Fisherさんという方が執筆されましたが,この論文は現在2000回以上も引用されており,irisのデータは,機械学習を学ぶ上で登竜門的なSVMなどに使用される有名なデータセットです.

irisのデータセット
  • 3種類の花 (Setosa, Virginia, Versicolor )
  • 4つの特徴量 (がく片と花びらの幅と長さ)
  • 150サンプル(50サンプルずつ)

3種類のアヤメ(Setosa, Virginica, Versicolor )

実際にScikit-Learnで提供されているアヤメ(iris)は以下の3種類です.

画像データはClassification of Iris Varietiesから引用させていただきました.
3種類のアヤメですが,それぞれ4つの特徴量を持っています.

3種類のアヤメは,以下です.

  • Setosa (ヒオウギアヤメ)
  • Virginica 
  • Versicolor 

setosaは日本でも取れるようなので和名がありましたが,残りの二つは和名はありませんでした.
2015年の北海道医療大学学術レポジトリの植物の学名,英名および和名で検索しました➡︎「PDFはこちら」)

ただ,アヤメは世界でも150種以上存在しているので,かなり多いです.Scikit-Learnのデータセットはその中の3種類なのですね.

4つの特徴量

4つの特徴量は,sepal(がく片)とpetal(花びら)の長さと幅ですね.cmで数値が入っています.
これら4つの特徴が,種間で異なると報告されて以来,よく機械学習のデータセットとして用いられています.

150のサンプル(1種類は50サンプルずつ)

これらのデータが全部で150サンプル提供されています.
1種類は50サンプルずつです.では,実際にどのようなものが入っているのか確認していきましょう.

(この図は,pythonのseabornで作りました.また後ほどプログラムについて解説します.)

縦軸と横軸には4つの特徴量の,がく片の長さがく片の幅花びらの長さ花びらの幅の分布をプロットしてます.
赤がSetosa緑がVersicolor青がVirginicaです.

それぞれの大きさの特徴量から,種別間の違いが見れます.

  • 花びらの長さと幅は,Virginica > Versicolor > Setosa の順である.
  • がく片の幅に関しては,Setosa が最も大きくて,VirginicaVersicolorがほぼ同じくらいである.
  • がく片の長さは,Virginica > Versicolor > Setosa である.
  • VirginicaVersicolorはほとんど似ているが,若干,Virginicaが大きい.
  • Setosaを見分けることは,他の二つに比べて簡単そうである.

こういった種別間の違いが提供されているデータから観察することができます.

提供されているデータの構造を見る

実際に,Pythonを用いて提供されているデータ構造にアクセスしてみます.

以上のプログラムを回すと,とりあえず,どのようなデータが入っているのか確認することができます.
具体的に説明していくと以下のようになります.

load_irisが返すデータは,キーと値を持ちます.
キーDESCRは,データセットの簡単な説明(description)を表します.
dataの配列には,花の特徴量の測定結果が格納されています.
それぞれじっくり確認してみてください.

pandasを使って図示する

pandasを使って図示するプログラムを掲載しておきます.
pandasをしようすると以下のような分布図が書けます.

プログラムに関して

プログラムは以下です.細かい設定は各自で行なってください.

pd.plotting.scatter_matrix( )の関数で図を書いていますが,内側の引数で色々と設定が可能です.詳しくはこちらの公式ドキュメント(こちら英語)をご覧ください

ざっくりと分かる範囲で解説をしてきます.

  • c=iris_datalabel
    散布図(matplotlibのscatter)に渡る引数で,iris_datalabel(3種類)に応じた配色.
  • figsize=(8,8)
    図の全体のサイズ
  • marker = ‘o’
    散布図に渡る引数でマーカーの形を指定.他にも’+’や’^’がある.
  • hist_kwds = {‘bins’:20}
    ヒストグラムの棒の数.
  • s=60
    マーカーのサイズ.
  • alpha=.8
    透明度を指定.
  • cmap = mglearn.cm3
    matplotlibのカラーマップを指定.

ぜひ使ってみてくださいね!

Seabornで図示する

今度はpandasではなく,seabornを使って図示します.
おいらはどちらかというと,このseabornを使って図示する方が多いです.

こっちはライブラリインポートの定義を含めて4行で書けます.
sns.load_dataset("iris")を使って,irisデータセットをpandasのDataFrameとして読み込んでいます.
その後,pairplot()でグラフをつくります.
.pngの拡張子で保存するところまでやっときましょう.

 

seabornのpairplotの詳細は,公式ページに詳しく書かれています.

また,seabornに関しては,以下の記事もオススメです.
(参考:【jointplot】実験データ(.txtや.csv)の分布図をpythonで図示化し比較する)

(参考:seabornでグラフを重ねてプロットする方法)

以下はオススメです.
「Pythonではじめる機械学習」