データクレンジング

英語名 Data Cleaning
読み方 データ クリーニング
難易度
所要時間 1〜4時間
提唱者 データベース管理・統計学の実務から発展
目次

ひとことで言うと
#

分析に使うデータから欠損値・重複・表記ゆれ・異常値を見つけ出して修正し、正しい分析ができる状態にするプロセス。「Garbage In, Garbage Out(ゴミを入れればゴミが出る)」を防ぐための、データ分析の最も重要な土台。

押さえておきたい用語
#

押さえておきたい用語
欠損値(Missing Value)
データが入っていない空のセルやNULL値のこと。ランダムな欠損と系統的な欠損があり、対処法が異なる。
表記ゆれ(Inconsistency)
同じものを指すデータが異なる表記で記録されている状態のこと。「(株)ABC」と「株式会社ABC」、「東京都」と「東京」など。
異常値(Anomaly)
明らかに通常の範囲から外れた値のこと。入力ミスの場合もあれば、実際の外れ値の場合もあるため、一律に除外せず原因を確認する。
マッピング表(Mapping Table)
表記ゆれを統一するための変換ルールを一覧にした対応表のこと。手動修正より一括変換が正確で効率的。

データクレンジングの全体像
#

データクレンジング:問題を発見→分類→修正→検証の4ステップ
1. データの健康診断件数・欠損率・型・基本統計量を確認して全体像を把握df.describe() / COUNTBLANK2. 問題の分類欠損値 / 重複 / 不整合 / 異常値の4カテゴリに振り分ける3. ルールに基づく修正一貫したルールで修正する修正ルールをドキュメントに残す元データは必ずバックアップ4. 結果の検証修正前後の件数・統計量を比較ビジネスロジックとの整合確認定期化・自動化データは日々汚れる → 継続的なチェック体制
データクレンジングの進め方フロー
1
健康診断
欠損率・型・統計量を確認
2
問題を分類
欠損・重複・不整合・異常値
3
ルールで修正
一貫したルール+記録を残す
検証→定期化
前後比較し自動チェックへ

こんな悩みに効く
#

  • 分析結果がどうもおかしいが、どこが間違っているかわからない
  • 顧客データに重複が大量にあり、正確な顧客数すら把握できない
  • 部署ごとにデータの形式がバラバラで、統合できない

基本の使い方
#

ステップ1: データの全体像を把握する

いきなり修正に入る前に、データの健康診断を行う。

チェック項目:

  • 件数: 想定通りのレコード数か
  • 欠損率: 各カラムの欠損値の割合
  • 型の確認: 数値が文字列として入っていないか
  • 基本統計量: 平均・最大・最小・中央値に異常はないか

ポイント: Excelなら COUNTBLANKCOUNTIF 、Pythonなら df.describe()df.isnull().sum() で簡単に確認できる。

ステップ2: 問題のパターンを分類する

発見した問題を4つのカテゴリに分類する。

  1. 欠損値: データが入っていないセル
  2. 重複: 同じレコードが複数存在する
  3. 不整合: 表記ゆれ(「東京都」と「東京」、「(株)」と「株式会社」)
  4. 異常値: 明らかにおかしい値(年齢が200歳、売上がマイナスなど)

ポイント: 問題の種類によって対処法が異なるので、まず分類してから修正に取りかかる。

ステップ3: ルールに基づいて修正する

各問題に対して一貫したルールで修正する。

  • 欠損値: 削除する/平均値で補完する/「不明」フラグを立てる
  • 重複: 最新のレコードを残して他を削除する
  • 不整合: 変換テーブル(マッピング表)を作り、一括で統一する
  • 異常値: 値の範囲を定義し、範囲外のデータを除外またはフラグを立てる

ポイント: 修正ルールをドキュメントに残すこと。後から「なぜこう修正したか」を追跡できるようにする。

ステップ4: クレンジング結果を検証する

修正後のデータが正しくなっているか検証する

  • 修正前後の件数を比較(意図しない削除がないか)
  • 基本統計量の再確認(平均値が極端に変わっていないか)
  • サンプルチェック(ランダムに数件を目視確認)
  • ビジネスロジックとの整合性確認(売上 = 単価 × 数量 が成り立つか)

ポイント: クレンジング前のデータは必ずバックアップを取っておく。元に戻せなくなるのが最悪のパターン。

具体例
#

例1:営業部門とマーケ部門の顧客データ25,000件を統合する

状況: 営業部門とマーケティング部門で別々に管理していた顧客データを統合する。見かけ上25,000件の顧客レコード。

発見した問題:

問題の種類件数
重複レコード1,200件同一顧客が「山田太郎」「ヤマダ タロウ」で2件登録
表記ゆれ3,500件「(株)ABC」「株式会社ABC」「ABC株式会社」
欠損値800件メールアドレスが空欄
異常値50件電話番号が桁数不足、住所に「テスト」

クレンジングの手順:

  1. 会社名の正規化テーブルを作成し、一括変換
  2. 氏名+電話番号をキーにして重複を検出・統合
  3. メールアドレスの欠損はフラグを立てて営業に確認依頼
  4. テストデータと判断できるレコードは削除

**結果: 顧客数が「25,000件」から実際は「18,300件」と判明。**正確な顧客数に基づいてセグメント分析ができるようになり、マーケティング施策のターゲティング精度が大幅に向上。メール配信のバウンス率が12%→2%に改善。

例2:ECサイトが売上データの異常値を修正し、正確な月次レポートを実現する

状況: 月商5億円のECサイト。月次売上レポートの数字が経理部の数字と毎月ずれており、原因を追跡。

データの健康診断結果:

  • 売上テーブル: 120万レコード/月
  • 異常値: 単価が0円のレコードが月平均350件(テスト購入が混入)
  • 異常値: 単価が100万円超のレコードが月平均15件(入力ミス)
  • 重複: 同一注文IDで2件登録されているケースが月平均80件(決済システムの二重送信)

修正ルール:

  1. 単価0円: テストフラグを立て、集計から除外
  2. 単価100万円超: 手動で正しい金額を確認・修正
  3. 重複注文: 注文ID+タイムスタンプで判定し、後のレコードを削除

**結果: 月次売上の誤差が平均2.3%→0.1%に改善。**経理部との数字一致にかかっていた確認作業(月15時間)がほぼゼロに。年間で約180時間の工数削減。

例3:医療機関が患者データの欠損値対策で診療分析の精度を向上させる

状況: 中規模病院(年間外来患者8万人)。診療データの分析で「特定の検査値が欠損しているレコードを除外」していた結果、分析対象が半分以下に減り、統計的信頼性が低下。

欠損パターンの分析:

  • 血液検査値: 欠損率35%(検査を受けていない患者 → 系統的欠損)
  • 問診データ: 欠損率8%(入力忘れ → ランダム欠損)
  • 紹介元情報: 欠損率22%(初診時に未記入 → 系統的欠損)

対処法の使い分け:

  1. 血液検査値: 「検査未実施」フラグを追加し、分析時に検査あり/なしのサブグループに分ける
  2. 問診データ: 中央値で補完(ランダム欠損のため統計的に妥当)
  3. 紹介元情報: 「不明」カテゴリを新設し、受付フローに入力チェックを追加

**結果: 分析対象レコードが45%→92%に回復し、統計的検出力が大幅に向上。**欠損値の原因別対策により、翌年の問診データ欠損率が8%→2%に改善。

やりがちな失敗パターン
#

  1. 欠損値をすべて削除してしまう — 欠損値のあるレコードを一律に削除すると、データが偏る可能性がある。欠損のパターン(ランダムか系統的か)を確認してから対処法を選ぶ
  2. 元データを直接書き換える — クレンジング済みデータに問題が見つかったとき、元に戻せなくなる。元データは必ず保存し、クレンジング後のデータは別ファイルとして管理する
  3. 一度きりのイベントとして扱う — データは日々汚れていく。クレンジングを一回やって終わりにせず、定期的なチェックと自動化の仕組みを作ることが重要
  4. 修正ルールを記録しない — 後から「なぜこの値が変わっているのか」を追跡できなくなる。すべての修正ルールと適用結果をドキュメントに残し、再現可能にする

まとめ
#

データクレンジングは、分析の精度と信頼性を確保するための土台。欠損値・重複・表記ゆれ・異常値を見つけて修正するプロセスを体系化することで、「データに基づいた意思決定」が本当の意味で可能になる。まずは手元のデータの欠損率と重複件数を調べるところから始めよう。