論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説(ジャストインタイム型データサイエンス教育)
データリテラシー
Data Literacy
データを読み・使い・批判的に評価する力 — すべての分析の土台
リテラシープロセス問い批判的思考

🔖 キーワード索引(補強)

🔖 キーワード索引(補強)

データリテラシーの中核概念を一覧で。

記述統計 推測統計 外れ値 欠損値 分布 中心傾向 散らばり 標準偏差 四分位範囲 歪度 尖度 サンプルサイズ 母集団 バイアス 交絡 グラフのウソ 層別解析 p-hacking HARKing EDA

🔖 🔖 キーワード索引(チップから該当箇所へジャンプ)

論文記事から各用語のリンクをクリックすると、 該当箇所が開きます:

データリテラシーとは PPDACサイクル CRISP-DM 良い問いの作り方 EDA 変数の尺度 データ型 Tidy data データ品質 欠損 標本バイアス 測定の歪み 可視化リテラシー 統計でうそをつく オープンデータ 再現可能性

💡 30秒で分かる結論

🍰 まずはやさしく

データの読み書きができる力のことです。

正しく情報を判断するために使います。

SNSの情報を疑って見る時に役立ちます。

データの扱い方や考え方の基本を読みます。

📍 あなたが今見ているもの

🍰 まずはやさしく

データ分析の全体像をまとめた地図です。

分析の質を高めるために使います。

部活の記録をまとめる時に役立ちます。

分析の流れや準備の手順について読みます。

本ページでは、 データリテラシーを統合的に解説します。 PPDAC サイクル・CRISP-DM・問いの設計・EDA・変数の尺度・批判的読解を一気通貫で扱います。

「どの手法を使うか」よりその前段のリテラシーが、 分析の質を決定します。 数理・データサイエンス・AI モデルカリキュラム(MDASH)でも導入科目として位置づけられています。

🎨 10. 可視化リテラシー

🍰 まずはやさしく

グラフの嘘を見抜くためのメガネです。

見た目にだまされないために使います。

買い物の広告にあるグラフで役立ちます。

正しいグラフの作り方と見方を読みます。

「グラフは嘘をつく」基本パターン:

良い可視化の原則(Tufte)

実データで確かめる — 縦軸の始まりだけで差が 13 倍に見える

2 枚の棒グラフ: 7 地方区分ごとの 1 人 1 日あたりごみ排出量。左は縦軸 0 始まり、右は 830 g 始まり
図1: 1 人 1 日あたりごみ排出量(SSDSE-B-2026、2023 年度、7 地方区分ごとに県の値を単純平均)。北海道・東北 924.3 g が最大、近畿 837.0 g が最小で、比は 1.10 倍。左の縦軸 0 始まりでは棒の高さもほぼ 1.10 倍だが、右の 830 g 始まりでは (924.3 − 830) ÷ (837.0 − 830) = 13.5 倍の高さの差に見える。

Tufte の「データインク比」を上げようと余白を削ると、右の図のように縦軸を途中から始めたくなります。棒グラフは「棒の長さ=量」として読まれるので、縦軸は 0 から始めるのが原則です。差を細かく見せたいときは、棒ではなく点(ドットプロット)にして、縦軸が 0 から始まっていないことを目盛りで明示します。

🎭 11. 「統計でうそをつく方法」

Darrell Huff の古典(1954)。 現代でも有効な批判的読解の視点:

📐 定義・数式 — Tidy data と尺度

🍰 まずはやさしく

データを整理するための共通のルールです。

計算ミスや間違いを防ぐために使います。

スマホでアンケートを作る時に役立ちます。

データの種類と整理の形について読みます。

Tidy data の定義は数学的に 「観測 $\times$ 変数」の長方形構造」。 SSDSE-B-2026 の整然形は:

$$ \text{Tidy}(D) : D \in \mathbb{R}^{n \times p}, \quad D_{ij} = (\text{Prefecture}_i, \text{Variable}_j, \text{Value}_{ij}) $$

変数の尺度水準は Stevens の階層:

$$ \text{Nominal} \subset \text{Ordinal} \subset \text{Interval} \subset \text{Ratio} $$

SSDSE-B-2026 の Prefecture は 名義尺度、 「年齢階級」は 順序尺度、 「気温」は 間隔尺度、 「人口・出生数」は 比例尺度。 上位の尺度ほど許容される統計操作(差・比・平均)が多くなります。

🔬 数式を言葉で読み解く — 記号 → 意味

尺度許容操作SSDSE-B-2026 例
名義=, ≠Prefecture(北海道, 東京, ...)
順序+ >, <満足度・教育水準
間隔+ 加減・平均気温(°C)
比例+ 乗除・比A1101(人口)・出生数

名義尺度に平均値を出すような尺度違反は、 データリテラシー違反の典型例です。 Tidy 化のときに「この列の尺度は?」を明示する習慣をつけましょう。

🧮 SSDSE-B-2026 で実値計算 — データリテラシー演習

「データを正しく見る」基本動作を SSDSE-B-2026 の都道府県データで実行します。

例1:要約統計量を一括で得る

🎯 解説: SSDSE-B-2026(47都道府県データ)でデータリテラシーの基本確認動作を行う。 まずはデータを読み込み、 構造・型・欠損・代表値を「見る」ことが分析の出発点。 ファイルパスは自分の環境に合わせて変更すること。

📥 入力例: data/raw/SSDSE-B-2026.csv(2023年・47都道府県横断)
  年度  地域コード  都道府県  A1101(総人口)  A1303(65歳以上)  ...
  2023  R01000    北海道    5092000        1681000
  2023  R13000    東京都    14086000       3205000
  2023  R47000    沖縄県    1468000        350000
1
2
3
4
5
6
7
8
9
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
df = df[df['年度'] == 2023]            # 2023 年の 47 都道府県に絞る(12 年度分を混ぜない)
print('shape:', df.shape)
print(df.drop(columns='年度').describe().T.head(5))  # count / mean / std / min / 25% / 50% / 75% / max
print('---')
print(df.dtypes.value_counts())  # 各データ型の列数
print('欠損数:', df.isna().sum().sum())
📤 実行例(実測) shape: (47, 112) count mean std ... 50% 75% max 総人口 47.0 2.645809e+06 2.797551e+06 ... 1549000.0 2636500.0 14086000.0 総人口(男) 47.0 1.287085e+06 1.373649e+06 ... 732000.0 1269500.0 6914000.0 総人口(女) 47.0 1.358723e+06 1.424664e+06 ... 817000.0 1367000.0 7172000.0 日本人人口 47.0 2.578617e+06 2.691343e+06 ... 1533000.0 2573500.0 13448000.0 日本人人口(男) 47.0 1.253234e+06 1.320011e+06 ... 725000.0 1236500.0 6594000.0 [5 rows x 8 columns] --- int64 104 float64 6 object 2 Name: count, dtype: int64 欠損数: 0

💬 2023 年度に絞ると shape は (47, 112) で、欠損は 0。型は int64 が 104 列、float64 が 6 列、object が 2 列(地域コード・都道府県)。総人口の平均 264.6 万人に対して中央値は 154.9 万人と 1.7 倍の開きがあり、最大の東京都 1,408.6 万人が平均を押し上げている。平均だけで「典型的な県」を語らず、中央値と並べて読む。

例2:分布と外れ値の確認(IQR ルール)

📥 入力例: data/raw/SSDSE-B-2026.csv(2023年・47都道府県横断)
  年度  地域コード  都道府県  A1101(総人口)  A1303(65歳以上)  ...
  2023  R01000    北海道    5092000        1681000
  2023  R13000    東京都    14086000       3205000
  2023  R47000    沖縄県    1468000        350000
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
# 47 都道府県・最新年度に絞る(絞らないと最初の数値列が「年度」になり、外れ値が 0 件になる)
df = df[df['地域コード'].astype(str).str.match(r'^R\d{5}$', na=False)].copy()
df['年度'] = pd.to_numeric(df['年度'], errors='coerce')
df = df[df['年度'] == df['年度'].max()]

col = '総人口'
df[col] = pd.to_numeric(df[col], errors='coerce')
q1, q3 = df[col].quantile([0.25, 0.75])
iqr = q3 - q1
lo, hi = q1 - 1.5*iqr, q3 + 1.5*iqr
outliers = df[(df[col] < lo) | (df[col] > hi)]
print(f'{col} の外れ値 (n={len(outliers)}): 下限 {lo:,.0f} / 上限 {hi:,.0f}')
print(outliers[['都道府県', col]].to_string(index=False))
📤 実行例(実測) 総人口 の外れ値 (n=9): 下限 -1,369,750 / 上限 5,040,250 都道府県 総人口 北海道 5092000 埼玉県 7331000 千葉県 6257000 東京都 14086000 神奈川県 9229000 愛知県 7477000 大阪府 8763000 兵庫県 5370000 福岡県 5103000

💬 2023 年度 47 都道府県の総人口は IQR が 160.25 万人で、上限 504.0 万人を超える 9 都道府県が外れ値になった。北海道 509.2 万人・福岡県 510.3 万人は上限をわずかに超えただけで、東京都 1,408.6 万人とは外れ方の桁が違う。下限は −137.0 万人と負になるので、右に歪んだこの分布では下側の外れ値は出ようがない。規模の列は外れ値として除くより、人口当たりに直すか対数をとってから見る。

例3:層別集計(地域ブロック別)

📥 入力例: data/raw/SSDSE-B-2026.csv(2023年・47都道府県横断)
  年度  地域コード  都道府県  A1101(総人口)  A1303(65歳以上)  ...
  2023  R01000    北海道    5092000        1681000
  2023  R13000    東京都    14086000       3205000
  2023  R47000    沖縄県    1468000        350000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
df = df[df['年度'] == 2023]          # 2023 年の 47 都道府県に絞る(12 年度分を混ぜない)

block_map = {
    '北海道': '北海道', '青森県': '東北', '岩手県': '東北', '宮城県': '東北',
    '秋田県': '東北', '山形県': '東北', '福島県': '東北',
    '茨城県': '関東', '栃木県': '関東', '群馬県': '関東', '埼玉県': '関東',
    '千葉県': '関東', '東京都': '関東', '神奈川県': '関東',
}
df['ブロック'] = df['都道府県'].map(block_map).fillna('その他')
num_col = '総人口'                    # 先頭の数値列は「年度」なので列名で指定する
print(df.groupby('ブロック')[num_col].agg(['mean', 'std', 'count']).round(0))
📤 実行例(実測) mean std count ブロック その他 2042909.0 1942934.0 33 北海道 5092000.0 NaN 1 東北 1386333.0 521337.0 6 関東 6218143.0 4491161.0 7

💬 2023 年度の 47 都道府県に絞ったので、count は北海道 1・東北 6・関東 7・その他 33 と県数そのものになる。関東の平均 621.8 万人は東北の 138.6 万人の約 4.5 倍だが、標準偏差 449.1 万人が平均に近いほど大きく、東京都 1,408.6 万人の影響が強い。北海道は 1 県だけなので標準偏差が NaN になり、「その他」33 県は近畿も九州も混ざった寄せ集めであることにも注意して読む。

🧮 数式に値を入れて手で計算する: スキル成熟度の加重平均

合成データで 5 観点 (収集・加工・解析・表現・倫理) のスキル評価を加重で集約。

Step 1: 観点別スコア

観点スコア重み加重
収集30.150.45
加工40.251.00
解析50.301.50
表現30.150.45
倫理40.150.60

Step 2: 加重平均

合計 = 0.45+1.00+1.50+0.45+0.60 = 4.00 重み合計 = 1.00 加重平均 = 4.00 / 1.00 = 4.00 / 5.00 = 80%

🐍 Python で再現

1
2
3
4
5
6
import numpy as np
scores = np.array([3, 4, 5, 3, 4])
weights = np.array([0.15, 0.25, 0.30, 0.15, 0.15])
w = scores * weights
print(f"加重: {w}")
print(f"加重平均: {w.sum():.2f}")

📤 実行結果

加重: [0.45 1. 1.5 0.45 0.6 ] 加重平均: 4.00

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

🐍 16. ライブラリ早見表

🐍 16. ライブラリ早見表

用途 パッケージ
データ操作pandas, polars, pyarrow
EDA自動化ydata-profiling, sweetviz, autoviz
欠損可視化missingno
欠損補完sklearn.impute.SimpleImputer/KNNImputer/IterativeImputer
可視化matplotlib, seaborn, plotly, altair
ノートブックjupyter, marimo, quarto
再現性poetry, pip-tools, conda-lock, dvc
レポートquarto, papermill, nbconvert

📜 17. データリテラシーの歴史

💼 18. 実務応用

📖 19. ケーススタディ

19.1 John Snow のコレラ地図(1854)

ロンドンのコレラ流行で、 Snow はコレラ患者の自宅を地図にプロット。 Broad Street の給水ポンプ周辺に集中していることを発見し、 ポンプを使用停止 → 流行が収束。 データ可視化が公衆衛生を変えた歴史的事例。 「相関=因果」と判断する前に、 地図というシンプルな可視化が決定的だった。

19.2 Florence Nightingale のローズダイアグラム(1858)

クリミア戦争の英軍兵士死亡原因を「戦闘」「予防可能な感染症」「その他」に色分けした円グラフで政府に提示。 戦闘より感染症で多く死んでいることを直感的に伝え、 衛生改革を実現。

19.3 シャレンジャー号事故(1986)

O-リング故障による爆発事故。 事前データに O-リング温度依存性が示されていたが、 「失敗例だけ」を見てパターンを認識できなかった(生存バイアスの逆)。 視覚化の重要性が再確認された事例。

19.4 シンプソンのパラドックス:UC バークレー入試(1973)

全体では「男性合格率>女性合格率」だったが、 学部別に見るとほぼすべての学部で「女性合格率>男性合格率」。 女性が「合格率が低い学部に多く出願」していたため、 全体集計で誤って見えた。 集約と層別で結果が逆転する典型例。

⚖️ 20. データ倫理の基本

1. scipy.stats — 記述統計と検定をワンライナーで

📥 入力例: data/raw/SSDSE-B-2026.csv(2023年・47都道府県横断)
  年度  地域コード  都道府県  A1101(総人口)  A1303(65歳以上)  ...
  2023  R01000    北海道    5092000        1681000
  2023  R13000    東京都    14086000       3205000
  2023  R47000    沖縄県    1468000        350000
1
2
3
4
5
6
7
8
9
import pandas as pd
from scipy import stats

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
df = df[df['年度'] == 2023]            # 2023 年の 47 都道府県
x = df['総人口'].dropna()              # 先頭の数値列は「年度」なので列名で指定する
print('歪度:', stats.skew(x))
print('尖度:', stats.kurtosis(x))
print('Shapiro-Wilk 正規性検定:', stats.shapiro(x))
📤 実行例(実測) 歪度: 2.219112577570298 尖度: 4.951089442202499 Shapiro-Wilk 正規性検定: ShapiroResult(statistic=np.float64(0.6894608838033546), pvalue=np.float64(1.1083716035044386e-08))

💬 2023 年度の総人口の歪度 2.22 は右に長い裾、尖度 4.95(正規分布を 0 とする超過尖度)は裾の重さを示す。Shapiro-Wilk の W = 0.689、p = 1.1×10⁻⁸ で正規分布とはみなせない。平均 ± 2σ や t 検定のような正規分布を前提にした手法をそのまま当てず、対数変換してから確かめ直すか、順位に基づく方法を選ぶ。

2. scikit-learn — 標準化・欠損値処理

📥 入力例: data/raw/SSDSE-B-2026.csv(2023年・47都道府県横断)
  年度  地域コード  都道府県  A1101(総人口)  A1303(65歳以上)  ...
  2023  R01000    北海道    5092000        1681000
  2023  R13000    東京都    14086000       3205000
  2023  R47000    沖縄県    1468000        350000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from sklearn.preprocessing import StandardScaler, RobustScaler
from sklearn.impute import SimpleImputer, KNNImputer
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
df = df[df['年度'] == 2023]            # 2023 年の 47 都道府県
num_cols = df.select_dtypes('number').columns.drop('年度')

# 1) 平均0・分散1 に標準化
scaler = StandardScaler()
X_std = scaler.fit_transform(df[num_cols])

# 2) 外れ値に頑健な標準化(中央値・IQR 基準)
robust = RobustScaler()
X_robust = robust.fit_transform(df[num_cols])

# 3) 欠損値の補完(KNN)
imp = KNNImputer(n_neighbors=5)
X_imp = imp.fit_transform(df[num_cols])
print('補完後の欠損数:', pd.DataFrame(X_imp).isna().sum().sum())
i = list(num_cols).index('総人口')
print('総人口の標準化 (東京都):', round(X_std[df['都道府県'].tolist().index('東京都'), i], 2),
      '/ Robust:', round(X_robust[df['都道府県'].tolist().index('東京都'), i], 2))
📤 実行例(実測) 補完後の欠損数: 0 総人口の標準化 (東京都): 4.13 / Robust: 7.82

💬 欠損が 0 なので KNNImputer をかけても補完後の欠損数は 0 のまま(実際には何も補完していない)。東京都の総人口は標準化で 4.13、RobustScaler では 7.82 になる。平均と標準偏差は東京都自身に引っ張られて外れ具合を小さく見せるが、中央値と IQR を使う RobustScaler では外れ具合がそのまま大きく残る。

3. pandas — describe / quantile / value_counts

📥 入力例: data/raw/SSDSE-B-2026.csv(2023年・47都道府県横断)
  年度  地域コード  都道府県  A1101(総人口)  A1303(65歳以上)  ...
  2023  R01000    北海道    5092000        1681000
  2023  R13000    東京都    14086000       3205000
  2023  R47000    沖縄県    1468000        350000
1
2
3
4
5
6
7
8
9
10
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
df = df[df['年度'] == 2023]            # 2023 年の 47 都道府県
# 一括要約(年度は 2023 の定数なので外す)
summary = df.drop(columns='年度').describe(percentiles=[.1, .25, .5, .75, .9]).T
print(summary.head(3))

# 列ごとの欠損率
print(df.isna().mean().sort_values(ascending=False).head())
📤 実行例(実測) count mean std ... 75% 90% max 総人口 47.0 2.645809e+06 2.797551e+06 ... 2636500.0 6686600.0 14086000.0 総人口(男) 47.0 1.287085e+06 1.373649e+06 ... 1269500.0 3315400.0 6914000.0 総人口(女) 47.0 1.358723e+06 1.424664e+06 ... 1367000.0 3371200.0 7172000.0 [3 rows x 10 columns] 年度 0.0 地域コード 0.0 着工新設住宅戸数 0.0 外国人延べ宿泊者数 0.0 延べ宿泊者数 0.0 dtype: float64

💬 10%・90% 点まで出すと、総人口の 90% 点は 668.7 万人で、それを超える東京都・神奈川県・大阪府・愛知県・埼玉県の 5 都府県が平均 264.6 万人を大きく押し上げていることが分かる(75% 点は 263.7 万人で平均とほぼ同じ)。欠損率は上位 5 列とも 0.0 で、2023 年度分には欠損が 1 つも無い。

4. pingouin — 統計量と効果量・正規性検定

📥 入力例: data/raw/SSDSE-B-2026.csv(2023年・47都道府県横断)
  年度  地域コード  都道府県  A1101(総人口)  A1303(65歳以上)  ...
  2023  R01000    北海道    5092000        1681000
  2023  R13000    東京都    14086000       3205000
  2023  R47000    沖縄県    1468000        350000
1
2
3
4
5
6
7
8
import pingouin as pg
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
df = df[df['年度'] == 2023]            # 2023 年の 47 都道府県
x = df['総人口'].dropna()              # 先頭の数値列は「年度」なので列名で指定する
# 1 変数の正規性検定(既定は Shapiro-Wilk)
print(pg.normality(x))
📤 実行例(実測) W pval normal 総人口 0.689461 1.108372e-08 False

💬 pingouin の normality は既定で Shapiro-Wilk を使うので、W = 0.689、p = 1.1×10⁻⁸ と scipy.stats.shapiro と同じ値になり、normal 列は False。1 変数の検定なので、複数列の多変量正規性を調べたいときは pg.multivariate_normality(Henze-Zirkler 検定)を別に使う。

5. matplotlib/seaborn — EDA 可視化セット

📥 入力例: data/raw/SSDSE-B-2026.csv(2023年・47都道府県横断)
  年度  地域コード  都道府県  A1101(総人口)  A1303(65歳以上)  ...
  2023  R01000    北海道    5092000        1681000
  2023  R13000    東京都    14086000       3205000
  2023  R47000    沖縄県    1468000        350000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
df = df[df['年度'] == 2023]            # 2023 年の 47 都道府県
num_cols = df.select_dtypes('number').columns.drop('年度')[:5]   # 年度(定数)を除いた先頭 5 列

fig, axes = plt.subplots(2, 3, figsize=(15, 8))
for ax, col in zip(axes.flat, num_cols):
    sns.histplot(df[col].dropna(), kde=True, ax=ax)
    ax.set_title(col, fontsize=10)
plt.tight_layout()
plt.savefig('eda_distributions.png', dpi=100)
📤 実行例(実測) このブロックは標準出力を出さない(図を描く・変数を定義するだけ)。

🎮 触って理解する — だまされないクイズ

データリテラシーの核心は「数字とグラフにだまされない」こと。 ここでは誤解を招く主張を 5 問出題します。 各問題のグラフは操作(スライダー・ドラッグ・トグル)でリアルタイムに再描画されるので、 「同じデータでも見せ方で印象が激変する」ことを体感してください。 ※ 5 問のデータはすべて教材用の架空データです(SSDSE-B-2026 の実測値ではありません)。 統計量(相関係数・変化率など)はブラウザ内でその場で正確に計算しています。

🏅 初回正解スコア: 0 / 5 

Q1. 「商品Bの満足度が圧勝!」— 棒グラフの罠(架空データ)

ある広告の主張:「顧客満足度調査で 商品B(75%)が商品A(72%)を圧倒的に上回った!」(架空)。 下のグラフはその広告と同じ描き方です。

Y軸の開始値: 70% (グラフ上を上下にドラッグしても変更できます)

この主張(グラフ)の問題点はどれ?

✅ 正解:Y軸の切り詰め。 実際の値の比は 75 ÷ 72 = 約 1.04 倍(+3 ポイント)ですが、 Y軸を 70 から始めると棒の高さの比は 2.50 倍に見えます。 棒グラフは「高さ=量」で読むため、 原点 0 が原則(Tufte の lie factor ≒ 1)。 スライダーを 0 に戻す(または「正しい表示に直す」)と、 ほぼ同じ高さの 2 本になることを確認してください。 折れ線グラフで変化を拡大して見せる場合は、 軸の切断を波線などで明示するのが作法です。

Q2. 「アイスが事故を引き起こす!」— 相関と因果(架空データ)

架空の月次データ(12 か月)で「アイスクリーム販売量」と「水難事故件数」の相関係数は r = —。 ある記事の主張:「相関がこれほど強いのだから、 アイスの販売を規制すれば水難事故は減る!」

この主張の問題点はどれ?

✅ 正解:因果の飛躍(交絡の無視)。 気温が上がる → アイスも売れるし水難事故も増える、 という共通原因(交絡変数)の構造です。 実際、 このデータでは気温とアイスの相関 r = —、 気温と事故の相関 r = — と、 どちらも気温と強く連動しています。 色分け表示にすると、 高温の月(赤)ほど右上、 低温の月(青)ほど左下に並ぶことが見て取れます。 因果を主張するには、 交絡の統制(層別・回帰・実験計画)が必要です。

Q3. 「副作用リスク 50% 増!」— 母数の隠れたパーセント(架空データ)

架空の臨床試験の見出し:「新薬で副作用リスクが 50% も増加!」。 下のグラフはその記事に載っていた「相対リスク」の図です。

この主張の問題点はどれ?

✅ 正解:分母(母数)の隠蔽。 対照群 1000 人中 2 人(0.2%)→ 新薬群 1000 人中 3 人(0.3%)。 相対リスク増加は (3−2)/2 = 50% で見出し自体は計算上ウソではありませんが、 絶対リスク差はわずか 0.1 ポイント(1000 人に 1 人)。 「正しい表示」に切り替えると、 1000 人スケールでは棒がほとんど見えないことが分かります。 相対% を見たら必ず「分母は? 絶対数は?」と問うのがリテラシー。 医療統計では NNH(有害必要数)= 1 ÷ 0.001 = 1000 人という指標も使われます。

Q4. 「わが社は 3 年連続成長中!」— 期間の切り取り(架空データ)

架空企業の IR 資料:「売上は 3 年連続成長! 絶好調!」。 下は資料と同じ 2023〜2025 年だけのグラフです。 スライダー(またはグラフ上を左右にドラッグ)で表示開始年を動かしてみてください。

表示開始年: 2023 年〜2025 年

この主張の問題点はどれ?

✅ 正解:期間のチェリーピッキング。 2023→2025 年だけ見れば 62 → 71 億円で +14.5% の「3 年連続成長」ですが、 全期間 2014→2025 年では 98 → 71 億円で −27.6% の長期低落です。 「いつからいつまでのデータか」「なぜその期間なのか」を必ず確認しましょう。 時系列の主張を見たら、 開始点をずらしても結論が保たれるか(頑健性)を疑うのが批判的読解の基本です。

Q5. 「成功者の 80% は朝 4 時起き!」— 生存者バイアス(架空データ)

架空のビジネス書:「成功した起業家 100 人を調査したら 80 人(80%)が朝 4 時起きだった。 早起きこそ成功の秘訣だ!」

この主張の問題点はどれ?

✅ 正解:生存者バイアス。 この架空データでは、 実は倒産した 900 社の創業者も 720 人(80.0%)が朝 4 時起き。 つまり P(早起き | 成功) = 80% と P(早起き | 倒産) = 80% はまったく同じで、 早起きと成功は無関係です。 「生き残った標本」だけを見ると、 生き残りに共通する特徴が何でも「成功要因」に見えてしまう。 第二次大戦の帰還爆撃機の弾痕分析(Wald)が有名で、 「観測されなかったデータは何か?」と問うのが本質です。

実データ版 Q4 — 「2 年連続の急成長」は本当か

Q4 の「期間の切り取り」は架空データでしたが、SSDSE-B-2026 の実データでも同じことが起きます。全国の延べ宿泊者数を、切り取る期間を変えて描きました。

2 枚の折れ線グラフ: 全国の延べ宿泊者数。左は 2021〜2023 年度だけ、右は 2012〜2023 年度
図2: 全国の延べ宿泊者数(SSDSE-B-2026、47 都道府県の合計、万人泊)。左の 2021〜2023 年度だけを見ると 25,888 → 37,717 → 49,990 万人泊と、前年比 +45.7%、+32.5% の「2 年連続の急成長」。右の 2012〜2023 年度で見ると、2019 年度の 50,098 万人泊から大きく落ち込んだ後に戻っただけで、2023 年度は 2019 年度より 0.2% 少ない。

「2 年連続で 3 割以上の成長」はどちらも計算としては正しい数字です。問題は、起点を落ち込んだ年に置いたことを示していない点にあります。増加率を見たら「どの年と比べているか」「その年は普通の年か」を確かめ、できれば落ち込む前の年(ここでは 2019 年度)との比較も並べます。

💡 直感 — データリテラシーは「読む・問う・使う」の 3 動作

読む(Read):軸・単位・分母・期間・出典を確認してからグラフ本体を見る。 問う(Question):「誰が・何のために・どう測って・何を見せていないか」を必ず自問する。 上の 5 問はすべて「見せていないもの」(原点・第三の変数・分母・過去・脱落者)に仕掛けがありました。 使う(Use):疑って終わりではなく、 正しい表示・正しい指標に直して意思決定につなげる。 各問題の「正しい表示に直す」トグルがこの動作に対応します。

⚠️ よくある落とし穴 — 3 大パターン

🚀 発展 — 統計リテラシー・批判的思考・チェックリスト

統計リテラシーはデータリテラシーの中核部品で、 代表値の使い分け(中心傾向)、 不確実性の読み方(信頼区間・仮説検定の p 値と効果量)までを含みます。 批判的思考(クリティカルシンキング)は「主張・根拠・隠れた前提」を分離して検討する一般技能で、 統計はその強力な道具です。 実務では次のチェックリストを毎回回すことを勧めます:

  1. 出典は?(一次データか、 誰が集めたか)
  2. 母集団と標本は?(誰が含まれ、 誰が抜け落ちているか)
  3. 分母は?(% の裏の実数、 ベースライン)
  4. 期間は?(開始点を変えても結論は同じか)
  5. 軸は?(原点・スケール・単位)
  6. 因果と言えるか?(交絡・逆因果・偶然を排除できるか)
  7. 再現できるか?(データとコードが公開されているか)

⚠️ 9. データに潜むバイアス

⚠️ 9. データに潜むバイアス

9.1 測定の歪み

落とし穴 対処
手法から考え始める必ず問いから。 手法はそのあと。
標本の偏りを無視「誰が、 どう選ばれたか」を必ず確認。
尺度を間違える名義尺度に平均は計算できない。
欠損を機械的に削除欠損パターンを調査。 MNAR ならバイアス。
単位を確認しない単位の取り違いで桁ずれ事故。
単一指標で判断代表値・ばらつき・形状を複数併用。
出典なし出典と取得日を必ず明記。

🏋️ 14. 練習問題

Q1. SSDSE-B-2026 を読み込み、 PPDAC の Plan ステップに沿って「分析したい問い」を 3 つ書きなさい。

具体例:(1) 高齢化率が高い県ほど一人当たり所得は低いか? (2) 持ち家比率の決定要因は何か? (3) 都市規模別の人口動態の特徴は?

Q2. SSDSE-B-2026 の各列について、 尺度水準(名義/順序/間隔/比例)を分類しなさい。
🎯 解説: SSDSE-B-2026(47都道府県データ)でデータリテラシーの基本確認動作を行う。 まずはデータを読み込み、 構造・型・欠損・代表値を「見る」ことが分析の出発点。 ファイルパスは自分の環境に合わせて変更すること。
📥 入力例(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
import pandas as pd
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
print(df.dtypes)
# 都道府県:名義、 一人当たり県民所得:比例、 etc.
📥 入力例: data/raw/SSDSE-B-2026.csv(全 564 行 = 47 都道府県 × 2012〜2023 年度。下は 2023 年度の例) 年度 地域コード 都道府県 A1101(総人口) A1303(65歳以上) ... 2023 R01000 北海道 5092000 1681000 2023 R13000 東京都 14086000 3205000 2023 R47000 沖縄県 1468000 350000
📤 実行例(実測) SSDSE-B-2026 int64 Code object Prefecture object A1101 int64 A110101 int64 ... L322106 int64 L322107 int64 L322108 int64 L322109 int64 L322110 int64 Length: 112, dtype: object
💬 年度の列 SSDSE-B-2026 は int64、Code と Prefecture は object、A1101 以降の統計量は int64 か float64 で読み込まれた。型は尺度水準までは教えてくれないので、年度(間隔尺度)や Code(名義尺度)の列に平均をとってよいかは人が判断する。「都道府県:名義、一人当たり県民所得:比例」のコメントのように、列ごとに尺度を書き出しておく。
Q3. SSDSE-B-2026 でデータ品質チェックを実施しなさい(欠損・重複・分布の概観)。
🎯 解説: SSDSE-B-2026(47都道府県データ)でデータリテラシーの基本確認動作を行う。 まずはデータを読み込み、 構造・型・欠損・代表値を「見る」ことが分析の出発点。 ファイルパスは自分の環境に合わせて変更すること。
1
2
3
4
print('行数 x 列数:', df.shape)
print('欠損:'); print(df.isnull().sum())
print('重複:', df.duplicated().sum())
print(df.describe())
📥 入力例: data/raw/SSDSE-B-2026.csv(全 564 行 = 47 都道府県 × 2012〜2023 年度。下は 2023 年度の例) 年度 地域コード 都道府県 A1101(総人口) A1303(65歳以上) ... 2023 R01000 北海道 5092000 1681000 2023 R13000 東京都 14086000 3205000 2023 R47000 沖縄県 1468000 350000
📤 実行例(実測) 行数 x 列数: (564, 112) 欠損: SSDSE-B-2026 0 Code 0 Prefecture 0 A1101 0 A110101 0 .. L322106 0 L322107 0 L322108 0 L322109 0 L322110 0 Length: 112, dtype: int64 重複: 0 SSDSE-B-2026 A1101 ... L322109 L322110 count 564.000000 5.640000e+02 ... 564.000000 564.000000 mean 2017
💬 564 行 × 112 列で欠損は全列 0、重複行も 0。describe の count 564 は 47 都道府県 × 12 年度を混ぜた件数なので、平均などを県の代表値として読むなら先に年度で絞る。重複 0 は「行全体が一致する行が無い」という意味で、(年度, Code) の組が一意かどうかは duplicated(subset=['SSDSE-B-2026', 'Code']) で別に確かめる。
Q4. ニュース記事の統計グラフを 1 つ選び、 軸・標本・出典について批判的に読解しなさい。

確認ポイント:軸の起点、 サンプリング方法、 期間、 出典の信頼性、 著者の意図、 暗黙の仮定など。

📝 15. レポートの構成例

  1. 背景と問い:なぜこの分析が必要か
  2. データの説明:出典・期間・サンプリング・尺度・欠損
  3. EDA:分布・関連の概観
  4. 方法:分析手法、 前処理、 仮定
  5. 結果:図表 + 要約統計 + 信頼区間
  6. 解釈:何を意味するか
  7. 限界:データ・手法の限界
  8. 結論と次の問い

⚠️ データリテラシーの落とし穴(補強・各 100 文字以上)

① 「平均」だけで分布を語る
所得や住宅価格のように右に長い裾を持つ分布では、 平均値は少数の高所得者に大きく引っ張られて中央値より遥かに大きくなる。 「日本の平均世帯所得 550万円」と聞いても多くの家庭は 400万円台で、 これだけで政策議論をすると現場と乖離する。 必ず中央値・四分位・ヒストグラムを併せて見る習慣を持つこと。
② 標準偏差が大きい=悪いと早合点する
標準偏差は単に「ばらつきの大きさ」を表すだけで、 良い・悪いは文脈次第。 株式の収益率なら大きいとリスク高、 製品検査なら小さいほうが歩留まりが良い、 一方マーケティングのターゲット層分散は広いほうがビジネスチャンスがある。 値だけで判定せず、 単位・スケール・目的を合わせて評価する。
③ サンプルサイズが大きい=信頼できると思う
n=100万人でも、 サンプリングに偏りがあれば結論は歪む。 1936年のリテラリー・ダイジェスト調査は n=240万人だったが、 電話帳と自動車登録者からの回答で富裕層に偏り、 ルーズベルト落選を予測し外した。 一方ギャラップは n=1500 のランダム標本で当選を当てた。 「数」より「代表性」が決定的。
④ グラフの軸を切って差を強調する
棒グラフの y 軸を 0 から始めず 80 から始めると、 80→85 のわずか 5 ポイント差が「圧倒的優位」に見える。 報道・広告でしばしば使われる「視覚的誇張」の典型。 グラフを作るときは必ず y 軸の起点を確認し、 受け手の印象が誤誘導されないか自問する。 ニュース引用時も注意して読む。
⑤ シンプソンのパラドックスを見落とす
全体集計では「処置 A が優位」でも、 部分集団に分けると「全集団で処置 B が優位」になる現象。 病院ランキングや大学入学選考の有名な事例がある。 集団の構成比が偏った場合に発生しやすく、 必ず層別集計を併用する。 集計だけで判断せず、 サブグループの傾向と全体集計の両方を眺める。
⑥ 欠損値を無断で平均で埋める
欠損値を平均で補完すると分散が過小評価され、 続く回帰や検定の標準誤差が嘘の値になる。 さらに欠損のメカニズム(MCAR/MAR/MNAR)によっては、 平均補完自体がバイアスを生み因果関係を歪める。 多重代入法(MICE)や欠損のフラグ列追加など、 メカニズムに応じた方法を選ぶ。
⑦ p-hacking と HARKing で「ストーリー後付け」する
有意になるまで変数組合せ・サブセット・カットオフを変えて検定を繰り返すのが p-hacking、 結果を見てから仮説を作るのが HARKing。 どちらも偽発見率を爆上げする。 事前登録(pre-registration)、 多重比較補正、 検証用ホールドアウトを徹底する。 「最初に決めた仮説」を必ず記録しよう。