論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
実データ
Real Data
リテラシー

🔖 キーワード索引

この用語と一緒に検索・参照されやすいタグ。 関連ページに飛ぶときの手がかりにも使えます。

#リテラシー#実データ#公的統計#SSDSE#ノイズ

real data」は統計データ分析の文脈で扱う重要概念のひとつ。 本ページでは「real data」を取り巻く中核キーワードを以下にチップで一覧化する。 各キーワードは関連する概念・手法・道具立てを含み、 文献検索や学習計画の起点になる。

real data統計分析SSDSE-B-2026前提条件適用範囲落とし穴関連手法Python 実装検証方法

これらのキーワードは「real data の理解 → 適用 → 検証」のプロセスを構成する。 各章で詳しく解説する。

💡 30秒で分かる結論

🍰 まずはやさしく

実データは現実の世界で集めたデータです。

本当の課題を見つけるために使います。

SNSの投稿や政府の統計などが例です。

この章では実データの正体について読みます。

実データは、 現実世界で実際に観測・収集されたデータ。 教科書的な合成データ・整ったサンプルと対比される。

ここまでが要点です。 ただし実際に使う前に、 このページの「⚠️ よくある落とし穴」で挙げた 合成データの結果を実データに過信/出典・期間・単位を確認しない/欠損を無視する には必ず目を通してください。 つまずくのは知識が無いときより、 知ってはいたが確認を飛ばしたときです。

📍 文脈:「実データ」はどんな場面で出てくる?

🍰 まずはやさしく

実データは分析の主役となる道具です。

正しい答えを出すために活用します。

都道府県の統計データを扱う場面で使います。

この章では実データを使う場面を読みます。

本サイトは「合成データ禁止、 実データ必須」を方針としています。 SSDSE-B-2026 はその代表で、 47都道府県×5年×約100指標のテーブル。 ここで前処理・分析・可視化を経験することが教材の核心。

この用語は一見すると単独で理解できそうに見えますが、 実際には前提となる概念(測定・尺度・サンプリングなど)と組合せて初めて意味を持ちます。 「定義を覚える」より「どんな問いに答える道具なのか」を捉えるのが効率的です。

🎨 直感で掴む

🍰 まずはやさしく

実データは川の水のように混じり物があります。

データのクセに気づくために学びます。

数字の中にカンマが混ざっている例があります。

この章では実データの意外な正体を読みます。

「実データ」を最初に学ぶときは、 教科書の整ったサンプルデータと「現場のデータ」がどれほど違うか実感することが最初の関門です。 SSDSE-B-2026 (47 都道府県 × 108 指標) は政府統計の集計済みデータなので比較的綺麗ですが、 それでも初学者が躓く罠が複数含まれています。

💡 学習のコツ: 実データを手にしたら、 まず「出典」「取得日」「単位」「対象期間」「欠損コードの定義」の 5 点を確認する習慣を身につけよう。 SSDSE-B では code/SSDSE-2026-readme.md にこれらが整理されている。 この『最初の 5 分の儀式』を怠らないだけで、 後段の分析の信頼性が大幅に向上する。

📐 定義・数式

🍰 まずはやさしく

実データは本物の信号とノイズの集まりです。

データの正体を正確に捉えるために使います。

単位が途中で変わるなどの問題が例です。

この章では実データの定義を詳しく読みます。

直感の次は、 厳密な定義を確認します。 数式は言語の一種で、 一度書き慣れれば「言葉より速く伝えられる」便利な道具。 慣れていない方は、 各記号が何を表すかを「🔬 数式を言葉で読み解く」で 1 つずつ確認してください。

【実データに含まれる「現実の障害物」】
$$ \text{Real Data} = \text{True Signal} + \text{Noise} + \text{Missing} + \text{Outliers} + \text{Format Issues} $$
教科書では Signal だけだが、 実データには複数の妨害要因が同時に存在する。
📌 読み方のコツ:数式を見たら「左辺は何を定義しているか」「右辺の各項は何の合計・積・比か」を声に出して読み下してみる。 これだけで理解が大きく進みます。

📐 実データの落とし穴: SSDSE-B-2026 で見つかる 9 種類のクセ

「実データはクセが強い」とよく言われるが、 具体的にどんなクセが、 なぜ生じ、 どう対処するかを知っておくと、 新しいデータに出会ったときも体系的に対応できる。 ここでは SSDSE-B-2026 に実際に潜むクセを 9 種類取り上げ、 「発見方法」「原因」「対処法」「実例」をセットで提示する。 これらはどのドメイン (医療・金融・教育・マーケティング) にも共通して現れる普遍的な現象で、 SSDSE で訓練することで他の実データにも転用できる眼力が育つ。

🔍 9 種類のクセと対処法 (SSDSE-B-2026 実例つき)

#クセの名前発見方法対処法SSDSE 実例
1外れ値 (Outlier)箱ひげ図・IQR×1.5 ルール・ローカル外れ値因子対数変換・ロバスト統計・除外東京の出生数・人口
2右裾の重い分布歪度 > 1, Shapiro-Wilk 検定で正規性棄却対数変換, Box-Cox, Yeo-Johnson所得・税収・面積
3欠損 (NaN, 隠れ欠損)isnull().sum(), 「-」「N/A」「不詳」など補完 (中央値・KNN), 除外, MICE古い年度の指標
4単位の不統一列名・メタデータ確認, 範囲チェック単位を統一して再計算人口「千人」, 出生数「人」
5時系列の構造変化プロット, Chow 検定, 変化点検出期間分割, ダミー変数2011 (東日本大震災), 2020 (COVID)
6サンプリングバイアス調査方法 (悉皆/標本) の確認重み付け, 限界明示アンケート調査の有効回答率
7多重共線性VIF > 10, 相関行列 > 0.9主成分分析・Ridge・列削除人口 ≒ 世帯数 ≒ 就業者数
8疑似相関 (因果無し)第三変数 (人口) の影響, ドメイン知識交絡因子で調整, DAG 図示コンビニ数と犯罪件数 (両方人口に依存)
9分類変数のレアカテゴリvalue_counts() の末尾「その他」に統合・除外特定産業の事業所数 0 の県

📊 SSDSE-B-2026 の歪度・尖度ランキング (上位 5 指標)

順位指標歪度尖度推奨変換
1E6202 大学教員数+5.4533.35log 必須
2E6502 大学卒業者数+4.8827.93log 必須
3E650210 大学卒業者のうち進学者数+4.8627.89log 必須
4G7102 外国人延べ宿泊者数+4.8325.93log 必須
5E6302 大学学生数+4.6825.96log 必須
📝 より正確な分析: 上表は実際の SSDSE-B-2026 (2023 年・47 都道府県) から全指標の歪度を計算し、 上位 5 位を掲載したもの (skiprows=[1] で日本語ラベル行を除外して集計)。 大学関連指標が上位を占めるのは、 大学が三大都市圏に極端に集積しているため。 なお出生数 A4101 (歪度 +2.37)・総人口 A1101 (歪度 +2.29) も右裾は重いが、 上位 5 位には入らない。

SSDSE-B のように都道府県を単位とするデータでは、 「東京 1 県が全国の 1/4-1/3 を占める」という構造的偏りがほぼすべての経済指標に共通する。 これは「集積効果」や「首都機能の集中」を反映する真の特徴であり、 ノイズではないため除外すべきでない。 代わりに対数変換やロバスト統計で「歪みを吸収しつつ全データを使う」のが定石となる。

📝 実データ点検の理解度チェック (5 問) と運用習慣

最後に、 ここまでの内容が身についたかを 5 つの問いで確認しよう。 即答できれば「実データを安全に扱える」基礎が完成している。 詰まる項目があれば、 該当する節 (点検プロトコル・9 種類のクセ・歪度ランキング) に戻って復習しよう。 また、 これらを「毎回必ず実行する習慣」にすることが、 実データ分析者として最も重要な姿勢である。

🧠 理解度チェック (5 問)

  1. Q1: 実データを受け取って最初に確認すべき 3 項目は?
    A1: (1) 行数・列数 (想定通りか), (2) 各列のデータ型 (object 混入の有無), (3) 欠損率 (列ごとの NaN 割合)。 これだけで「使える/危ない」の初期判断ができる。
  2. Q2: 歪度 +2.29 のデータに線形回帰を直接適用すべきか?
    A2: NO。 残差の等分散性・正規性が成立しない可能性が高い。 まず対数変換などで歪みを縮小し、 等分散性を Breusch-Pagan 検定などで確認してから回帰する。
  3. Q3: 「欠損 (-) を 0 で埋める」はなぜ危ないか?
    A3: 「データが無い (不明)」と「実測値が 0」は意味が異なる。 0 で埋めると平均が下がり、 分散が膨らみ、 統計量がすべて歪む。 NaN のまま扱うか中央値・KNN で補完するべき。
  4. Q4: SSDSE-B で「コンビニ数と犯罪件数」に強い相関が出たら、 因果関係と結論してよいか?
    A4: NO。 両方とも人口に強く依存するため疑似相関 (spurious correlation) の可能性が高い。 人口 1 万人あたりに正規化するか、 重回帰で人口を統制してから判断する。
  5. Q5: 時系列データで「2020 年だけ値が急変」している場合、 そのまま分析してよいか?
    A5: 注意が必要。 COVID-19 の影響など外生ショックの可能性があり、 構造変化として明示するか、 ダミー変数を入れるか、 期間を分割して別モデルにする。

🛠 運用習慣 5 か条

#習慣なぜ重要か
1点検プロトコルを必ず実行最初の 30 分で罠の 80% を発見できる
2分布をプロットして眼で見る統計量だけでは見えない多峰性・打ち切りを発見
3メタデータと脚注を熟読調査方法・定義変更・限界が記載されている
4前処理を全てコード化手動 Excel 編集は再現性ゼロ。 後から検証不能
5「限界」を必ずレポートに記載完璧な前処理は存在しない。 残った限界を明示するのが誠実な分析

🐍 SSDSE-B-2026 の点検レポートを Markdown 出力する Python コード

このコードでやること: SSDSE-B-2026 から「データ健康診断レポート」を Markdown 形式で自動生成。 上司・チームに「このデータはこういう状態です」と一目で共有できる。

📥 入力データ (SSDSE-B-2026 抜粋):

SSDSE-B-2026 都道府県 A1101(総人口千人) A4101(出生数人) R01000 北海道 5092 24430 R13000 東京都 14086 86348 ... ... ... ... (47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# データ健康診断レポート自動生成
import pandas as pd
import numpy as np

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023].copy()
cols = ['A1101', 'A4101', 'A1301']

print('# SSDSE-B-2026 データ健康診断')
print(f'- 行数 × 列数: {df.shape[0]} × {df.shape[1]}')
print(f'- 欠損列数: {(df.isnull().sum() > 0).sum()}')
print('## 主要列の分布')
for c in cols:
    s = df[c].dropna()
    skew, kurt = s.skew(), s.kurt()
    flag = 'log 推奨' if skew > 1 else 'OK'
    print(f'- {c}: n={len(s)}, 歪度={skew:.2f}, 尖度={kurt:.2f}, 判定: {flag}')

📤 実行すると次の出力が得られる:

# SSDSE-B-2026 データ健康診断 - 行数 × 列数: 47 × 112 - 欠損列数: 0 ## 主要列の分布 - A1101: n=47, 歪度=2.29, 尖度=5.66, 判定: log 推奨 - A4101: n=47, 歪度=2.37, 尖度=6.02, 判定: log 推奨 - A1301: n=47, 歪度=2.14, 尖度=4.56, 判定: log 推奨

💬 結果の読み方: 主要 3 指標すべてで歪度 > 1 なので、 後段の回帰・相関分析の前に対数変換を施すのが定石。 このレポートを Slack や報告書に貼り付けるだけで、 チーム全員と「データの現状」を共有できる。 SSDSE-B-2026 のように整った官庁統計でも、 「そのまま回帰」は許されないことが視覚的に伝わる。

🎯 この節のゴール: 新しい実データを受け取ったときに、 上記 7 ステップ点検 + 9 種類のクセチェック + Markdown レポート生成を反射的に実行できる状態。 実データ分析者として「最低限の安全確認」を欠かさない習慣を身につけることが、 ここまでの内容を実務に活かす唯一の方法である。

🔬 数式を言葉で読み解く — 数式を「言葉」に翻訳

数式を眺めるだけでは身につかないので、 各記号がどんな役割を担っているかを言葉で押さえます。 「数式を音読する習慣」がつくと、 論文や教科書を読むスピードが体感で 2 倍ほど上がります。

Noise
測定誤差・確率的揺らぎ
Missing
欠損(MCAR/MAR/MNAR)
Outliers
外れ値・極端値
Format
桁区切り、 全角/半角、 単位混在
Concept Drift
時間とともに意味が変わる現象
📚 補足:同じ記号でも分野・教科書によって意味が違うことがあります(例: $\hat{y}$ は予測値だが、 統計の文脈では推定量を意味することも)。 不明確なときは、 必ずその文書の記号定義表を確認しましょう。

🔬 数式を言葉で読み解く(深掘り)

「実データ」を端的に表す関係式 $$\text{Real Data} = \text{True Signal} + \text{Noise} + \text{Missing} + \text{Outliers} + \text{Format Issues} + \text{Concept Drift}$$ を 1 項ずつ 詳細に解読していきます。 教科書の問題集に出てくる「整ったデータ」は左辺の True Signal だけが残った理想化された状態。 ですが、 SSDSE-B-2026 をはじめとする現実の実データは、 右辺の 5 つの「現実の障害物」が常に同時に存在しています。 それぞれの障害物の性質を理解することが、 データサイエンス実務の出発点です。

第 1 項 True Signal(真の信号)は、 研究者が知りたい本質的なパターン。 たとえば SSDSE-B-2026 の「都道府県別人口」であれば、 真の信号は「2023 年 10 月 1 日時点で各都道府県に居住する者の総数」というクリアな概念です。 しかし、 これを直接観測する手段はなく、 必ず何らかの観測誤差・回答漏れ・記録ミスを含む形でしか手に入りません。 実データを扱うときは「自分が今見ている数値が True Signal そのものではない」という前提を常に持つことが重要です。

第 2 項 Noise(ノイズ)は、 測定機器のゆらぎ、 回答者の気分、 集計時の四捨五入など、 多くの独立した小さな要因の集合です。 中心極限定理により、 多くのノイズは平均 0・分散一定の正規分布に近づきます。 これが線形回帰の前提仮定です。 SSDSE-B-2026 のような集計済みデータでは、 元の個票で生じたノイズが平均化され目立たなくなっていますが、 完全に消えるわけではありません。 とくに人口が少ない離島の指標(例: 沖縄の小規模島嶼)はノイズが目立ちます。

第 3 項 Missing(欠損)は、 値が「あるべきところにない」状態。 SSDSE-B-2026 では「-」「...」「N/A」などの記号で表現されます。 pd.read_csv(..., na_values=['-', '...', 'N/A']) で明示しないと、 文字列として読み込まれて分析が壊れます。 欠損には MCAR(完全ランダム)・MAR(観測値に条件付きランダム)・MNAR(欠損自体に情報がある)の 3 種類があり、 補完方法が異なります。 たとえば「離島の医療施設数の欠損」は MNAR の可能性が高く、 単純な平均代入では深刻なバイアスを生みます。 第 4 項 Outliers(外れ値)は分布の裾に位置する極端な値。 SSDSE-B-2026 で「東京都の人口」は他県の数倍〜数十倍ですが、 これは外れ値ではなく 真の値です。 一方、 入力ミスで「2300 万人」が「2,300 億人」になっていれば、 こちらは除外すべき外れ値。 区別にはドメイン知識が不可欠です。 最後の第 5 項 Format Issues(書式問題)と Concept Drift(概念ドリフト)は、 全角・半角の空白、 桁区切りカンマ、 単位混在(千円 vs 円)、 そして時間経過による定義変更を指します。 SSDSE-B-2026 は教育用に整備されていますが、 それでも年度間で列の意味が微妙に変わることがあるため、 必ず元の調査票と照合する習慣をつけましょう。 以上 5 項目を意識すれば、 実データ分析の9 割の事故を防ぐことができます。

🏭 産業事例:実データの泥臭さに直面した 6 つの実話

「実データは合成データと違う」と言葉で言うのは簡単ですが、 実際にどう違うのか。 産業現場で著者・指導院生・知人が遭遇した 実話 6 件を紹介します。 SSDSE-B-2026 を扱うときの心構えにも直結します。

業界直面した問題対処と教訓
小売 POS客単価の外れ値が頻発よく調べると、 法人客の卸売購入(数十万円)が混在。 列「客種」でフィルタ後、 個人客のみで再分析。 「外れ値」は別母集団の可能性を疑うのが鉄則。
気象観測突然の異常値(-999.9)アメダスの欠損コードが「-999.9」だった。 数値として読み込まれ、 平均気温が著しく低く出た。 na_values=[-999.9] 指定で解決。 欠損記号は仕様書を確認
医療カルテ日付の表記揺れ「2023/04/01」「2023-04-01」「R5.4.1」「平成35年4月1日」が混在。 正規表現 + 元号変換で統一。 日付列は最優先で正規化
SSDSE 教材2 行目が日本語ラベル行学生が pd.read_csv('SSDSE-B-2026.csv') をそのまま実行し、 「総人口」「出生数」などのラベルが混じった行を数値変換しようとして全列が string になる。 skiprows=[1] で解決。 CSV の構造は最初に必ず開いて見る
アプリログタイムゾーン混在ユーザーログが UTC、 集計ログが JST で記録されていた。 結合すると 9 時間ずれる。 tz_convert で統一。 時刻列は UTC + JST を常に確認
家計調査定義変更(概念ドリフト)「インターネット通販」の費目が 2018 年に新設、 2023 年に細分化。 時系列で見ると不自然な階段。 長期時系列は調査票の改訂履歴を確認

これらの共通教訓は「実データは必ず仕様書(メタデータ)と照合する」こと。 SSDSE-B-2026 の場合、 独立行政法人統計センターが公開している 変数定義表(コードブック)が必須です。

📊 詳細比較表:実データ vs 合成データ vs 教科書例題

実データの「泥臭さ」を理解するには、 対比される合成データ・教科書例題との違いを 12 軸で見るのが早道です。

観点実データ(SSDSE-B-2026 等)合成データ教科書例題
出自公的統計、 企業ログ、 センサー、 SNSnp.random.normal、 GAN、 LLM著者の手計算用に整えた架空値
欠損あり(「-」「...」「N/A」)なし(指定しない限り)なし
外れ値あり(東京都の人口、 沖縄の温度など)分布で制御可能通常はなし
書式問題全角空白、 桁区切り、 単位混在なしなし
概念ドリフトあり(定義改定、 制度変更)なしなし
サンプル数SSDSE-B-2026: 47 県 × 112 列 × 12 年自由に設定可能n=10〜30 程度
分布形状経験分布(しばしば歪み・多峰)指定の分布(正規・指数等)著者が読みやすい形に整形
教育効果高(実務スキル直結)中(アルゴリズム理解)基礎(概念導入)
再現性CSV ファイル単位で再現可乱数シードで完全再現数値が固定
倫理公開データなら利用規約のみなしなし
分析の難易度高(前処理に時間)
本サイトでの方針採用(必須)禁止(教育原則)最小限のみ

合成データだけで学習すると「動くコード」は書けても、 「動かないデータに対処するコード」が書けません。 実務で必要なのは後者です。

📝 演習問題:実データの「現実」と格闘する 10 問

SSDSE-B-2026 を題材にした、 実データならではの演習問題 10 問。 答えだけでなく 「なぜそうなるか」を説明できるところまで到達してください。

  1. 欠損確認:SSDSE-B-2026 を pd.read_csv で読み、 各列の欠損数を多い順に 5 つ表示せよ。 「-」が欠損記号であることに注意。
  2. 列定義の確認:A1301 は「面積」ではなく 15 歳未満人口である。 コードブックで A1101(総人口)・A1301(15 歳未満人口)・A1303(65 歳以上人口)の定義を確認せよ。 なお SSDSE-B-2026 に面積の列は存在しないため、 「人口密度=人口÷面積」はこのデータ単独では計算できない(一般論としての定義は知っておくこと)。
  3. 外れ値検出:47 都道府県の人口で z スコアが ±2 を超える県を列挙せよ。 これらは 除外すべき外れ値か、 それとも 真の値か?
  4. 表記揺れ:都道府県名「東京都」「東京」「Tokyo」など、 SSDSE では統一されているが、 自分の 1 次データと結合するときの注意点を 3 つ書け。
  5. 時間ドリフト:SSDSE-B-2026 の年度列(先頭列 'SSDSE-B-2026')で、 同じ指標(例: A1101)が 2012-2023 年度でどう変化したか折れ線グラフを描け。 不自然なジャンプがあれば、 制度変更を疑え。
  6. 欠損補完比較:ある列の欠損を「平均代入」「中央値代入」「線形補間」で埋め、 3 通りで分布のヒストグラムを描け。 どれが最も自然か。
  7. 分布の歪み:「都道府県別 出生数(A4101)」の分布を確認し、 対数変換前後のヒストグラムを比較せよ。 教科書の正規分布とは違うことを実感せよ。
  8. 分布の偏り:「標準地価(住宅地、 C5401)」の分布を確認せよ。 2023 年度は東京都(404,400 円/m²)が他県から大きく離れ(歪度 3.94、 中央値 30,900 円/m²)、 平均値が代表値として不適切になることを確かめよ。
  9. 結合の罠:SSDSE-B-2026 と外部データを「Prefecture」列で結合するとき、 全角空白・半角空白の混在で結合失敗する例を作れ。 str.strip() で対処せよ。
  10. 定義文書化:「あなたが分析した結果」を他人に渡すとき、 必要なメタデータを 7 項目挙げよ(データ出典・年度・単位・列定義・欠損処理・コード版・分析者)。

💥 失敗例:実データで「やってはいけない」5 つのパターン

合成データ駆動の練習だけしていると、 実データで 必ず 同じ罠を踏みます。 著者および指導院生が実際に踏んだ失敗 5 件をカタログ化。

❌ 失敗 1:欠損記号を文字列のまま分析

状況:SSDSE-B-2026 を pd.read_csv でデフォルト読み込み。 「-」を欠損記号として認識せず、 数値列が object 型に。 df['A1101'].mean() がエラーになり半日溶ける。

正しい対応pd.read_csv(..., na_values=['-', '...', 'N/A', ''])。 読み込み後すぐ df.dtypes で型確認、 df.isna().sum() で欠損数確認。

❌ 失敗 2:外れ値を機械的に除外

状況:都道府県別人口で z スコア > 2 の県(東京・神奈川・大阪・愛知)を「外れ値」として除外。 結果として「日本の人口分布」を語っているのに 真の意味で重要な県がない分析になった。

正しい対応:外れ値は除外する前に意味を考える。 真の値であれば対数変換・標準化で対処。 入力ミスの場合のみ除外。 「外れ値検出器」を盲信しない。

❌ 失敗 3:単位混在を見落とす

状況:SSDSE-B-2026 で「人口(千人)」と「世帯数(戸)」を そのまま割って「世帯当たり人数」を計算。 結果が 0.001 になり、 意味不明な分析を提出。

正しい対応:SSDSE-B-2026 のコードブック(変数定義表)で各列の単位を必ず確認。 列名 + 単位を変数化して計算前に注釈をつける。

❌ 失敗 4:時系列の制度変更を無視

状況:SSDSE-B-2026 で 2019 年に統計分類が改定された列を、 2018-2026 の連続時系列として平均化。 2019 年前後で 定義が違う数値を平均してしまい、 トレンドが架空のものに。

正しい対応:長期時系列は改定履歴を確認。 改定前後を別系列として扱うか、 公式の接続データを使う。

❌ 失敗 5:合成データだけで学習

状況:機械学習教材で np.random.normal ばかり使い、 「実データなんて pandas で読むだけ」と思っていた学生が、 卒論で SSDSE を扱った瞬間に 1 週間動かない

正しい対応:本サイトの方針通り、 学習段階から実データを使う。 「動かないデータ」と格闘する経験こそが、 実務スキルの本体。

📔 実データ専用 用語辞典(25 語)

実データを扱うときに頻出する周辺用語を、 ワークフロー順に整理しました。

メタデータ(Metadata)
データに関するデータ(出典・期間・単位・列定義など)。 SSDSE-B-2026 では別 PDF として提供。
コードブック(Codebook)
各列の意味・型・取り得る値を列挙した文書。 SSDSE-B-2026 では「変数定義表」が該当。
スキーマ(Schema)
テーブル構造の仕様(列名・型・制約)。 実データの読み込みで最初に確認すべき。
欠損(Missing Value)
「あるべき値がない」状態。 NaN、 NULL、 None、 「-」、 「N/A」等。
MCAR / MAR / MNAR
欠損メカニズム 3 種。 補完手法の選択を左右。
外れ値(Outlier)
分布の裾に位置する極端値。 「真の値」と「ミス」を区別すること。
表記揺れ(Inconsistent Representation)
同一概念が異なる表記で混在。 「東京都」「Tokyo」「TOKYO」など。
単位(Unit)
数値の意味する量(千人、 円、 千円、 km²)。 SSDSE-B-2026 ではコードブック必読。
エンコーディング(Encoding)
文字符号化方式(UTF-8、 Shift-JIS、 CP932)。 SSDSE は UTF-8 だが、 古い CSV は CP932 が多い。
改行コード(Line Endings)
CRLF(Windows)と LF(Unix)の違い。 まれにテキスト処理で問題化。
桁区切り(Thousand Separator)
「1,234,567」のカンマ。 そのまま読むと文字列扱いになる。
タイムゾーン(Timezone)
JST、 UTC など。 ログデータの結合で必ず確認。
概念ドリフト(Concept Drift)
時間経過で同じ変数の意味が変わる現象。 長期時系列で要注意。
データクレンジング(Data Cleansing)
欠損・外れ値・表記揺れの統合的処理。 実データ分析の 60% の時間を占める。
ETL(Extract, Transform, Load)
抽出・変換・格納のデータ加工パイプライン。 実データ実務の標準フレーム。
Data Lake
未加工の実データを保管するストレージ。 SSDSE のような既に整備されたデータは Data Mart に近い。
Data Mart
特定用途向けに整備済みのデータセット。 SSDSE-B-2026 は教育用 Data Mart。
SSDSE(標準教育用データセット)
独立行政法人統計センターが提供する実データ教材。 都道府県別・市区町村別の集計値。
e-Stat
日本政府統計のポータルサイト。 SSDSE の元データの大半が公開されている。
RDC(Research Data Center)
個票データを研究目的で利用できる機関。 日本では統計センター。
JIS X 0401
都道府県コードの JIS 規格。 01〜47。 結合で重宝。
FIPS(米国)
米国の州・郡コード。 国際比較で頻出。
Tidy Data
「1 行 = 1 観測、 1 列 = 1 変数」の整理形式。 実データを変換する最終形態。
ロングフォーマット / ワイドフォーマット
長い形 vs 横に広い形。 SSDSE は基本ワイド。 可視化はロング推奨。
DPLA(Data Provenance Layer)
データの来歴情報。 「いつ・誰が・どう取ったか」のログ。 実データの信頼性の根拠。

🔬 SSDSE-B-2026 を題材にした実データ点検プロトコル (47 都道府県)

「実データ」と一括りに言っても、 教科書のクリーンな例題とは大きく異なる。 SSDSE-B-2026 (47 都道府県, 1700 弱の指標, 数十年の時系列) は政府統計の集計データのため比較的整っているが、 それでも初学者がよく踏む 7 種類の罠が含まれている。 このセクションでは「実データを手にしたら最初に走らせる点検プロトコル」を SSDSE-B で具体的に提示する。 一度この手順を習慣化すると、 新しいデータを受け取ったときに最初の 30 分で「使える/危ない」を判断できるようになる。

📋 点検プロトコル 7 ステップ (SSDSE-B-2026 実測)

#点検項目SSDSE-B での実測結果何を判断するか所要時間
1行数・列数の確認2023 年度で 47 行 × 112 列(全体は 12 年度 × 47 県 = 564 行)想定通りか? 欠損や重複行は?2 分
2データ型 (dtypes) 確認数値列に object 混入 (- 記号やカンマ)型変換が必要な列を特定3 分
3欠損 (isnull) のマップ指標により 0-15% の欠損率解析対象列の利用可否5 分
4基本統計 (describe)総人口 (A1101, 2023 年度) の歪度 +2.29, 尖度 5.66分布形状と外れ値の有無5 分
5単位・桁の整合確認総人口「人」, 出生数「人」, 消費支出「円」比較・回帰の際の正規化要否3 分
6時系列の連続性年度により定義変更や調査休止あり推移分析の信頼性5 分
7メタデータ・脚注確認SSDSE 配布資料に詳細注記あり解釈の限界・除外要件7 分

この 7 ステップを合計 30 分程度で完了させると、 ようやく「このデータでどんな分析が可能か / 不可能か」が見えてくる。 教科書の Iris や Boston housing は (1)-(7) すべてクリアされた状態で配布されているが、 実データではここから始まる。 特にステップ 7 (メタデータ・脚注) は軽視されがちだが、 例えば「総人口 (A1101)」が「常住人口」か「住民基本台帳人口」かでサンプリング設計が違い、 比較対象としての適格性が変わる。

🐍 SSDSE-B-2026 で実データ点検を実行する Python コード

このコードでやること: SSDSE-B-2026 を読み込み、 上記 7 ステップのうち (1)-(4) を一括実行する。 欠損率・歪度・外れ値の有無を一目で確認できる「データ健康診断レポート」を出力。

📥 入力データ (SSDSE-B-2026 抜粋):

SSDSE-B-2026 都道府県 A1101(総人口千人) A4101(出生数人) A1301(年少人口千人) R01000 北海道 5092 24430 514 R13000 東京都 14086 86348 1513 ... ... ... ... ... (47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# SSDSE-B-2026 データ健康診断
import pandas as pd
import numpy as np

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023].copy()

print(f'1) 形状: {df.shape}')
print(f'2) 数値列: {df.select_dtypes(include=np.number).shape[1]} 列 / object 列: {df.select_dtypes(include=object).shape[1]} 列')
print(f'3) 欠損のある列: {(df.isnull().sum() > 0).sum()} 列')
for col in ['A1101', 'A4101']:
    s = df[col].dropna()
    print(f'4) {col}: n={len(s)}, mean={s.mean():.1f}, std={s.std():.1f}, skew={s.skew():.3f}, kurt={s.kurt():.3f}')

📤 実行すると次の出力が得られる:

1) 形状: (47, 112) 2) 数値列: 110 列 / object 列: 2 列 3) 欠損のある列: 0 列 4) A1101: n=47, mean=2645808.5, std=2797551.4, skew=2.293, kurt=5.661 4) A4101: n=47, mean=15473.8, std=17155.5, skew=2.368, kurt=6.017

💬 結果の読み方: A1101 (人口) の歪度 2.29 は強い右裾分布で、 対数変換が有効。 出生数 A4101 の歪度 2.37 も同様に右へ歪み、 いずれも東京 1 県が分布を引っ張っている。 2023 年度スライスでは欠損のある列は 0、 型変換が必要な object 列も Code・Prefecture の 2 列のみで、 集計済みの官庁統計らしく比較的整っている。

🧮 実値で計算してみる

数式だけでは「実感」が湧きにくいので、 具体的な数値で 1 度手計算してみると理解が定着します。 以下の例は、 本サイトで扱う SSDSE-B-2026 や公開教材に近い形式で用意しました。

SSDSE-B-2026 で実際に遭遇する典型課題:

課題対処
1 行目がヘッダ+2 行目が単位skiprows=1 を指定
「-」が欠損値na_values=['-'] を指定
大都市と離島で桁が違う対数変換 or 比率化
「兵庫」と「兵 庫」(全角空白)str.strip() で正規化

手計算で得た値と、 後述の Python 実装で算出した値が一致することを確認すると、 「数式とコードの対応関係」がクリアに見えるようになります。

🧮 数式に値を入れて手で計算する: 実データの記述統計

合成 5 都道府県人口で代表値を計算する。

Step 1: データ [万人]

人口
東京1404
神奈川923
大阪880
愛知754
埼玉738

Step 2: 要約

合計 = 4699 平均 = 939.8 中央値 = 880 範囲 = 1404-738 = 666 東京シェア = 1404/4699 ≈ 0.299

🐍 Python で再現

1
2
3
4
5
6
7
import numpy as np
pop = np.array([1404, 923, 880, 754, 738])
print(f"合計: {pop.sum()}")
print(f"平均: {pop.mean()}")
print(f"中央: {np.median(pop)}")
print(f"範囲: {pop.max() - pop.min()}")
print(f"東京シェア: {pop[0]/pop.sum():.3f}")

📤 実行結果

合計: 4699 平均: 939.8 中央: 880.0 範囲: 666 東京シェア: 0.299

💬 手計算 (Step 2) と Python 出力が完全一致。

🐍 Python 実装

公的統計(SSDSE-B-2026)を題材に、 最小限の Python コードで動作させます。 ファイルパス(data/raw/SSDSE-B-2026.csv)は自分の環境に合わせて変更してください。 まずはこのまま動かすことが理解の最短ルートです。

🎯 このコードでやること:実データ (SSDSE-B-2026.csv) を pandas.read_csv で読み込み、 欠損記号 -N/A を NaN に統一しながら、 欠損が多い列の上位 5 件を確認する。 実データ特有の「単位行スキップ」「欠損記号バリエーション」への対処の最小例。

📥 入力data/raw/SSDSE-B-2026.csv (47 都道府県 × 約 100 指標、 1 行目は変数名、 2 行目は変数説明=スキップ対象)。 なお本配布データ自体は欠損 0 件だが、 一般の実データでは -N/A... などの欠損記号が混在しうるため na_values で統一しておく。

1
2
3
4
5
6
7
8
import pandas as pd

# 実データ読み込みの典型: 単位行スキップ + 欠損記号指定
df = pd.read_csv('data/raw/SSDSE-B-2026.csv',
                 encoding='cp932',
                 skiprows=[1],
                 na_values=['-', 'N/A', '...'])
print(df.isna().sum().sort_values(ascending=False).head())

📤 実行例

SSDSE-B-2026 0 Code 0 H1800 0 G7102 0 G7101 0 dtype: int64

💬 結果の読み方:SSDSE-B-2026 は独立行政法人統計センターが整備した集計統計のため、 実際には欠損は 0 件(どの列も完全に埋まっている)。 na_values で「-」「N/A」「...」を NaN に統一しても件数は 0 のままだが、 この指定を省くと欠損記号が文字列として残り数値列が object 型になる典型問題を防げる。 より生の実データ(企業ログ・調査票など)では、 この head() に欠損の多い列がずらりと並び、 「列ごとに欠損率が異なる」ため補完・削除戦略の検討が必要になる。

▶ 実行 を押せばこのページの中でそのまま動きます(ライブラリもデータも同梱済みで、 準備は要りません)。 手元の Python に移して動かすときは pip install numpy pandas が必要です。 読んでいるデータは data/raw/SSDSE-B-2026.csv。 日本語を含むので encoding='cp932' の指定を落とさないでください。

本サイトの全コードは 論文一覧ページ から実例として確認できます。 自分のデータで試したい場合は、 列名・欠損記号・単位の違いだけ調整すれば、 ほぼそのまま流用できます。

👣 ステップバイステップ実例

「実データ」を初めて使う方向けに、 ハンズオン的な実行手順を整理します。 上の Python 実装と組み合わせて、 1 度自分の手でなぞってみることを強く推奨します。

  1. 環境準備:このページのコードは ▶ 実行 ボタンでそのまま動くので、 まずは何も入れずに試す。 手元で動かしたくなったら Python 3.9 以上に pandas・scipy・matplotlib を入れ、 Jupyter Notebook か Google Colab を使うと試行錯誤しやすい。
  2. データ取得:本サイト題材の SSDSE-B-2026 を data/raw/ に配置(または自分のデータを用意)。 列名と単位を確認。
  3. 探索的に観察df.head()df.describe()df.isna().sum() で全体像を把握。 ここで欠損や外れ値の見当を付ける。
  4. 前提検証:実データ をこのデータに当てはめてよいか(このページの「⚠️ よくある落とし穴」で挙げた 合成データの結果を実データに過信・出典・期間・単位を確認しない など)を確認。 NG なら別手法を検討。
  5. 本処理:上のコードブロックを参考に、 関数を呼び出して値を取得。 中間出力をその都度プリントして合っているか確認。
  6. 結果可視化:散布図、 棒グラフ、 ヒートマップなど、 解釈しやすい図を 1〜2 枚作る。 タイトルには結論を書く。
  7. 解釈・記録:「📝 レポートでの報告」の 5 点セットに沿って Notebook に書き残す。 後の自分のために結論・限界・次の一手を明記。
  8. 共有:Notebook を GitHub や Drive に置き、 関係者にレビュー依頼。 ピアレビューで穴が見つかることが多いので大事。

この 8 ステップを 1 度回すと、 「用語を読んで分かった気になる」段階から「実際に使える」段階に進めます。 知識は身体で覚えるのが結局のところ最速です。

🐍 実データ前処理の Python レシピ集

「困ったときに辞書のように引ける」実データ前処理レシピを 8 つ。 SSDSE-B-2026 や類似の実データで即戦力です。

レシピ 1:文字コード自動判定で読み込み

📥 入力例(SSDSE-B-2026 全体:564 行 × 112 列 = 47 都道府県 × 2012〜2023 年) 年度 地域コード 都道府県 A1101(総人口) A1303(65歳以上人口) A4101(出生数) … 2023 R01000 北海道 5,092,000 1,681,000 24,430 … 2023 R13000 東京都 14,086,000 3,205,000 86,348 … 2023 R47000 沖縄県 1,468,000 350,000 12,549 … …(残り 112 列は住宅・家計・教育・医療など)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import chardet
import pandas as pd

# バイト列の先頭で文字コード推定
with open('data/raw/SSDSE-B-2026.csv', 'rb') as f:
    raw = f.read(100000)
encoding = chardet.detect(raw)['encoding']
print(f'推定文字コード: {encoding}')

# 推定結果で読み込み
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding=encoding, skiprows=[1], na_values=['-', '...'])

レシピ 2:プロファイルレポート 1 行生成

1
2
3
4
5
6
7
from ydata_profiling import ProfileReport
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1], na_values=['-', '...'])
report = ProfileReport(df, title='SSDSE-B-2026 プロファイル')
report.to_file('outputs/ssdse_profile.html')
# ブラウザで開くと 112 列の概要が一目瞭然

レシピ 3:欠損パターンの可視化

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import missingno as msno
import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1], na_values=['-', '...'])

# 欠損のヒートマップ
msno.matrix(df)
plt.savefig('outputs/missing_pattern.png', dpi=150, bbox_inches='tight')

# 欠損相関(同時欠損のパターン)
msno.heatmap(df)
plt.savefig('outputs/missing_correlation.png', dpi=150, bbox_inches='tight')

レシピ 4:表記揺れ統一(都道府県名)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import pandas as pd
import unicodedata

# 表記揺れがある CSV を想定
data = pd.DataFrame({
    'Prefecture_raw': ['東京都', '東京', '東京 ', '東京 ', 'TOKYO', 'tokyo'],
    'value': [100, 200, 300, 400, 500, 600],
})

def normalize_pref(s):
    if pd.isna(s):
        return s
    s = unicodedata.normalize('NFKC', str(s))  # 全角→半角、合字分解
    s = s.strip()
    s = s.upper()
    # 「県」「都」「府」「道」がついてなければ追加
    if not any(s.endswith(suf) for suf in ['県', '都', '府', '道']):
        # 簡易マッピング
        mapping = {'TOKYO': '東京都', '東京': '東京都'}
        s = mapping.get(s, s)
    return s

data['Prefecture'] = data['Prefecture_raw'].apply(normalize_pref)
print(data)

レシピ 5:外れ値の意味判定

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) 北海道 5,092,000 東京都 14,086,000 沖縄県 1,468,000 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import pandas as pd
import numpy as np

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1], na_values=['-', '...'])
df = df[df['SSDSE-B-2026'] == 2023]  # 2023 年度の 47 都道府県に絞る

def detect_outliers(series, method='zscore', threshold=3):
    if method == 'zscore':
        z = (series - series.mean()) / series.std()
        return z.abs() > threshold
    elif method == 'iqr':
        q1, q3 = series.quantile([0.25, 0.75])
        iqr = q3 - q1
        return (series < q1 - 1.5 * iqr) | (series > q3 + 1.5 * iqr)
    elif method == 'mad':  # ロバストな z スコア
        median = series.median()
        mad = (series - median).abs().median()
        modified_z = 0.6745 * (series - median) / mad
        return modified_z.abs() > threshold
    return None

# 人口列で 3 種類の外れ値検出を比較
for method in ['zscore', 'iqr', 'mad']:
    mask = detect_outliers(df['A1101'], method=method)
    print(f'{method}: {df.loc[mask, "Prefecture"].tolist()}')
# 2023 年度実測: z スコア(3)は東京都のみ、 IQR・MAD は北海道・埼玉・千葉・東京・
# 神奈川・愛知・大阪・兵庫・福岡の 9 都道府県を検出するが、 いずれも真の値
# 対処:対数変換または除外せず別途取り扱う

レシピ 6:欠損補完(線形補間 + MICE)

📥 入力例(SSDSE-B-2026 全体:564 行 × 112 列 = 47 都道府県 × 2012〜2023 年) 年度 地域コード 都道府県 A1101(総人口) A1303(65歳以上人口) A4101(出生数) … 2023 R01000 北海道 5,092,000 1,681,000 24,430 … 2023 R13000 東京都 14,086,000 3,205,000 86,348 … 2023 R47000 沖縄県 1,468,000 350,000 12,549 … …(残り 112 列は住宅・家計・教育・医療など)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import pandas as pd
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1], na_values=['-', '...'])

# 数値列のみ抽出
num_cols = df.select_dtypes(include='number').columns.tolist()

# 方法 1: 同一県の前後年で線形補間
df_interp = df.copy()
df_interp = df_interp.sort_values(['Prefecture', 'SSDSE-B-2026'])  # 先頭列 = 年度
df_interp[num_cols] = df_interp.groupby('Prefecture')[num_cols].transform(
    lambda x: x.interpolate(method='linear')
)

# 方法 2: MICE(多重代入法)
imputer = IterativeImputer(max_iter=10, random_state=42)
df_mice = df.copy()
df_mice[num_cols] = imputer.fit_transform(df_mice[num_cols])

# 比較
print(f'元の欠損数: {df[num_cols].isna().sum().sum()}')
print(f'線形補間後の欠損数: {df_interp[num_cols].isna().sum().sum()}')
print(f'MICE 後の欠損数: {df_mice[num_cols].isna().sum().sum()}')

レシピ 7:時系列での概念ドリフト検知

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) 北海道 5,092,000 東京都 14,086,000 沖縄県 1,468,000 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1], na_values=['-', '...'])

# 東京都の人口を年次でプロット(先頭列 'SSDSE-B-2026' が年度)
tokyo = df[df['Prefecture']=='東京都'].sort_values('SSDSE-B-2026')
plt.plot(tokyo['SSDSE-B-2026'], tokyo['A1101'])
plt.title('東京都の総人口推移')
plt.xlabel('年度')
plt.ylabel('総人口(人)')
plt.savefig('outputs/tokyo_pop.png')

# 不自然なジャンプを検出
diff = tokyo['A1101'].diff().abs()
mean_diff = diff.mean()
std_diff = diff.std()
jumps = tokyo[diff > mean_diff + 2 * std_diff]
print(f'不自然なジャンプ年: {jumps["SSDSE-B-2026"].tolist()}')
# ジャンプがあれば、 制度変更・分類改定の可能性を疑う

レシピ 8:データ系統の記録

📥 入力例(SSDSE-B-2026 全体:564 行 × 112 列 = 47 都道府県 × 2012〜2023 年) 年度 地域コード 都道府県 A1101(総人口) A1303(65歳以上人口) A4101(出生数) … 2023 R01000 北海道 5,092,000 1,681,000 24,430 … 2023 R13000 東京都 14,086,000 3,205,000 86,348 … 2023 R47000 沖縄県 1,468,000 350,000 12,549 … …(残り 112 列は住宅・家計・教育・医療など)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import pandas as pd
import hashlib
import json
from datetime import datetime

def fingerprint_df(df, name='data'):
    """データのフィンガープリント(来歴記録用)"""
    info = {
        'name': name,
        'timestamp': datetime.now().isoformat(),
        'shape': df.shape,
        'columns': df.columns.tolist(),
        'dtypes': df.dtypes.astype(str).to_dict(),
        'missing': df.isna().sum().to_dict(),
        'hash': hashlib.md5(pd.util.hash_pandas_object(df).values.tobytes()).hexdigest(),
    }
    return info

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1], na_values=['-', '...'])
fp = fingerprint_df(df, 'SSDSE-B-2026')

with open('outputs/data_lineage.json', 'w', encoding='utf-8') as f:
    json.dump(fp, f, ensure_ascii=False, indent=2)
# 分析の各段階でフィンガープリントを記録すると、 監査・再現性が大幅向上

🧠 SSDSE-B-2026 を扱うときのドメイン知識

実データを正しく解釈するには、 数値の背後にある制度・歴史・地理の知識が不可欠です。 SSDSE-B-2026 を読み解くための基本ドメイン知識を 10 個。

これらの知識を持って分析すると、 「数値の意外性」と「背景の必然性」を区別できるようになります。 これがドメイン知識の力です。

🗾 都道府県横断分析のテンプレート 5 種

SSDSE-B-2026 を使った典型的な分析テンプレート。 卒論・コンペ・実務でそのまま流用できます。

テンプレート 1:ランキング作成 + 可視化

1 人あたり〇〇」のランキング上位・下位 10 県を表 + 棒グラフで提示。 必ず元指標・分母を併記。

テンプレート 2:2 指標の相関分析

散布図 + Pearson r + 95% CI + p 値。 「相関は因果ではない」を必ず明記。 第三変数の影響を考慮。

テンプレート 3:時系列トレンド分析

5 年分の時系列で、 47 都道府県の 変化率をランキング。 制度変更がないか必ず確認。

テンプレート 4:地方ブロック比較

47 県を 8 ブロックに集約し、 ブロック間の差を箱ひげ図で表示。 単純合計と加重平均を併記。

テンプレート 5:クラスタリング

複数指標を標準化して k-means。 「似た特徴を持つ県群」を発見。 シルエット係数で k を選択。

📝 実データ分析の報告テンプレート

実データを用いた分析結果を、 他者が再現できる形で報告するためのテンプレート。 卒論・実務報告・コンペ提出で使えます。

1. データセクション(必須)

2. 前処理セクション(必須)

3. 分析セクション(必須)

4. 結果セクション

5. 限界セクション(必須)

6. 再現性セクション(必須)

📜 「実データ」の重要性が認識された歴史

「実データ」という概念が現代のデータサイエンス教育で強調されるようになった経緯を、 5 段階で整理します。

1. 古典統計の時代(19 世紀-1950 年代)

統計学の基礎理論はすべて実データで構築されました。 ピアソン相関は犬の骨格データ、 t 検定はギネスビール工場の品質データ、 χ² 検定は遺伝学のデータが題材。 「実データから理論が生まれた」時代。

2. 教科書化の時代(1960-1990 年代)

統計教育が普及するなかで、 計算しやすい「人工的な例題データ」が教科書に多用されるようになります。 学生は「整った数字」だけで学習。 これが現代の「合成データ依存」の文化的源流です。

3. データマイニングの時代(1990-2010 年代)

UCI Machine Learning Repository(1987 年〜)、 KDD Cup(1997 年〜)など、 実データの公開リポジトリが登場。 「アルゴリズムは実データで評価する」文化が確立。

4. Kaggle 時代(2010 年代)

2010 年に Kaggle が登場し、 企業の実データで競技するスタイルが標準化。 「合成データではなく実データで腕を磨く」が世界的潮流に。

5. SSDSE 時代(2018 年〜)

独立行政法人統計センターが SSDSE(標準教育用データセット)を公開(2018 年〜)。 「教育用に整備された実データ」というニッチを埋め、 大学のデータサイエンス教育のデファクトに。 本サイトの主要題材 SSDSE-B-2026 はこの系譜の最新版。

💭 実データに向き合う「思想」:3 つの哲学的視点

実データを単なる「数字の集合」と見るか、 「現実世界の写像」と見るかで、 分析の深さが変わります。 3 つの哲学的視点を紹介します。

視点 1:実証主義(Positivism)

「実データは客観的事実を表す」とする立場。 19 世紀コントの哲学に由来。 メリットは 分析の単純さ。 デメリットは「誰が何のために測ったか」を看過しやすいこと。 SSDSE-B-2026 を単純に「事実」として扱うのは、 この立場。

視点 2:構成主義(Constructivism)

「実データは社会的に構成されたもの」とする立場。 統計局の定義変更や分類の歴史に注目。 たとえば「失業者」の定義は時代で変わり、 数値の意味も変わる。 SSDSE-B-2026 の長期時系列を読むときは、 この視点が不可欠。

視点 3:批判的実在論(Critical Realism)

客観的現実は存在するが、 実データはその不完全な近似」とする中庸の立場。 ロイ・バスカーの哲学に由来。 メリットは 事実と解釈のバランス。 SSDSE-B-2026 を「現実の近似」として尊重しつつ、 「測定の限界」も認識する立場。 本サイトはこの立場を推奨。

3 つの視点はどれも有用で、 分析の目的に応じて使い分けるのが現実的です。 「自分が今どの立場で分析しているか」を意識すると、 解釈の質が大きく上がります。

🏁 最終メッセージ:実データに敬意を持つ

SSDSE-B-2026 の各セルには、 統計局の職員・調査員・回答者の労力が刻まれています。 1 つの数値を出すために、 数百〜数千の人が関わっている。 この感覚を持って実データを扱うと、 分析の精度も、 結果の重みも、 自然に上がります。

本サイトの「合成データ禁止、 実データ必須」の方針は、 単なる教育方法論ではなく、 データに対する敬意の表明でもあります。 あなたの分析が、 SSDSE-B-2026 を作った人たちの努力に応えるものになることを願っています。

🎓 次に読むべきページ1 次データ(対比概念)、 2 次データ(SSDSE 自体の分類)、 データクレンジング(実務スキル)。

📊 実データ可視化レシピ 5 種(SSDSE-B-2026)

実データの「泥臭さ」を視覚的に伝える可視化レシピ。 報告書・プレゼンに即使えます。

レシピ 1:欠損マップ

1
2
3
4
5
6
import missingno as msno
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1], na_values=['-', '...'])
msno.matrix(df.iloc[:, :30])  # 最初の 30 列だけ
# 欠損パターンが視覚的に分かる。 同じ列で欠損が続く → 制度上の理由

レシピ 2:47 県ランキング棒グラフ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import matplotlib.pyplot as plt

# 2023 年度の都道府県別人口でランキング(先頭列 'SSDSE-B-2026' が年度)
y2023 = df[df['SSDSE-B-2026']==2023].sort_values('A1101', ascending=True)
plt.figure(figsize=(10, 12))
plt.barh(y2023['Prefecture'], y2023['A1101'])
plt.xlabel('総人口(人)')
plt.title('2023 年度 都道府県別総人口ランキング')
plt.tight_layout()
plt.savefig('outputs/pref_population_2023.png', dpi=150)

レシピ 3:散布図 + 回帰直線

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import os
os.makedirs('outputs', exist_ok=True)
import seaborn as sns
import matplotlib.pyplot as plt

# 高齢化率 vs 人口 10 万人あたり一般診療所数
df['aging_rate'] = df['A1303'] / df['A1101']
# 医療費の列は SSDSE-B-2026 に無い。一般診療所数(I5102)で代える
df['clinics_per_capita'] = df['I5102'] / df['A1101'] * 100000  # 人口 10 万対

sns.regplot(data=df[df['SSDSE-B-2026']==2023], x='aging_rate', y='clinics_per_capita')
plt.title('高齢化率と人口 10 万人あたり一般診療所数の関係')
plt.savefig('outputs/aging_vs_medical.png', dpi=150)

レシピ 4:時系列折れ線(複数県)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import matplotlib.pyplot as plt

# 大都市圏 4 県の人口推移
focus = ['東京都', '神奈川県', '大阪府', '愛知県']
for pref in focus:
    sub = df[df['Prefecture']==pref].sort_values('SSDSE-B-2026')
    plt.plot(sub['SSDSE-B-2026'], sub['A1101'], label=pref, marker='o')
plt.xlabel('年度')
plt.ylabel('総人口(人)')
plt.title('大都市圏 4 県の人口推移')
plt.legend()
plt.savefig('outputs/big4_population.png', dpi=150)

レシピ 5:地図可視化(コロプレス)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import folium
import json

# 国土地理院の都道府県境界 GeoJSON を取得
geojson_url = 'https://raw.githubusercontent.com/dataofjapan/land/master/japan.geojson'

# 2023 年度の人口データ
m = folium.Map(location=[36, 138], zoom_start=5)
folium.Choropleth(
    geo_data=geojson_url,
    data=df[df['SSDSE-B-2026']==2023],
    columns=['Prefecture', 'A1101'],
    key_on='properties.nam_ja',
    fill_color='YlOrRd',
).add_to(m)
m.save('outputs/japan_choropleth.html')

📋 「実データ」を 10 行で覚える

  1. 実データ = 現実世界から取った、 ノイズ・欠損・外れ値・書式問題を含む数値の集合。
  2. 合成データとの違いは「泥臭さ」。 教育用には実データが必須(本サイト方針)。
  3. SSDSE-B-2026 は教育用に整備された実データの代表。 47 都道府県 × 12 年。
  4. 読み込み時の罠:文字コード・ヘッダー行・単位行・欠損記号「-」。
  5. 外れ値は真の値入力ミスを区別。 ドメイン知識が必要。
  6. 欠損補完:単純(平均代入)から高度(MICE)まで複数試して感度分析。
  7. 概念ドリフトに注意:長期時系列では制度変更で意味が変わる。
  8. 品質評価フレーム DAMA-DMBOK の 6 次元で体系的に評価。
  9. 分析報告では出典・期間・前処理・限界・再現性を必ず記述。
  10. SSDSE を作った人たちの労力に敬意を持ち、 結果を丁寧に解釈する。

🎓 このページのゴール:「実データに動じず、 適切な前処理と解釈ができる」状態。 完璧な前処理は存在しないと知ったうえで、 限界を明示しながら有用な知見を出せるようになることが、 実データ分析者としての卒業条件です。

⚠️ よくある落とし穴

この用語を使うときに初学者が踏みやすい失敗パターン。 1 度経験してしまえば次から避けられますが、 先に知っておくに越したことはありません。

❌ 合成データの結果を実データに過信
np.random.normal で生成した合成データで「相関 0.95」「ROC-AUC 0.99」が出ても、 実データには欠損・外れ値・季節性・分布の歪みが付き纏うため再現しません。 SSDSE-B-2026 のような実公的データでまず動かし、 合成データはユニットテスト用に限定するのが鉄則です。
❌ 出典・期間・単位を確認しない
同じ「人口」でも「2020 年国勢調査確定値」と「2024 年推計値」では数値が違い、 e-Stat は事後に改定が入ります。 取得日 (YYYY-MM-DD)、 集計時点、 単位 (人 vs 千人)、 改定有無を README に必ず記録。 半年後の自分が再現できない事故が一番多い失敗です。
❌ 欠損を無視する
df.dropna() で消すと、 欠損が起こりやすい属性 (高齢者、 過疎自治体) が選択的に抜け、 結果が標本全体を代表しなくなる選択バイアスに陥ります。 欠損メカニズム (MCAR / MAR / MNAR) を判定し、 補完 (平均/多重補完) or 欠損フラグ追加を選ぶ判断が必要。
❌ 表記揺れ
「東京都」「東京」「Tokyo」「TOKYO」「TOKYO」(全角) が一データ内に混在し、 groupby で別グループ扱いになる。 JIS 都道府県コード (R13000) をマスタキーとし、 表記揺れは取り込み時点で正規化。 後段で気付くと修正コストが 10 倍になります。
❌ 個人情報の取り扱い不備
実データには氏名・住所・連絡先などの PII が紛れることがあり、 そのまま GitHub にコミットすると重大事故。 取り込みパイプラインの先頭で必須カラムを allowlist、 出力時にはハッシュ化や k-匿名化を検討。 公的統計 (e-Stat / SSDSE) はあらかじめ集計済みなので比較的安全ですが、 アンケート原票や自治体ローデータは要注意です。
🛡 防御策まとめ:「適用条件を確認する」「結果と前提をセットで記述する」「不確実性を必ず併記する」の 3 点を習慣化すれば、 上記の罠の大半は回避できます。

🗺 概念マップ

実データ(SSDSE-B-2026 等の公的統計)と合成データ・行動ログ・サンプリング・前処理・データクレンジングとの関係を俯瞰する概念マップ。 教育・研究での「実データ優先」原則の位置づけを示す。

実データ 前提: 観測・調査・記録 並列: 合成データ 発展: ビッグデータ / IoT 統合: クレンジング SSDSE 公式 e-Stat

人工的に生成された合成データ (numpy.random) ではなく、 実世界の観測・調査・記録から得られたデータ。 SSDSE-B-2026 は総務省統計局が公開する都道府県別の人口・経済・教育などの実データで、 教育用として整備されている代表例。

🔗 隣接手法への橋渡し

「実データ」は単独で完結する手法ではなく、 隣接領域と連携することで真価を発揮する。

SSDSE-B-2026 を題材にした 実データ の活用は、 上流 (取得・整形) と下流 (解釈・可視化) を含めて初めて完結する。

🌳 手法選択フロー

「実データ」を実際の課題に当てはめるとき、 状況別に何を選ぶかを 3 段階で判定する。

  1. 公的データで足りるか? Yes → SSDSE / e-Stat / 政府オープンデータ、 No → 自社収集 / API
  2. 個人情報を含むか? Yes → 匿名化・差分プライバシ、 No → そのまま公開可
  3. 更新頻度は? 年次 (SSDSE) → 静的分析、 リアルタイム (IoT) → ストリーミング基盤

SSDSE-B-2026 のような公的実データは、 ラベル付け済み・分布が現実的・無料・教育用途で自由に使えるという 4 拍子が揃っており、 ハンズオン教材の第一選択肢になる。

🎮 触って理解する

同じ 1 本の回帰・同じ平均でも、 「実データの生々しさ」が混ざるだけで結果が別物になります。 下の散布図は SSDSE-B-2026(2023年)の実測値——横軸=総人口(千人, A1101)、 縦軸=出生数(人, A4101)、 47都道府県すべて——を素材にしています。 3 本のスライダーで 外れ値の混入・欠損・測定ノイズを加えると、 真の値(緑線)に対して いま見えている値(橙線)の平均・傾きがどれだけ暴れるかを体感できます。 「クリーニング」を ON にすると、 前処理で結果がどこまで回復するかも見えます。

⚠️ データの扱いの明示:散布図の点は SSDSE-B-2026 の実測値をそのまま転記したものです(捏造なし)。 一方、 スライダーで加える外れ値・欠損・ノイズは 「架空の劣化シミュレーション」であり、 実際の SSDSE には含まれません。 「もし現場の生データがこう汚れていたら」という思考実験として動かしてください。 乱数はシード付きで決定的(同じ設定なら誰の画面でも同じ結果)です。

💡 グラフをタップ/ホバーすると、 その都道府県の実測値を表示します。
乱数シード:12345
指標 真の値(実測) いま見えている値 ズレ
出生数の平均(人)
回帰の傾き(人/千人)
決定係数
分析に使えた点数47
スライダーを動かしてみましょう。

何が起きているか:クリーニング OFF のとき、 このデモは初学者がやりがちな2つの近道——欠損をとりあえず 0 で埋める外れ値をそのまま残す——を再現します。 わずか 1 割の桁ミス(出生数に 0 が 1 個多い)が混ざるだけで平均は 6 割ほど跳ね上がり、 回帰の傾きも 3 割狂います(seed=12345 の代表値)。 外れ値・欠損・ノイズを同時に効かせると傾きが 2 倍超(+123%)にまで暴走します。 ここで 🧹 クリーニングを ON にすると、 欠損はリストワイズ除去、 外れ値は IQR×1.5 ルールで自動除去され、 傾きの狂いは +123% から −14% 付近まで大きく回復します(点数は 47→36 に減りますが)。 これが「実データはそのままでは分析できない=前処理が8割」の正体です。

なお ノイズ単体はほとんど平均・傾きを動かしません(σ=15%でも傾き −2% 程度)。 対称なノイズは平均化で打ち消し合うためで、 本当に怖いのは非対称に効く外れ値と、 0埋めした欠損だと分かります。 ここが「ノイズさえ小さければ安心」という直感の落とし穴です。 クリーニングは万能ではなく、 東京のような真の外れ値まで削ってしまうリスク(傾きが逆に下振れする)も同時に体感できます——だから機械的な IQR 除去ではなくロバスト統計や対数変換が推奨されるのです。

関連ページ:実験データ(実験 vs 観察・交絡)欠損メカニズム(MCAR・MAR・MNAR)隠れたデータバイアス外れ値欠損値ノイズデータクレンジング前処理(詳細)ロバスト統計

🕳 見落とされがちな落とし穴(追記の角度)

上の「⚠️ よくある落とし穴」では 合成データ過信・出典未確認・欠損無視・表記揺れ・PII を扱いました。 ここではそれらと重複しない、 より気づきにくい 4 つの罠——生存者バイアス・前処理での情報リーク・測定誤差の系統成分・情報損失——を補います。 いずれも「エラーも警告も出ないまま結論だけが静かに歪む」タイプで、 熟練者でも踏むため要注意です。

症状なぜ気づきにくいか対処と関連ページ
生存者バイアス「今あるデータ」だけを見て、 途中で消えた対象(廃校・廃業・市町村合併で消滅した自治体)を数えないため、 生き残りだけで平均が上振れする残っているデータは完全に見えるので、 「そこに無いもの」を想像しないと欠落に気づけない母集団を時点で固定し脱落を追跡。 参照:選択バイアス / 隠れたデータバイアス
前処理での情報リーク標準化・欠損補完・外れ値判定を訓練+テスト全体で行うと、 テストの情報が前処理を通じて訓練に漏れ、 精度が過大評価される数値は綺麗に出て一見成功に見える。 本番データで初めて性能が崩れるfit は訓練のみ、 CV では fold 内で完結。 参照:データリーク
測定誤差の系統成分「ノイズ=偶然(平均0)」と思い込むが、 目盛のズレ・定義の食い違い・回答の丸めなど系統誤差は平均化しても消えず、 全体を一方向へずらすサンプルを増やすほど偶然誤差は小さくなるので「大量データ=正確」と誤認しやすい校正・妥当性検証、 別ソースと突合。 参照:測定誤差 / ノイズ
前処理での情報損失dropna()・過度な丸め・カテゴリの「その他」統合で、 まだ使える情報や「欠損している事実」そのものを捨てている前処理は「綺麗にする作業」と思い込むと、 削るほど良いと錯覚する欠損はフラグ列で残し、 判断は後段へ。 参照:欠損値 / 欠損メカニズム
📝 より正確な分析(実測):偏りの強い指標では「平均」を代表値にすると生存者側・大都市側に引っ張られます。 SSDSE-B-2026(2023年・47都道府県, skiprows=[1])の E6202 大学教員数で実際に計算すると、 単純平均 4,083 人に対し中央値は 1,608 人(平均は中央値の 2.54 倍)、 上下 10% を除いたトリム平均は 2,535 人でした。 「平均」だけを見ると半数以上の県が平均以下という直感に反する状態になり、 ロバスト統計(中央値・トリム平均・MAD)を併記する必要が分かります。 なお生存者バイアスの数値例(廃業で消えた企業の除外など)は SSDSE には直接現れないため、 上の説明は架空の思考実験です。

🚀 発展:実データを「使える」にする技術地図

実データの粗さに対処する技術は、 単発の小技ではなくひとつの体系を成します。 「取得 → 点検 → 整形 → 分析 → 再現」という流れのどこで何を使うかを地図として持っておくと、 新しいデータに出会っても迷いません。 各トピックは本サイト内に個別ページがあるものはリンクしました(無いものはテキストのみ)。

発展トピック一言で本サイト内リンク
データクレンジング表記揺れ・単位・型を整え、 分析可能な状態へ整形する工程(分析時間の大半を占める)データクレンジング / 前処理(詳細)
探索的データ分析(EDA)整形前後で分布・欠損・外れ値・相関を「まず眼で見る」段階。 仮説はここで生まれるEDA / 外れ値処理
欠測機構の見極めMCAR / MAR / MNAR のどれかで補完法が変わる。 機構を誤ると補完がバイアスを増やす欠損メカニズム / 欠損値
頑健(ロバスト)統計外れ値を機械的に消さず、 中央値・MAD・Huber 損失などで「歪みを吸収しつつ全データを使う」ロバスト統計
サンプリングとバイアス誰が・どう選ばれたか(悉皆/標本)を確認し、 偏りを重み付けや限界明示で扱うサンプリング / 選択バイアス / データバイアス
データ品質評価完全性・正確性・一貫性・適時性・出所の 5 観点で「このデータは何点か」を可視化する(個別ページ準備中)テキストのみ
前処理パイプライン整形手順をコード(Pipeline)化し、 手動 Excel 編集を排して情報リークと非再現を防ぐ(個別ページ準備中)データリーク
再現性出典・取得日・シード・パッケージ版・コードを残し、 半年後の自分と他者が同じ結果に到達できる状態にする再現性
📝 「偏りは真の特徴」実測メモ:実データの偏りは必ずしもノイズではありません。 SSDSE-B-2026(2023年・実測)で東京都 1 県が全国に占める割合は、 大学教員数 E6202 で 27.9%、 大学学生数 E6302 で 25.9%、 外国人延べ宿泊者数 G7102 で 36.2%(総人口 A1101 は 11.3%)。 これは首都機能・大学・観光の集積という真の構造であり、 外れ値として除外すると現実を捨ててしまいます。 「除外」ではなく対数変換・正規化(1 万人あたり)・ロバスト統計で偏りを保ったまま扱うのが実データ流の発展的作法です。