【Pandas】データクリーニングでよく使う10のテクニック

Pandasデータクリーニング10のテクニック Pandas
Pandasデータクリーニング10のテクニック
この記事は約13分で読めます。

こんにちは、JS2IIUです。
データ分析や機械学習の精度を高めるためには、「データクリーニング(前処理)」が欠かせません。どんなに高度なモデルを使っても、入力データが汚れていれば結果は信頼できません。

本記事では、Pythonの代表的なデータ処理ライブラリである Pandas を使って、実務でも頻繁に使われる10個のデータクリーニングテクニックを解説します。実際に動作するサンプルコードを通して、「なぜ」「どのように」使うのかを理解していきましょう。今回もよろしくお願いします。

1. データクリーニングとは何か

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

「誤った・欠けた・不整合のあるデータを修正・整形し、分析可能な状態にする」
というプロセスです。

例えば、次のような問題が現実のデータにはよく含まれます:

  • 一部の値が欠損している
  • 数値データに文字列が混じっている
  • 同じ行が重複している
  • カテゴリ値の表記ゆれ(”Male” と “male” など)

これらを放置すると、機械学習モデルの性能が大幅に低下することがあります。
そのため、Pandasを使って適切にデータを整形することが重要です。

2. Pandasで使える10のデータクリーニングテクニック

以下では、代表的な10のテクニックを順番に紹介します。
実際にPythonコードを試しながら進めてみましょう。

2.1 欠損値(NaN)の確認と処理

Python
import pandas as pd

df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', None],
    'age': [25, None, 30, 22],
    'city': ['Tokyo', 'Osaka', None, 'Nagoya']
})

# 欠損値の確認
print(df.isna().sum())

# 平均値で補完
df['age'] = df['age'].fillna(df['age'].mean())

# 欠損行を削除
df = df.dropna(subset=['name'])
print(df)

解説:
isna().sum() で列ごとの欠損数を確認できます。
fillna() では平均値・中央値などを使って補完が可能です。
一方、dropna() は欠損行を削除する場合に使います。

2.2 データ型の変換(astype)

Python
df['age'] = df['age'].astype(int)
df['date'] = pd.to_datetime(['2023-01-01', '2023-02-01', '2023-03-01', '2023-04-01'])
print(df.dtypes)

型変換を行うことで、分析・機械学習モデルが正しく処理できる形式に整えます。

2.3 重複データの検出と削除

Python
df = pd.DataFrame({
    'id': [1, 2, 2, 3],
    'name': ['Alice', 'Bob', 'Bob', 'Charlie']
})
df = df.drop_duplicates()
print(df)

重複を削除することで、学習データのバイアスを防ぎます。

2.4 外れ値の検出と処理(IQR法)

Python
import numpy as np
df = pd.DataFrame({'value': [10, 12, 13, 14, 100, 15, 13]})

Q1 = df['value'].quantile(0.25)
Q3 = df['value'].quantile(0.75)
IQR = Q3 - Q1

filtered_df = df[(df['value'] >= Q1 - 1.5*IQR) & (df['value'] <= Q3 + 1.5*IQR)]
print(filtered_df)

IQR法 は、データのばらつきに基づいて外れ値を自動的に除外できます。

2.5 カテゴリ変数の処理

Python
df = pd.DataFrame({'city': ['Tokyo', 'Osaka', 'Nagoya']})
encoded = pd.get_dummies(df, columns=['city'])
print(encoded)

ワンホットエンコーディングにより、カテゴリデータを数値化して機械学習モデルに入力できます。

2.6 文字列データのクレンジング

Python
df = pd.DataFrame({'name': [' Alice ', 'bob ', 'CHARLIE']})
df['name'] = df['name'].str.strip().str.lower().str.capitalize()
print(df)

str アクセサを使えば、列全体の文字列整形を簡単に行えます。

2.7 列名・行名の整理

Python
df = pd.DataFrame({'Full Name': ['Alice', 'Bob']})
df = df.rename(columns={'Full Name': 'full_name'})
print(df)

列名を一貫した命名に統一することで、後工程でのミスを減らせます。

2.8 条件フィルタリングの効率化

Python
df = pd.DataFrame({'age': [18, 25, 30, 45]})
filtered = df.query('age >= 25 and age <= 40')
print(filtered)

query() は、複雑な条件でも読みやすく記述できる便利なメソッドです。

2.9 日付データの整形と抽出

Python
df = pd.DataFrame({'date': pd.to_datetime(['2024-01-01', '2024-02-15', '2024-03-30'])})
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['weekday'] = df['date'].dt.day_name()
print(df)

日付データを分解することで、季節性や曜日パターンなどの特徴量を作成できます。

2.10 スケーリング・標準化

Python
from sklearn.preprocessing import StandardScaler
df = pd.DataFrame({'height': [150, 160, 170, 180]})
scaler = StandardScaler()
df['height_scaled'] = scaler.fit_transform(df[['height']])
print(df)

特徴量のスケールを統一することで、学習アルゴリズムが安定します。

コラム:データクリーニングとデータクレンジングの違い

「データクリーニング」と「データクレンジング」は似た言葉ですが、実務では微妙に意味が異なります。

観点データクリーニングデータクレンジング
主な目的技術的にデータを整形意味的にデータを正す
主な利用分野データ分析・機械学習CRM・業務データ管理
処理対象欠損値・型・フォーマット顧客名・住所・メールなど
視点アルゴリズムが理解できるか人間が正しいと判断できるか
実施者データサイエンティストデータ管理者・業務担当者

例で考えると

nameageemailcity
TARO Yamada25taro@exampleTokoy
山田太郎NaNyamada@example.comTokyo
  • データクリーニング:
    • NaN の補完
    • city の typo 修正(”Tokoy” → “Tokyo”)
    • age の型変換
  • データクレンジング:
    • 「TARO Yamada」と「山田太郎」を同一人物として統合
    • 無効なメールアドレスの削除

つまり、

クリーニングは「機械が扱いやすい形に整える
クレンジングは「人間が信頼できるデータにする

という違いがあります。

3. 応用例:実務でのクリーニングワークフロー

Python
df = (pd.read_csv('data.csv')
      .drop_duplicates()
      .fillna({'age': 0})
      .assign(age=lambda x: x['age'].astype(int))
      .query('age > 18')
     )
print(df.head())

このように複数の手法をメソッドチェーンで組み合わせると、
可読性が高く再利用しやすい前処理パイプラインを構築できます。

4. まとめ

データクリーニングは、単なる前準備ではなく分析品質を左右する核心工程です。
今回紹介した10のテクニックを使いこなせば、Pandasで実務レベルの前処理ができるようになります。

テクニック概要
欠損値処理fillna, dropna
型変換astype, to_datetime
重複削除drop_duplicates
外れ値処理IQR法
カテゴリ変数get_dummies
文字列整形str アクセサ
列名整理rename
条件抽出query
日付整形dt アクセサ
スケーリングStandardScaler

参考リンク

最後まで読んでいただきありがとうございました。

コメント

タイトルとURLをコピーしました