顧客データはサンプルデータのような顔をしていない
一言でいうと
データクレンジングで本当の決定は、どのツールを使うかではなく、何を捨てるかの基準を誰が決めるかです。
なぜ必要なのか
チュートリアルのCSVは、列の数が一定で、空欄がなく、数値の列には数値だけが入っています。顧客が渡すCSVはそうではありません。
実際に出会うものを挙げると、次のとおりです。フィールドが1つ足りない行。顧客名が空の行。金額の列にN/Aや-が入った行。負の金額。前後に空白が付いた名前。同じ会社がMOONSHOPとmoonshopの2通りで入ってきたもの。同じ注文番号が2回出てきて、片方は日付の形式だけが違うもの。そして、2026-08-20、2026/08/20、08/20/2026が1つのファイルに混ざっているもの。
ここで初心者がする間違いは、すぐにクレンジングスクリプトを書き始めることです。そうすると、必ず2つのことが起こります。1つ目に、スクリプトが静かにデータを消します。2つ目に、顧客があとで「なぜうちの売上はこれしかないのですか」と尋ねます。
どう動くのか
順序は数える → 分類する → 合意する → クレンジングするです。
まず数えます。全体の何行のうち、何行がルールに違反しているかです。この数字がなければ、クレンジング結果が正しいかどうかを判定できません。226行のうち5行が壊れているのと、226行のうち180行が壊れているのは、まったく違う状況で、後者なら、クレンジングではなくデータ抽出そのものをやり直さなければなりません。
次に分類します。壊れた理由を種類別に分けます。構造の問題(フィールド数)、欠損(空の値)、型の問題(数値の位置に文字)、範囲の問題(負の値・非現実的な値)、重複です。この分類が重要なのは、種類ごとに処理方針が違うからです。フィールド数が合わない行はたいてい捨てなければなりませんが、顧客名が空の行は、捨てることも、미상(韓国語で「不明」を意味する語です)で埋めることもできます。その決定は、エンジニアではなく業務担当者が行います。
その次が合意です。ここがFDEの仕事です。「金額が負の行4件は返金に見えますが、今回の集計から除外しますか、別に数えますか」という質問を投げることです。この質問をしなければ、あとで数字が合わないときに、説明する根拠がありません。
最後がクレンジングです。そして、クレンジングスクリプトは、必ず捨てた行の数を出力しなければなりません。静かに消すスクリプトは時限爆弾です。
現場での姿
重複の除去で最もよく起こる事故を1つ紹介します。
「メールアドレスが同じなら重複なので、1つだけ残す」というルールで、グループ化して整理するコードがあります。ほとんどの場合、うまく動きます。ところが、メールアドレスが空の行があると、それらがすべて1つのグループにまとめられて、互いに別の顧客なのに1人しか残らず、残りはすべて削除されます。
同じ落とし穴が名前の正規化にもあります。前後の空白を取り除いて小文字に変えるのは良い習慣ですが、そうすると、kimcoffeeとkimcoffee31のように、もともと別の2人の顧客が似て見え始めます。正規化は比較のためのものであって、マージの根拠ではありません。
そこで実務のルールを1つ。重複判定のキーに欠損が入りうるなら、欠損の行は重複判定から完全に外して、別に数えます。
クレンジング結果をどう証明するのか
クレンジングが終わったことを何で示すかが、実際の業務の半分です。「実行しました」だけでは、誰もその数字を使えません。そのため、クレンジングスクリプトは、結果のデータと一緒に、何があったかを書いたレポートを出す必要があります。
最低限、この5行は必要です。
- 入力の行数と出力の行数、そしてその差
- 捨てた行を理由別に分けた件数
- 値を直した行の件数(空白の除去、大文字小文字の統一、日付形式の統一)
- 重複としてまとめた件数と、そのとき何を残したか
- 合計のように、業務が実際に使う数字の、クレンジング前後の値
最後の行が特に重要です。行数が2%減ったのに売上合計が30%減ったなら、それはクレンジングではなく事故です。大きな取引が数件、除外されたという意味で、そうした行ほど形式が特殊である可能性が高いからです。行数だけを見ていると、これを見逃します。
元に戻せるようにすることも重要です。原本を上書きせず、捨てた行は消す代わりに別のファイルに残します。そうすれば、あとで「この注文はなぜ集計にないのですか」という質問に、数秒で答えられます。捨てた行のファイルには、原本の行番号も一緒に書いておくとよいです。顧客が自分のファイルでその行を直接開いて見られれば、会話が速くなります。
最後に、ルールはコードではなく文書とコードの両方に同じ言葉で書かれている必要があります。クレンジングのルールがコードにしかなければ、数か月後に誰もそれを知らず、新しい担当者が別のルールで作り直します。そのときから、同じ原本から2つの違う数字が出始め、その2つのうちどちらが正しいかを判定する根拠が消えます。
文書には、ルールごとにそれを決めた人と日付を一緒に書いておきます。あとでルールを変えてよいかを尋ねる相手がその行に書かれていれば、新しく来た人が1人で判断して済ませてしまうことがなくなります。
次のラボですること
25行の注文CSVから、壊れた行をルールどおりに取り除き、捨てた行の数を数え、クレンジング結果の合計と日付別の集計まで作ります。規模は小さいですが、種類は現場そのままです。