ひとことで言うと#
分析に使うデータから欠損値・重複・表記ゆれ・異常値を見つけ出して修正し、正しい分析ができる状態にするプロセス。「Garbage In, Garbage Out(ゴミを入れればゴミが出る)」を防ぐための、データ分析の最も重要な土台。
押さえておきたい用語#
- 欠損値(Missing Value)
- データが入っていない空のセルやNULL値のこと。ランダムな欠損と系統的な欠損があり、対処法が異なる。
- 表記ゆれ(Inconsistency)
- 同じものを指すデータが異なる表記で記録されている状態のこと。「(株)ABC」と「株式会社ABC」、「東京都」と「東京」など。
- 異常値(Anomaly)
- 明らかに通常の範囲から外れた値のこと。入力ミスの場合もあれば、実際の外れ値の場合もあるため、一律に除外せず原因を確認する。
- マッピング表(Mapping Table)
- 表記ゆれを統一するための変換ルールを一覧にした対応表のこと。手動修正より一括変換が正確で効率的。
データクレンジングの全体像#
こんな悩みに効く#
- 分析結果がどうもおかしいが、どこが間違っているかわからない
- 顧客データに重複が大量にあり、正確な顧客数すら把握できない
- 部署ごとにデータの形式がバラバラで、統合できない
基本の使い方#
いきなり修正に入る前に、データの健康診断を行う。
チェック項目:
- 件数: 想定通りのレコード数か
- 欠損率: 各カラムの欠損値の割合
- 型の確認: 数値が文字列として入っていないか
- 基本統計量: 平均・最大・最小・中央値に異常はないか
ポイント: Excelなら COUNTBLANK や COUNTIF 、Pythonなら df.describe() や df.isnull().sum() で簡単に確認できる。
発見した問題を4つのカテゴリに分類する。
- 欠損値: データが入っていないセル
- 重複: 同じレコードが複数存在する
- 不整合: 表記ゆれ(「東京都」と「東京」、「(株)」と「株式会社」)
- 異常値: 明らかにおかしい値(年齢が200歳、売上がマイナスなど)
ポイント: 問題の種類によって対処法が異なるので、まず分類してから修正に取りかかる。
各問題に対して一貫したルールで修正する。
- 欠損値: 削除する/平均値で補完する/「不明」フラグを立てる
- 重複: 最新のレコードを残して他を削除する
- 不整合: 変換テーブル(マッピング表)を作り、一括で統一する
- 異常値: 値の範囲を定義し、範囲外のデータを除外またはフラグを立てる
ポイント: 修正ルールをドキュメントに残すこと。後から「なぜこう修正したか」を追跡できるようにする。
修正後のデータが正しくなっているか検証する。
- 修正前後の件数を比較(意図しない削除がないか)
- 基本統計量の再確認(平均値が極端に変わっていないか)
- サンプルチェック(ランダムに数件を目視確認)
- ビジネスロジックとの整合性確認(売上 = 単価 × 数量 が成り立つか)
ポイント: クレンジング前のデータは必ずバックアップを取っておく。元に戻せなくなるのが最悪のパターン。
具体例#
状況: 営業部門とマーケティング部門で別々に管理していた顧客データを統合する。見かけ上25,000件の顧客レコード。
発見した問題:
| 問題の種類 | 件数 | 例 |
|---|---|---|
| 重複レコード | 1,200件 | 同一顧客が「山田太郎」「ヤマダ タロウ」で2件登録 |
| 表記ゆれ | 3,500件 | 「(株)ABC」「株式会社ABC」「ABC株式会社」 |
| 欠損値 | 800件 | メールアドレスが空欄 |
| 異常値 | 50件 | 電話番号が桁数不足、住所に「テスト」 |
クレンジングの手順:
- 会社名の正規化テーブルを作成し、一括変換
- 氏名+電話番号をキーにして重複を検出・統合
- メールアドレスの欠損はフラグを立てて営業に確認依頼
- テストデータと判断できるレコードは削除
**結果: 顧客数が「25,000件」から実際は「18,300件」と判明。**正確な顧客数に基づいてセグメント分析ができるようになり、マーケティング施策のターゲティング精度が大幅に向上。メール配信のバウンス率が12%→2%に改善。
状況: 月商5億円のECサイト。月次売上レポートの数字が経理部の数字と毎月ずれており、原因を追跡。
データの健康診断結果:
- 売上テーブル: 120万レコード/月
- 異常値: 単価が0円のレコードが月平均350件(テスト購入が混入)
- 異常値: 単価が100万円超のレコードが月平均15件(入力ミス)
- 重複: 同一注文IDで2件登録されているケースが月平均80件(決済システムの二重送信)
修正ルール:
- 単価0円: テストフラグを立て、集計から除外
- 単価100万円超: 手動で正しい金額を確認・修正
- 重複注文: 注文ID+タイムスタンプで判定し、後のレコードを削除
**結果: 月次売上の誤差が平均2.3%→0.1%に改善。**経理部との数字一致にかかっていた確認作業(月15時間)がほぼゼロに。年間で約180時間の工数削減。
状況: 中規模病院(年間外来患者8万人)。診療データの分析で「特定の検査値が欠損しているレコードを除外」していた結果、分析対象が半分以下に減り、統計的信頼性が低下。
欠損パターンの分析:
- 血液検査値: 欠損率35%(検査を受けていない患者 → 系統的欠損)
- 問診データ: 欠損率8%(入力忘れ → ランダム欠損)
- 紹介元情報: 欠損率22%(初診時に未記入 → 系統的欠損)
対処法の使い分け:
- 血液検査値: 「検査未実施」フラグを追加し、分析時に検査あり/なしのサブグループに分ける
- 問診データ: 中央値で補完(ランダム欠損のため統計的に妥当)
- 紹介元情報: 「不明」カテゴリを新設し、受付フローに入力チェックを追加
**結果: 分析対象レコードが45%→92%に回復し、統計的検出力が大幅に向上。**欠損値の原因別対策により、翌年の問診データ欠損率が8%→2%に改善。
やりがちな失敗パターン#
- 欠損値をすべて削除してしまう — 欠損値のあるレコードを一律に削除すると、データが偏る可能性がある。欠損のパターン(ランダムか系統的か)を確認してから対処法を選ぶ
- 元データを直接書き換える — クレンジング済みデータに問題が見つかったとき、元に戻せなくなる。元データは必ず保存し、クレンジング後のデータは別ファイルとして管理する
- 一度きりのイベントとして扱う — データは日々汚れていく。クレンジングを一回やって終わりにせず、定期的なチェックと自動化の仕組みを作ることが重要
- 修正ルールを記録しない — 後から「なぜこの値が変わっているのか」を追跡できなくなる。すべての修正ルールと適用結果をドキュメントに残し、再現可能にする
まとめ#
データクレンジングは、分析の精度と信頼性を確保するための土台。欠損値・重複・表記ゆれ・異常値を見つけて修正するプロセスを体系化することで、「データに基づいた意思決定」が本当の意味で可能になる。まずは手元のデータの欠損率と重複件数を調べるところから始めよう。