【入門編】データの可視化(アイリスデータと戯れる)_その1

スポンサーリンク
Python






今回は、scikit-learnのデータセットで、Anacondaをインストールしていると、デフォルトで使える、アイリスのデータの可視化を行っていきます。アイリスデータセットとは、花の種類を分類するモデルです。

説明変数は「sepal length(ガクの長さ)」,「sepal width(ガクの幅)」,「petal length(花弁の長さ)」,「petal width(花弁の幅)」で花の形状を表しています。
目的変数である花の種類が、「setosa」,「versicolor」, 「virginica」と3種類ある、分類問題のデータです。

scikit-learnの入門中の入門のデータセットといえます。このデータを用いてデータの可視化などを行います。

環境構築は、【2020年最新】Anacondaのインストール方法

それでは、やっていきましょう。

必要なライブラリをインポート

import numpy as np 
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')

アイリスデータを整える

【超重要】はじめてのデータ収集方法

from sklearn.datasets import load_iris   # アイリスのデータをを取り出す
iris = load_iris()                       # アイリスのデータを 'iris' のなかに入れる
iris.keys()                              # アイリスのデータの概要を表示させる

出力:
dict_keys([‘data’, ‘target’, ‘frame’, ‘target_names’, ‘DESCR’, ‘feature_names’, ‘filename’])

アイリス(iris)のデータを取り出し、そのデータの概要を出力しています。必要な情報を各自みていきましょう。

print(f'(行数, 列数) = {iris.data.shape}')  # shapeは行数、列数を表示させる
iris.data                                  # アイリスの説明変数を出力する

出力:
(行数, 列数) = (150, 4)
array([[5.1, 3.5, 1.4, 0.2],
[4.9, 3. , 1.4, 0.2],
[4.7, 3.2, 1.3, 0.2],
[4.6, 3.1, 1.5, 0.2],
[5. , 3.6, 1.4, 0.2],
[5.4, 3.9, 1.7, 0.4],
[4.6, 3.4, 1.4, 0.3],
[5. , 3.4, 1.5, 0.2],
[4.4, 2.9, 1.4, 0.2],
[4.9, 3.1, 1.5, 0.1],

これは、説明変数のデータであり、行数が150、列数が4あるということを表しています。array 以下がその具体的な数値です。1行目は、[5.1, 3.5, 1.4, 0.2]を4つの数値が確認できます。

print(f'(行数, 列数) = {iris.target.shape}')
iris.target                                   # アイリスの目的変数を出力する

出力:
(行数, 列数) = (150,)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])

これは、目的変数のデータであり、行数が150、列数はなし(1つ)ということを表しています。0と1と2の3種類が確認できます。

iris.target_names   # アイリスの目的変数(iris.target)の名前(names)を確認する

出力:
array([‘setosa’, ‘versicolor’, ‘virginica’], dtype='<U10′)

これは、目的変数が「setosa」,「versicolor」,「virginica」の3種類であることを出力しています。

iris.feature_names   # アイリスの説明変数(iris.target)の名前(names)を確認する

出力:
[‘sepal length (cm)’,
‘sepal width (cm)’,
‘petal length (cm)’,
‘petal width (cm)’]
これは、説明変数を表しています。上で説明変数のデータの列数が4つあるといいましたが、この出力結果がその4つにあたります。

df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
     # dataはアイリスの説明変数, columns(列名)はアイリスの説明変数名を指定
df

出力:

説明変数のデータフレームが出来上がりました。
目的変数のデータを加えてみます。

df['kind'] = pd.DataFrame(data=iris.target)
# 上のデータフレームにkindという列名を設け、そこにアイリスの目的変数(iris.target)を入れる
df    #作成したデータフレームを出力する

出力:

説明変数のデータフレームに目的変数のデータが加わりました。

次に、目的変数が0、1、2なので、それぞれにアイリスの花の名前を割り当てましょう。
花の種類は、target_namesで確認しました。
mappingは割り当てる数値と花の種類を表します。0をsetosa、1をverscolor、2をvirginicaに変換します。

mapping = {0:'setosa', 1:'versicolor', 2:'virginica'}
df['kind'] = df['kind'].map(mapping)
df

出力:

kindの列の数値が、花の種類である文字に変換できていますね。

基本統計量を確認してみましょう

df.describe()

出力:

count:データ数

mean:平均値

std:標準偏差

min:最小値(最も小さいデータの値)

25%:25パーセンタイル(最も小さい数値から25%にあたる数値)

50%:50パーセンタイル(最も小さい数値から50%に当たる数値、中央値)

75%:75パーセンタイル(最も小さい数値から75%「にあたる数値)

max:最大値(最も大きいデータの値)

 

1行で基本統計量が計算できます。非常に簡単で、便利ですね。

あと、列の名前が長ったらしいので、簡便な名前に変換します。(ここは好みですかね)

mapping = {'sepal length (cm)':'SL',  # sepal length (cm) を SL に
           'sepal width (cm)':'SW',   # sepal width (cm) を SW に
           'petal length (cm)':'PL',  # petal length (cm) を PL に
           'petal width (cm)':'PW',   # petal width (cm) を PW に
           'kind':'kind'}             # kind を kind に(書いておかないと出力しないため)
df.columns = df.columns.map(mapping)
df

出力:

列の名前がすっきりしましたね。

次に、アイリスのデータをグラフで可視化してみる。

データのグラフ化

説明変数をアイリスの種類別に、いろんなグラフで確認してみましょう

sns.countplot('kind',data=df)
plt.ylim(0,60)
plt.show()

出力:

アイリスの種類別に個数を確認する。いずれも50のデータですね。

sns.barplot(x='SL',
            y='kind',
            data=df)

出力:

これは、ガクの長さをアイリスの種類別に表している。

sns.stripplot(x='kind',
              y='SW',
              data=df)

出力:

これは、ガクの幅をアイリスの種類別に表している。

fig = plt.gcf()
fig.set_size_inches(10,7)
fig = sns.boxplot(x='kind',
                  y='PL',
                  data=df)

出力:

これは、花弁の長さをアイリスの種類別に表している。

fig = plt.gcf()
fig.set_size_inches(10,7)
fig = sns.violinplot(x='kind',
                     y='PW',
                     data=df)

出力:

これは、花弁の幅をアイリスの種類別に表している。

sns.pairplot(data=df,
             kind='scatter')

出力:

これは、説明変数を総当たりで関係性を表しています。

sns.pairplot(df,
             hue='kind')

出力:

これは、アイリスの種類別に説明変数を総当たりで関係性を表しています。
これらの可視化により、アイリスの種類に関係しそうな、説明変数に当たりをつけて、解析や機械学習につなげていきます。



コメント

タイトルとURLをコピーしました