Shikata Ga Nai

Private? There is no such things.

第28回:無効なデータ・形式ミスマッチの扱い方

Hello there, ('ω')ノ

データ分析において、よくある困りごとの一つが「見た目は合ってるのに、中身がヘン!」という問題です。 たとえばこんな経験、ありませんか?

  • 「日付」と思ったら文字列だった
  • 「数値」と思ったら“十”とか“0円”が混じっていた
  • 「男性/女性」欄に“女”“女子”“M”“1”などバラバラな表記がある

こういった「形式ミスマッチ」や「無効なデータ」があると、 正しく集計できなかったり、集計エラーや予測ミスの原因になります。


✅ まず知っておきたい:無効データ・形式ミスマッチとは?

用語 内容
無効なデータ 本来ありえない値 年齢「999歳」や売上「-100円」など
形式ミスマッチ 型(データの形式)が異なる 日付なのに文字列、数字の列に「円」などが混入

🧪 よくある形式ミスマッチの例

項目 本来の形式 よくある間違い
日付 2025-06-01 "6月1日", "01/06", "6/1/25"(文字列扱い)
数値 1000 "1,000", "一千", "千円", "-"(空欄)
性別 男/女 M/F、1/0、男性/女子、空白
メール ○○@example.com "なし", "test@", 空欄, 電話番号が入っている

🔍 発見のコツ:データの型チェック

① Excelで型を調べる

  • =ISTEXT(A1) → 文字列かどうか
  • =ISNUMBER(A1) → 数値かどうか
  • =ISERROR(A1) → エラー値(#DIV/0!など)

② SQLで型の確認や抽出

SELECT * FROM users
WHERE ISNUMERIC(age) = 0;

※使用するDBによっては関数名が異なることも(例:TRY_CAST, ISDATE など)


🧹 データクリーニングの実践方法

🔸 ① 数値から記号や単位を取り除く

Excelの場合:

  • 「置換」機能で「円」や「,」を削除
  • 数値の列に "--""N/A" が入っている場合は =IFERROR(VALUE(A1), "") などで対応

SQLの場合:

SELECT CAST(REPLACE(price, '', '') AS INTEGER) FROM sales;

🔸 ② 曖昧なカテゴリを統一する(マッピング)

例:性別の表記ゆれを統一する(Excel or SQL)

元の値 変換後
M, 男, 男性, 1 男性
F, 女, 女子, 0 女性
空白, 不明, その他 不明

→ Excelなら IF 関数や VLOOKUP → SQLなら CASE WHEN で変換できます:

SELECT
  CASE
    WHEN gender IN ('M', '', '男性', '1') THEN '男性'
    WHEN gender IN ('F', '', '女子', '0') THEN '女性'
    ELSE '不明'
  END AS gender_cleaned
FROM users;

🔸 ③ 異常値を検出する(例:年齢が0歳未満や150歳以上)

SELECT * FROM users WHERE age < 0 OR age > 120;

→ 明らかに「あり得ない値」は除外 or 確認が必要です。


⚠️ 形式ミスマッチが起きる主な原因

原因 説明
入力時の自由記述 人が手入力するフォームはゆれが出やすい
単位付きの文字列 「円」「cm」などがデータに含まれる
自動変換 Excelが日付と認識して勝手に変換する
システム間のデータ形式違い Aシステムでは「1」、Bシステムでは「男」など

🧠 データクレンジングの考え方

ステップ やること
① 発見 フィルタや型チェックで異常値・ゆれを探す
② 分類 無効データか、形式ゆれかを見極める
③ 修正 数値・日付に変換、カテゴリ統一など
④ 再確認 処理後にエラーが出ていないか確認する

✅ まとめ:形式が違えば“分析不能”になる!

ポイント 内容
データの見た目にだまされない 数字や日付でも実は文字列のことがある
統一ルールを決める 特にカテゴリ項目(性別・職種・都道府県など)は要注意
自動チェック仕組み化が理想 入力ルールの定義やバリデーション設計も視野に

Best regards, (^^ゞ