データ分析や機械学習を始めるとき、多くの人がつまずくのが「データ前処理」です。正しく前処理を行えば分析の精度は大きく向上します。本記事では、Pythonを使ってデータ前処理を効率化する方法を、初心者でもわかりやすく紹介します。
なぜデータ前処理が重要なのか
データ前処理とは、欠損値や外れ値を処理し、分析に適した形に整える作業です。どんなに高度なモデルを使っても、データが整理されていなければ正しい結果を得ることはできません。特に現実のデータは欠損やノイズが多く、そのままでは使えないケースがほとんどです。
前処理を効率化することで、時間を節約できるだけでなく、精度の高いモデル構築にもつながります。したがって、Pythonで前処理を習得することはデータ分析の第一歩となります。
Pythonでよく使われるライブラリ
pandas
表形式のデータを扱うのに便利なライブラリです。CSVやExcelのデータを読み込み、欠損値処理や列の変換などを効率よく行えます。
NumPy
数値計算を効率化するためのライブラリです。特に配列操作が高速で、大量のデータを扱う場合に欠かせません。
scikit-learn
機械学習用ライブラリとして有名ですが、データ前処理のための関数も豊富に揃っています。標準化やラベルエンコーディングなどを簡単に実行できます。
欠損値の処理方法
欠損値を確認する
import pandas as pd
df = pd.read_csv("data.csv")
print(df.isnull().sum())
isnull().sum()で各列の欠損数を確認できます。これにより、どの列に欠損が多いのかを把握できます。
欠損値の処理
代表的な方法は以下の3つです。
- 欠損値を削除する
- 平均値や中央値で補完する
- 機械学習モデルを使って補完する
# 平均値で補完
df["age"].fillna(df["age"].mean(), inplace=True)
データの特性に合わせて適切な処理を選びましょう。
外れ値の処理
外れ値はデータの分布を大きく歪めることがあります。そのため、前処理の段階で検出と処理を行うことが重要です。
import numpy as np
q1 = df["value"].quantile(0.25)
q3 = df["value"].quantile(0.75)
iqr = q3 - q1
lower = q1 - 1.5 * iqr
upper = q3 + 1.5 * iqr
filtered_df = df[(df["value"] >= lower) & (df["value"] <= upper)]
四分位範囲(IQR)を使えば、外れ値を簡単に除去できます。
データの正規化と標準化
数値のスケールが異なる場合、そのまま機械学習に入力すると偏った結果になることがあります。そのため、正規化や標準化を行うことが推奨されます。
正規化
0から1の範囲にスケーリングする方法です。
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaled = scaler.fit_transform(df[["value"]])
標準化
平均0、分散1に変換する方法です。
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
standardized = scaler.fit_transform(df[["value"]])
カテゴリ変数の処理
ラベルエンコーディング
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
df["category_encoded"] = encoder.fit_transform(df["category"])
ワンホットエンコーディング
df = pd.get_dummies(df, columns=["category"])
これにより、カテゴリデータを数値データに変換できます。
応用テクニック
さらに効率化するためのテクニックもあります。
- 関数化:前処理を関数としてまとめれば再利用性が高まります。
- パイプライン:scikit-learnのPipelineを使えば、前処理と学習を一連の流れで実行できます。
- バッチ処理:大規模データは分割して処理することでメモリ不足を防げます。
よくあるエラーと注意点
データ前処理では以下のような問題が発生しやすいです。
- 欠損値処理のやりすぎ:欠損を削除しすぎるとデータが偏る可能性があります。
- カテゴリ変数の不一致:学習データとテストデータでカテゴリが異なるとエラーになります。
- メモリ不足:大規模データを一度に読み込むとクラッシュする場合があります。
これらを意識して作業することで、安定した前処理が可能になります。
効率的に前処理を進めるための考え方
前処理は「正確さ」と「効率」のバランスが大切です。すべてのデータを完璧に整えようとすると時間がかかりすぎます。そのため、分析の目的に応じて必要な処理を取捨選択することが重要です。常に目的を意識して効率的に進めましょう。
プログラミング初心者におすすめのサービス
「もっと実践的なコード例が欲しい」「自分の用途に合わせて教えてほしい」という方には、
テックアカデミーがおすすめです。
AI関連コースやシステム開発コース、アプリ開発コースなど豊富な学習が可能です。
さらに今なら無料相談でアマギフプレゼントもあるので、気軽にお申込みしてみてください。
また、プログラミング学習のプラットフォームとして、ココナラでは、現役エンジニアや経験豊富な講師が、あなたのレベルや目的に合わせてマンツーマンで指導してくれます。
書籍や動画ではカバーしきれない、あなた専用のカリキュラムで学べるのが最大の魅力。短時間で効率的にスキルを伸ばしたいなら、まずは出品者のサービスをチェックしてみましょう。
また、教える側としてスキルを活かして副業・独立を目指すことも可能です。
プログラミング経験や知識があれば、自分の得意分野をサービスとして出品し、全国の学習者から直接依頼を受けられます。オンラインで完結するため、場所や時間に縛られず、自分のペースで働けるのも大きなメリットです。
こちらのリンクから詳細をチェックしてみてください。
まとめ
Pythonでのデータ前処理は、pandasやscikit-learnを活用することで効率化できます。欠損値や外れ値の処理、正規化、カテゴリ変数の変換を押さえることで、分析の精度が格段に向上します。自分のプロジェクトに合わせて工夫してみましょう。
以下のリンクから、
SESの組込みシステムから色々な不満を持ち、自社WEBサービスへ転職した実体験の記事がありますので、是非読んでみてください。とても喜びます。
SESの組込みシステムから自社WEBサービスのエンジニアに転職した話

参考リンク: pandas公式サイト, scikit-learn 前処理ドキュメント
コメント