今回は、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()
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')
出力:
これは、アイリスの種類別に説明変数を総当たりで関係性を表しています。
これらの可視化により、アイリスの種類に関係しそうな、説明変数に当たりをつけて、解析や機械学習につなげていきます。
コメント