Shikata Ga Nai

Private? There is no such things.

第27回:欠損値(NULL)の3タイプと対処法

Hello there, ('ω')ノ

データ分析やレポート作成をしていると、必ず出会うのが 「空欄」や「値が入っていない」という問題。 この状態のデータは、「欠損値(けっそんち)」と呼ばれ、SQLやExcelでは NULL(ヌル) という特別な値で表現されます。

放っておくと平均値や件数などの集計が正しく出なかったり、分析モデルがうまく動かないことも…。


✅ 欠損値(NULL)とは?

「そのデータ項目に何も値が入力されていない状態」です。 たとえば以下のようなケース:

顧客名 年齢 メールアドレス
山田太郎 30 yamada@example.com
佐藤花子 NULL sato@example.com
鈴木一郎 25 NULL

▶ 年齢やメールアドレスが入っていない=NULLという状態です。


🔍 欠損値が生じる「3つの理由タイプ」

欠損値には、意味の異なる3つのタイプがあります。 これを知っておくと、対処法を間違えずに済むようになります。


入力ミス・抜け落ちタイプ(うっかりタイプ)

  • フォーム入力忘れ
  • データ収集時のエラー
  • システムバグなど

🔧 対処法: ➡ データを再確認して入力し直すか、過去の履歴から補完する


該当なし・意味がないタイプ(存在しないタイプ)

  • 退職者の「部署名」
  • 未婚の人の「結婚記念日」
  • 法人の「生年月日」など

🔧 対処法: ➡ 無理に埋めない!「該当なし(N/A)」として処理するのが基本 ※ 無理に0や平均を入れると誤解を招く


将来的に入る予定タイプ(未確定タイプ)

  • 商品の出荷予定日(まだ未定)
  • 未入力のアンケート結果
  • 今後入力されるコメント欄など

🔧 対処法: ➡ そのまま欠損として残しておき、更新を待つ ただし、集計時には「今はNULL」を考慮した処理が必要


🧮 SQLでNULLを扱う方法

🔸 NULLを見つける

SELECT * FROM customers WHERE email IS NULL;

→ メールアドレスが未入力の顧客を抽出します。

🔸 NULLでないものだけ取り出す

SELECT * FROM customers WHERE age IS NOT NULL;

🔸 欠損値に代わりの値を入れる(COALESCE関数)

SELECT name, COALESCE(email, '未登録') AS email_display
FROM customers;

→ メールがNULLなら「未登録」と表示させる。ExcelのIF関数に似た考え方です。


📊 ExcelでのNULL対応(空白セル)

目的 対応方法
空白セルを数える =COUNTBLANK(範囲)
空白を「なし」などに置き換える フィルター + 置換 or =IF(A1="", "なし", A1)
空白を平均で埋める =IF(A1="", 平均値, A1) などを使う

🧠 欠損を埋めるときの3つの考え方

方法 説明 向いている場面
平均値・中央値で埋める 他の値から代表値を使う 年齢や金額などの数値データ
最頻値(モード)で埋める 一番多い値を使う カテゴリ(例:性別、都道府県)
フラグを立てる NULLの有無を別列で記録 モデル分析や欠損の傾向分析に便利

⚠️ NULLに関する注意点

注意点 内容
NULLと0や空文字は別物 NULL ≠ 0NULL ≠ ''(空文字)
集計での扱いに注意 AVG()COUNT()はNULLを自動で除外することがある
条件式では思わぬ結果になる = NULL ではなく IS NULL を使うこと!

✅ まとめ:NULLは“無視してはいけない”大事なサイン

ポイント 内容
欠損には意味がある 単なるミスか、意味のある空欄かを見極めよう
対処法は目的次第 分析用か帳票用かで対応が変わる
NULLを検出・処理する技術は必須 SQLやExcelでもすぐに対応できる知識を身につけよう

Best regards, (^^ゞ