機械学習データ前処理入門

機械学習のためのデータ前処理:グラフでデータを「見る」方法【Pandas+Matplotlib/Seaborn入門】

Tags: データ可視化, Python, Pandas, Matplotlib, Seaborn, 機械学習

機械学習のためのデータ前処理:グラフでデータを「見る」方法【Pandas+Matplotlib/Seaborn入門】

機械学習モデルの性能は、使用するデータの質に大きく左右されます。そして、データの質を高めるためには、適切なデータ前処理が不可欠です。しかし、データ前処理を始める前に、まず「どのようなデータなのか」を把握することが非常に重要になります。

データの特徴や傾向を把握する上で強力な手段となるのが、データ可視化です。データをグラフとして表現することで、数値や文字だけでは見えにくい、隠れたパターンや異常値、変数間の関係性などを直感的に理解することができます。これは、その後のデータ前処理の方向性を定める上で、羅針盤のような役割を果たします。

この記事では、機械学習のためのデータ前処理におけるデータ可視化の重要性と、よく用いられる基本的なグラフの種類、そしてそれらをPythonの主要なライブラリ(Pandas, Matplotlib, Seaborn)を使ってどのように作成・解釈するのかを、コード例を交えながら解説します。

なぜデータ可視化が必要なのか?

データ前処理のステップに進む前にデータを可視化する最大の理由は、「データセットの全体像と個々の変数の性質を深く理解するため」です。

生データはしばしば、膨大な数の行と列からなる単なる数値や文字の羅列です。この状態では、データがどのような分布をしているのか、欠損値はどの程度あるのか、特定の変数間に相関はあるのかといった重要な情報は簡単には読み取れません。

グラフとしてデータを表現することで、以下のような情報を効率的に把握できます。

これらの情報は、その後の欠損値の処理方法、外れ値への対応、特徴量の選択や生成、さらには使用する機械学習モデルの選定など、データ前処理のあらゆるステップの判断材料となります。つまり、データ可視化は、闇雲に前処理を行うのではなく、データに基づいて戦略的に前処理を進めるための「データ理解の第一歩」なのです。

データ可視化に使う主要ライブラリ

Pythonでデータ可視化を行う際には、主に以下のライブラリがよく使用されます。

通常、これらのライブラリは組み合わせて使用されます。Pandasでデータを整形し、MatplotlibやSeabornでグラフを描画するという流れが一般的です。

よく使われる基本的なグラフの種類とその使い方

ここでは、データ理解のためによく使われる基本的なグラフをいくつか紹介し、それぞれの目的とPythonでの簡単なコード例を示します。

使用するデータは、ここでは例として以下のようなシンプルなデータフレーム(dfとします)を想定します。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 例として使用するデータフレームを作成
data = {
    '売上': [150, 200, 120, 300, 180, 250, 130, 220, 160, 280],
    '広告費': [10, 15, 8, 25, 12, 20, 9, 18, 11, 22],
    '地域': ['東京', '大阪', '東京', '福岡', '大阪', '東京', '大阪', '東京', '福岡', '大阪'],
    '月': pd.to_datetime(['2023-01-01', '2023-02-01', '2023-03-01', '2023-04-01', '2023-05-01',
                         '2023-06-01', '2023-07-01', '2023-08-01', '2023-09-01', '2023-10-01'])
}
df = pd.DataFrame(data)

print(df.head())
    売上  広告費  地域         月
0  150   10  東京  2023-01-01
1  200   15  大阪  2023-02-01
2  120    8  東京  2023-03-01
3  300   25  福岡  2023-04-01
4  180   12  大阪  2023-05-01

1. ヒストグラム (Histogram)

# 売上データのヒストグラム
plt.figure(figsize=(8, 5)) # グラフのサイズを指定
sns.histplot(data=df, x='売上', bins=5, kde=True) # bins: 棒の数, kde: カーネル密度推定曲線
plt.title('売上データの分布') # グラフタイトル
plt.xlabel('売上額') # x軸ラベル
plt.ylabel('頻度') # y軸ラベル
plt.grid(axis='y', linestyle='--', alpha=0.7) # グリッド表示
plt.show() # グラフを表示

(ここではグラフ画像は表示できませんが、売上額の各範囲にいくつのデータが存在するかが棒グラフで示されます。kde=Trueで分布の滑らかな線も表示されます。)

2. 棒グラフ (Bar Plot)

# 地域ごとの平均売上を計算
avg_sales_by_region = df.groupby('地域')['売上'].mean().reset_index()

# 地域ごとの平均売上を棒グラフで表示
plt.figure(figsize=(8, 5))
sns.barplot(data=avg_sales_by_region, x='地域', y='売上')
plt.title('地域別 平均売上')
plt.xlabel('地域')
plt.ylabel('平均売上')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()

(地域ごとの棒の高さで平均売上が比較できます。)

3. 散布図 (Scatter Plot)

# 広告費と売上の関係を散布図で表示
plt.figure(figsize=(8, 5))
sns.scatterplot(data=df, x='広告費', y='売上')
plt.title('広告費と売上の関係')
plt.xlabel('広告費')
plt.ylabel('売上')
plt.grid(True, linestyle='--', alpha=0.7)
plt.show()

(点が右肩上がりに集まっていれば正の相関、右肩下がりなら負の相関、点がばらけていれば相関が薄いと解釈できます。)

4. 折れ線グラフ (Line Plot)

# 月ごとの売上推移を折れ線グラフで表示
plt.figure(figsize=(10, 6))
sns.lineplot(data=df, x='月', y='売上')
plt.title('月別 売上推移')
plt.xlabel('月')
plt.ylabel('売上')
plt.grid(True, linestyle='--', alpha=0.7)
plt.xticks(rotation=45) # 日付が見やすいように軸ラベルを回転
plt.tight_layout() # レイアウト調整
plt.show()

(時間の経過とともに売上がどのように変化しているかが線で追えます。)

5. 箱ひげ図 (Box Plot)

# 地域別の売上分布を箱ひげ図で表示
plt.figure(figsize=(8, 5))
sns.boxplot(data=df, x='地域', y='売上')
plt.title('地域別 売上分布')
plt.xlabel('地域')
plt.ylabel('売上')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()

(箱の位置と長さ、ひげの長さ、そして箱の外に点として描かれるデータ(外れ値候補)から、各地域の売上の特徴とばらつき、異常値の可能性が比較できます。)

可視化で見えた情報と前処理への繋がり

データ可視化によって得られた洞察は、その後の前処理ステップを効率的かつ適切に進めるための重要な手がかりとなります。

このように、データ可視化は単にデータを見るだけでなく、「何が問題で、どのような前処理が必要か」という疑問に対するヒントを与えてくれるのです。

まとめ

データ前処理は機械学習モデル構築の要であり、その前処理を効果的に行うためには、まずデータを深く理解することが不可欠です。データ可視化は、数値や文字のデータに「命を吹き込み」、パターンや特徴、問題点を直感的に把握するための強力なツールです。

この記事では、データ可視化の重要性と、ヒストグラム、棒グラフ、散布図、折れ線グラフ、箱ひげ図といった基本的なグラフの種類、そしてPythonを使ったそれらの作成方法と解釈のポイントについて解説しました。

これらの基本的なグラフを使いこなすことで、データが持つ情報を引き出し、より適切で効果的なデータ前処理へと繋げることができます。ぜひ、ご自身のデータで様々なグラフを作成し、「データが何を語っているのか」を探してみてください。データへの理解が深まるほど、より良い機械学習モデルを構築できるはずです。

次回の記事では、可視化によって見つかった具体的な問題点(例えば欠損値や外れ値)に対する前処理の手法について、さらに詳しく解説していきます。