Pythonでデータの前処理をする方法!標準化・正規化・欠損値処理を初心者向けに徹底解説
生徒
「Pythonで機械学習を始めたいんですが、データの前処理って何ですか?」
先生
「データの前処理とは、機械学習モデルにデータを入れる前に、整える作業のことです。」
生徒
「整えるって、具体的には何をするんですか?」
先生
「例えば、数値の大きさを揃えたり、欠けているデータを補ったりします。これをしないと正しく学習できません。」
生徒
「なるほど!それならぜひ知りたいです!」
先生
「では、基本から順番に見ていきましょう。」
1. データ前処理とは?
Pythonの機械学習におけるデータ前処理とは、モデルに入力する前にデータを整える作業のことです。例えば、バラバラな数値の大きさを揃えたり、空欄のデータを補ったりします。人間でも、読みやすいノートの方が理解しやすいように、機械も整理されたデータの方が学習しやすくなります。
2. 標準化とは?
標準化とは、データの平均を基準にして、ばらつきを揃える方法です。難しく聞こえますが、テストの点数を平均との差で考えるイメージです。これにより、異なる単位のデータでも比較しやすくなります。
from sklearn.preprocessing import StandardScaler
import numpy as np
data = np.array([[100], [200], [300]])
scaler = StandardScaler()
result = scaler.fit_transform(data)
print(result)
[[-1.22474487]
[ 0. ]
[ 1.22474487]]
3. 正規化とは?
正規化とは、データを一定の範囲に収める処理です。例えば、すべての数値を0から1の間に変換します。これにより、極端に大きな値に影響されにくくなります。スポーツで言えば、体格差をなくして公平にするようなイメージです。
from sklearn.preprocessing import MinMaxScaler
import numpy as np
data = np.array([[10], [20], [30]])
scaler = MinMaxScaler()
result = scaler.fit_transform(data)
print(result)
[[0. ]
[0.5]
[1. ]]
4. 欠損値とは?
欠損値とは、本来あるはずのデータが抜けている状態のことです。例えば、アンケートで未回答の項目です。これをそのままにするとエラーの原因になります。そのため、削除したり補ったりする必要があります。
import pandas as pd
data = pd.DataFrame({
"点数": [80, None, 90]
})
print(data)
点数
0 80.0
1 NaN
2 90.0
5. 欠損値の処理方法(削除)
欠損値を含むデータを削除する方法です。データが十分にある場合に有効です。ただし、削除しすぎると情報が減るので注意が必要です。
import pandas as pd
data = pd.DataFrame({
"点数": [80, None, 90]
})
clean_data = data.dropna()
print(clean_data)
点数
0 80.0
2 90.0
6. 欠損値の処理方法(平均で補完)
欠損している部分を平均値で埋める方法です。全体の傾向を崩さずにデータを活用できます。初心者でも扱いやすい方法です。
import pandas as pd
data = pd.DataFrame({
"点数": [80, None, 90]
})
data["点数"].fillna(data["点数"].mean(), inplace=True)
print(data)
点数
0 80.0
1 85.0
2 90.0
7. 前処理が重要な理由
データ前処理は、機械学習の精度に大きく影響します。どれだけ優れたアルゴリズムでも、入力データがバラバラだと正しく学習できません。料理でも、材料の下ごしらえが大切なように、前処理は結果を左右する重要な工程です。
8. 標準化と正規化の違い
標準化は平均を基準にデータを整え、正規化は範囲を揃えます。どちらもスケールを揃える処理ですが、使う場面が異なります。データの特徴に応じて使い分けることが大切です。
まとめ
データ前処理の重要性を振り返る
Pythonで機械学習を行ううえで、データ前処理は欠かせない重要な工程です。データ前処理とは、標準化や正規化、欠損値処理などを通じて、データを機械学習モデルが扱いやすい形に整える作業を指します。今回解説したように、データの状態を整えることで、モデルの精度や学習効率が大きく向上します。
特に、数値のスケールがバラバラな場合は標準化を行うことで平均を基準としたデータに変換できます。また、正規化を行うことでデータを一定の範囲に収め、外れ値の影響を抑えることが可能になります。これらの処理は、機械学習アルゴリズムの性能を最大限引き出すために非常に重要です。
標準化・正規化・欠損値処理の使い分け
標準化は、平均と分散を基準にデータを変換するため、主に回帰分析や距離計算を用いるアルゴリズムに適しています。一方で正規化は、データを〇から一の範囲に収めることで、ニューラルネットワークや画像処理などで効果を発揮します。このように、用途に応じて適切な前処理を選択することが重要です。
また、欠損値処理も非常に重要です。欠損値をそのままにしてしまうと、エラーの原因になったり、学習結果に悪影響を与える可能性があります。削除する方法と平均値で補完する方法のどちらを選ぶかは、データ量や目的に応じて慎重に判断する必要があります。
実務で役立つ前処理の流れ
実際のデータ分析や機械学習プロジェクトでは、まずデータの確認を行い、欠損値や外れ値の有無をチェックします。その後、必要に応じて欠損値処理を行い、次に標準化や正規化を実施します。この一連の流れを習慣化することで、安定したモデル構築が可能になります。
サンプルプログラムで総復習
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler, MinMaxScaler
# データ作成
data = pd.DataFrame({
"点数": [80, None, 90, 70, None]
})
# 欠損値を平均で補完
data["点数"].fillna(data["点数"].mean(), inplace=True)
# 標準化
scaler_std = StandardScaler()
data["標準化"] = scaler_std.fit_transform(data[["点数"]])
# 正規化
scaler_norm = MinMaxScaler()
data["正規化"] = scaler_norm.fit_transform(data[["点数"]])
print(data)
点数 標準化 正規化
0 80.0 0.000000 0.500000
1 80.0 0.000000 0.500000
2 90.0 1.414214 1.000000
3 70.0 -1.414214 0.000000
4 80.0 0.000000 0.500000
初心者が意識すべきポイント
初心者の方は、まずデータ前処理の基本を理解し、実際に手を動かしてコードを書くことが大切です。Pythonのpandasやscikitlearnを使うことで、効率よく前処理を実装できます。繰り返し学習することで、どの処理を使うべきか自然と判断できるようになります。
データ前処理は地味な作業に見えるかもしれませんが、機械学習の成功を左右する非常に重要なステップです。標準化、正規化、欠損値処理をしっかり理解し、適切に使い分けることが、精度の高いモデル構築への近道となります。
生徒
「データ前処理って、思っていたよりすごく大事なんですね。」
先生
「その通りです。機械学習では、アルゴリズムよりもデータの質が重要になることも多いんです。」
生徒
「標準化と正規化の違いも理解できました。使い分けが大事なんですね。」
先生
「はい。データの性質や使うモデルによって適切な方法を選びましょう。」
生徒
「欠損値もそのままにしちゃダメなんですね。」
先生
「そうです。削除するか補完するかを状況に応じて判断する必要があります。」
生徒
「これでPythonの機械学習に一歩近づけた気がします!」
先生
「とても良いですね。この基礎をしっかり身につければ、より高度な分析にも対応できるようになりますよ。」