Python

【機械学習の基礎2】Irisデータセットを使ったPythonによるデータ操作の基本

前回は、Pythonとデータサイエンスについての入門として、環境構築の方法に触れました。今回は、Scikit-learnから提供されるIris(アヤメ)データセットを活用し、データの読み込みから分析までの基本的なステップを解説します。

🚀 0円で現役エンジニアから学べる【Techスクールオンライン】のお申込みをお勧めします。 このオンラインスクールでは、現役のエンジニアから直接学ぶことができ、プログラミングの基礎から高度なスキルまでを習得できます。しかも、今なら 0円 で受講できるチャンスです。 エンジニア転職を考えている方やプログラミングに興味がある方、新しいスキルを習得したい方に特におすすめです。

データ操作の基本プログラム

では前回同様にIrisデータセットを読み込みましょう。

Irisデータセットの読み込み

Scikit-learnのload_iris関数を使って、Irisデータセットをロードしましょう。このデータセットは、アヤメの花に関する150のサンプルと、それぞれのがくと花びらのサイズ(長さと幅)、そして花の種類を表すターゲット値が含まれています。

from sklearn.datasets import load_iris
import pandas as pd
import numpy as np

iris = load_iris()
iris_df = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
                       columns= iris['feature_names'] + ['target'])

このコードにより、IrisデータセットがPandasのDataFrame形式でiris_dfに格納されます。これにより、データの操作や分析が容易になります。

DataFrameの確認

DataFrameを使うと、データの概要を簡単に確認できます。まずは、データセットの最初の5行を見てみましょう。

print(iris_df.head())

このように0~4行目までのデータを確認できます。どういうデータが入っているか確認するときに使用します。

データの基本統計量の確認

Pandasの便利な機能の一つに、データセットの基本統計量を一括で確認できるdescribeメソッドがあります。

print(iris_df.describe())

このコマンドにより、各特徴量の平均、標準偏差、最小値、最大値などが表示されます。簡単にデータを確認できるので、概要を把握するために便利です。

実行するとこんな感じ。パッと見るだけでも、sepalがpetalよりも大きいと想像できると思います。人間はこういった形で平均値が大きいから、値が大きい場合はsepalではないかと推測することができます。

これらを学習させることで、コンピュータが推論できるようになります。

データの可視化

データの可視化は、データに含まれるパターンを理解する上で非常に有効です。SeabornとMatplotlibライブラリを使って、データを視覚化してみましょう。

散布図の作成

例えば、がくの長さと幅に基づく散布図を作成してみます。

import seaborn as sns
import matplotlib.pyplot as plt

sns.scatterplot(x='sepal length (cm)', y='sepal width (cm)', hue='target', data=iris_df)
plt.show()

この散布図により、異なるアヤメの種類(ターゲット)ごとに、がくの長さと幅の関係に違いがあることが視覚的に確認できます。

実行するとこんな感じ。左上は0(setosa)、右下側は1 or 2(versicolor or virginica)と推測できます。

現状クラス分類を0,1,2で分類しており、わかりにくいため、ラベルを付けます。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import load_iris

# Irisデータセットのロード
iris = load_iris()
iris_df = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
                       columns= iris['feature_names'] + ['target'])

# targetの数値をアヤメの種類名に置き換え
iris_df['species'] = iris_df['target'].map({0: 'setosa', 1: 'versicolor', 2: 'virginica'})

# 散布図の描画
sns.scatterplot(x='sepal length (cm)', y='sepal width (cm)', hue='species', data=iris_df)
plt.title('Iris Sepal Dimensions')
plt.xlabel('Sepal Length (cm)')
plt.ylabel('Sepal Width (cm)')
plt.legend(title='Species')
plt.show()

実行するとこうなります。

Speciesにアヤメの種類が記載されわかりやすくなりました。

これだけだと、setosaは分類できますが、versicolorとvirginicaは分類できなそうです。次にpetal lengthとpetal widthで散布図を作成してみましょう。

先ほどのコードでx,y =sepal length, width だったものをpetalに変更します。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import load_iris
import numpy as np

# Irisデータセットのロード
iris = load_iris()
iris_df = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
                       columns= iris['feature_names'] + ['target'])

# targetの数値をアヤメの種類名に置き換える
iris_df['species'] = iris_df['target'].map({0: 'setosa', 1: 'versicolor', 2: 'virginica'})

# 花弁(petal)の長さと幅に基づく散布図を作成
sns.scatterplot(x='petal length (cm)', y='petal width (cm)', hue='species', data=iris_df)
plt.title('Iris Petal Dimensions')
plt.xlabel('Petal Length (cm)')
plt.ylabel('Petal Width (cm)')
plt.legend(title='Species')
plt.show()

これを実行するとこんな感じ。この辺りを境にアヤメの分類setosa, versicolor, virginicaを分類できそうな気がしないでしょうか。人間はこのように結果をもとに推定できます。これをコンピュータに判別の方法を指定して推定される方法で分類させていきます。

今回のデータを並べたものがこちらです。

今後、Scikit-learnではロジスティック回帰、サポートベクターマシン、決定木などの様々なアルゴリズムが用意されているので、これらを使用して、機械学習を進めていきましょう。

補足

data= np.c_[iris['data'], iris['target']]

numpyでこのようなnp.c_メソッドを使用しているのでこの内容についても少し説明します。

このコード行 data= np.c_[iris[‘data’], iris[‘target’]] は、NumPyの c_ を使用して、iris[‘data’] と iris[‘target’] を横に連結しています。具体的には、以下のことを行っています:

  • iris[‘data’] は、アヤメデータセットの特徴量を含む部分です。これには、各アヤメサンプルのがくと花びらの長さと幅の4つの数値が含まれています。
  • iris[‘target’] は、それぞれのアヤメサンプルに対応する種類(クラスラベル)を含んでいます。これは、アヤメが Setosa、Versicolor、または Virginica のどれであるかを表す整数の配列です。

NumPyの c_ は、指定された配列を第二軸(列)に沿って連結するために使用されます。この場合、iris[‘data’] の配列と iris[‘target’] の配列を列方向に連結して、各サンプルの特徴量と対応する種類ラベルが一つの配列にまとめられます。

その結果、新しい配列 data は、アヤメの特徴量とそれに対応する種類ラベルが含まれた2次元配列になります。この配列を Pandas の DataFrame に変換することで、データ分析や機械学習モデルの訓練に便利な形式でデータを扱うことができるようになります。

簡単に言うと、iris[‘data’]にはこのように150×4のデータが入っています。

print(np.c_[iris['data'],iris['target']])

これを実行すると、150×5になり、dataにtargetつまりアヤメの種類(setosa,veiginica)が追加されています。これでデータとクラスを追加した配列が完成しています。

まとめ

この記事では、Scikit-learnから提供されるIrisデータセットを使って、PandasとNumPyを活用したデータの読み込み、基本的なデータ操作、統計量の確認、そしてデータの可視化までを行いました。これらの基本的なスキルは、データサイエンスの分野でさらに踏み込んだ分析を行うための土台となります。

🚀 0円で現役エンジニアから学べる【Techスクールオンライン】のお申込みをお勧めします。 このオンラインスクールでは、現役のエンジニアから直接学ぶことができ、プログラミングの基礎から高度なスキルまでを習得できます。しかも、今なら 0円 で受講できるチャンス。
私がツナグバに登録してから、求人情報が豊富に届き、自分に合った仕事を見つけることができました。特に、第二新卒向けの求人情報が多いので、自分のスキルや経験を活かしながら新たなキャリアに挑戦することができました。転職活動は不安も多いですが、ツナグバのサポートがあれば、成功への道が明るく感じました。