データのクリーニングと整形 | データ前処理の重要性 | Pythonによる機械学習を学ぶ

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
ad. 価格範囲を指定して商品を探せます

データのクリーニングと整形

データのクリーニングと整形は、機械学習プロジェクトにおけるデータ前処理の重要なステップです。生データには欠損値や異常値、重複データ、形式の不一致などが含まれていることが多く、そのままではモデルの性能低下につながる場合があります。データを適切に整理し、分析や学習に適した状態へ変換することで、より信頼性の高いモデルを構築できます。

データクリーニングと整形を図で理解する

データクリーニングと整形を図で理解する

データのクリーニングとは

データクリーニングは、データセットからノイズや異常値を取り除いたり、欠損値を処理したり、フォーマットを整えたりする作業です。この工程によってデータ品質が向上し、機械学習モデルの精度向上につながります。

データのクリーニングの主な作業

  • 欠損値の処理: 欠損データの削除や補完を行う
  • 異常値の処理: 外れ値を検出し、削除または補正する
  • データ型の変換: 数値や日付など適切な形式へ変換する
  • 重複データの削除: 同一レコードを除去する

欠損値の処理

欠損値は、データが入力されていない状態を表します。欠損値が多いと分析結果やモデル学習に悪影響を与えるため、削除や補完による処理が必要です。

欠損データの削除と補完

import pandas as pd

# サンプルデータの作成
data = {'col1': [1, 2, None], 'col2': [4, None, 6], 'col3': [None, 8, 9]}
df = pd.DataFrame(data)

# 欠損データの削除
df_cleaned = df.dropna()

# 欠損データを平均値で補完
df_filled = df.fillna(df.mean())

print(df_cleaned)
print(df_filled)

このコードでは、dropna()で欠損値を含む行を削除し、fillna()で欠損値を平均値で補完しています。

異常値の処理

異常値は、他のデータから大きく外れた値です。測定ミスや入力ミスによって発生することがあり、モデルの学習結果に悪影響を与える場合があります。

異常値の検出と除去

# 基本統計量を確認
print(df.describe())

# 例として3以上の値を除外
df_no_outliers = df[df['col1'] < 3]

print(df_no_outliers)

この例では、統計情報を確認した上で条件を指定し、異常値を除外しています。

データ型の変換

数値が文字列として保存されている場合など、適切なデータ型へ変換する必要があります。正しいデータ型にすることで計算や分析が正しく行えるようになります。

データ型変換の例

# サンプルデータ
data = {'col1': ['1', '2', '3'], 'col2': ['4.0', '5.0', '6.0']}
df = pd.DataFrame(data)

# 数値型へ変換
df['col1'] = pd.to_numeric(df['col1'], downcast='integer')
df['col2'] = pd.to_numeric(df['col2'], downcast='float')

print(df.dtypes)

pd.to_numeric()を使用すると、文字列として保存された数値を適切な数値型へ変換できます。

重複データの削除

同じデータが複数回登録されている場合、分析結果に偏りが生じることがあります。そのため、重複データを削除してデータ品質を維持します。

重複データの削除例

# 重複データの作成
df = pd.DataFrame({
    'col1': [1, 2, 2, 3],
    'col2': ['A', 'B', 'B', 'C']
})

df_unique = df.drop_duplicates()

print(df_unique)

drop_duplicates()を利用することで、重複行を簡単に削除できます。

データの整形とは

データ整形は、分析や機械学習モデルで利用しやすい形へ変換する作業です。クリーニング後のデータに対して、特徴量として利用しやすい形式へ加工します。

主な整形処理

  • 列や行の並び替え: データを扱いやすい順序へ整理
  • カテゴリ変数のエンコード: 文字列データを数値へ変換
  • 正規化・標準化: 特徴量のスケールを統一

カテゴリ変数のエンコード

機械学習モデルは文字列を直接扱えないことが多いため、カテゴリデータを数値へ変換します。

ダミー変数化の例

# カテゴリ変数
df = pd.DataFrame({
    'col1': ['A', 'B', 'A', 'C']
})

df_encoded = pd.get_dummies(df, columns=['col1'])

print(df_encoded)

この例では、カテゴリ値を複数の列に分割して数値化しています。

データの正規化

特徴量ごとの値の範囲が大きく異なる場合は、スケールを揃えるために正規化を行います。

正規化の例

from sklearn.preprocessing import MinMaxScaler

# サンプルデータ
data = {'col1': [1, 2, 3], 'col2': [10, 20, 30]}
df = pd.DataFrame(data)

# 正規化
scaler = MinMaxScaler()
df_scaled = pd.DataFrame(
    scaler.fit_transform(df),
    columns=df.columns
)

print(df_scaled)

このコードでは、各列の値を0〜1の範囲へ変換しています。

データクリーニングと整形が重要な理由

処理 目的
欠損値処理 学習時のエラーや精度低下を防ぐ
異常値処理 予測結果への悪影響を抑える
データ型変換 計算や分析を正しく行う
重複削除 データの偏りを防ぐ
エンコード カテゴリデータを学習可能にする
正規化 特徴量のスケールを統一する