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

🔖 キーワード索引

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

#リテラシー#ストーリーテリング#可視化#コミュニケーション#レポート

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

データストーリーテリング統計分析SSDSE-B-2026前提条件適用範囲落とし穴関連手法Python 実装検証方法

これらのキーワードは「データストーリーテリングの理解 → 適用 → 検証」のプロセスを構成する。 各章で詳しく解説する。

💡 30秒で分かる結論

🍰 まずはやさしく

データの物語を伝える技法です。

相手に納得して動いてもらうために使います。

部活の改善案をグラフで伝えるときなどに役立ちます。

この章では結論と注意点を学びます。

データストーリーテリングは、 数値・グラフ・物語を組み合わせて聞き手の意思決定を促す表現技法。

ここまでが要点です。 ただし実際に使う前に、 このページの「⚠️ よくある落とし穴」で挙げた ストーリーが事実を曲げる/ジャンクチャート/数字の羅列 には必ず目を通してください。 つまずくのは知識が無いときより、 知ってはいたが確認を飛ばしたときです。

📍 文脈:「データストーリーテリング」はどんな場面で出てくる?

🍰 まずはやさしく

分析結果を伝えるための道具です。

正しい分析を相手に届けるために使います。

スマホの利用時間をまとめて発表する場面で使えます。

この章では使う場面や考え方を学びます。

「分析結果が良い」と「伝わる」は別物。 本サイトの再現論文も、 分析(コード)の後段で解釈とレポートを必ず作ります。 そこで活きるのがストーリーテリング。

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

🎨 直感で掴む

🍰 まずはやさしく

映画のような構成で伝える方法です。

相手に直感的に理解してもらうために使います。

買い物の傾向をグラフで見出し付きで伝える例です。

この章ではイメージの掴み方を学びます。

「データストーリーテリング」を最初に学ぶときは、 厳密な定義よりイメージを優先しましょう。 以下は具体例・比喩を用いた直感的理解の入口です。

💡 学習のコツ:上の比喩は厳密ではない点に注意。 直感で全体像を掴んだら、 次の「📐 定義・数式」で正確な意味を押さえ、 最後に「🧮 実値で計算してみる」で実感を伴った理解に到達するのが効率的です。

📐 定義・数式

🍰 まずはやさしく

伝えるための決まった型のことです。

誰にでも伝わる構成を作るために使います。

文化祭の計画を状況と課題に分けて話す例です。

この章では具体的な構成のルールを学びます。

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

【ストーリーテリングの黄金フォーマット】
$$ \text{Situation} \to \text{Complication} \to \text{Resolution} $$
McKinsey の SCR や Pyramid Principle で語られる古典構成。 多くのプレゼンが暗黙にこの型に従う。
📌 読み方のコツ:数式を見たら「左辺は何を定義しているか」「右辺の各項は何の合計・積・比か」を声に出して読み下してみる。 これだけで理解が大きく進みます。

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

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

Situation
現状の事実共有
Complication
問題・葛藤・発見
Resolution
解決策・推奨アクション
KPI
聞き手にとっての関心指標
Call to Action
「次に何をすべきか」
📚 補足:同じ記号でも分野・教科書によって意味が違うことがあります(例: $\hat{y}$ は予測値だが、 統計の文脈では推定量を意味することも)。 不明確なときは、 必ずその文書の記号定義表を確認しましょう。

🧮 実値で計算してみる — 数式に値を入れて手で計算する

データストーリーテリングに数式はないが、 「ストーリーの骨格となる集計指標」を手計算で確認することが理解の核心。 ここでは SCR フォーマット(Situation→Complication→Resolution)に対応する 3 つの指標を SSDSE-B-2026 の 5 県データで手計算する。

使用する数式(ストーリーの強さを定量化する「効果量 Cohen's d」):

【ストーリーの「驚き」を定量化する効果量】
$$ d = \frac{\bar{x}_A - \bar{x}_B}{s_{\text{pooled}}} $$
$\bar{x}_A$: 大都市圏グループの平均、$\bar{x}_B$: 過疎県グループの平均、$s_{\text{pooled}}$: プール標準偏差。 $|d| > 0.8$ で「大きな差」(Cohen 1988)。

📥 使用データ(SSDSE-B-2026 2023年、5県抜粋)

都道府県グループ高齢化率 (%)
東京都大都市圏23.5
神奈川県大都市圏25.6
鳥取県過疎県33.8
島根県過疎県35.7
秋田県過疎県38.6

Step 1: 各グループの平均を計算

大都市圏グループ(n=2): $\bar{x}_A = \frac{23.5 + 25.6}{2} = \frac{49.1}{2} = 24.55$

過疎県グループ(n=3): $\bar{x}_B = \frac{33.8 + 35.7 + 38.6}{3} = \frac{108.1}{3} = 36.03$

Step 2: 各グループの分散・標準偏差

大都市圏 $s_A$: 偏差 = $(23.5-24.55)^2 + (25.6-24.55)^2 = 1.1025 + 1.1025 = 2.205$。 $s_A = \sqrt{2.205/1} = 1.485$

過疎県 $s_B$: 偏差 = $(33.8-36.03)^2 + (35.7-36.03)^2 + (38.6-36.03)^2 = 4.9729 + 0.1089 + 6.6049 = 11.6867$。 $s_B = \sqrt{11.6867/2} = 2.416$

Step 3: プール標準偏差と効果量 d

$$s_{\text{pooled}} = \sqrt{\frac{(n_A-1)s_A^2 + (n_B-1)s_B^2}{n_A+n_B-2}} = \sqrt{\frac{1 \times 2.205 + 2 \times 5.837}{3}} = \sqrt{\frac{13.879}{3}} = \sqrt{4.626} \approx 2.151$$

$$d = \frac{24.55 - 36.03}{2.151} = \frac{-11.48}{2.151} \approx -5.34$$

手計算結果: $d \approx -5.3$(大都市圏の高齢化率が低い方向に 5 標準偏差以上の差)。 $|d| > 0.8$ の閾値を大幅に超え、 「東京 vs 秋田」のストーリーに 統計的根拠 を付与できる。

手計算で得た値と、 下記の Python 実装で算出した値が一致することを確認する。

🎯 このコードでやること:上記 Step 1〜3 の手計算(Cohen's d = −5.3)を numpy で再現し、 一致を確認する。

📥 入力: 大都市圏 [23.5, 25.6]、 過疎県 [33.8, 35.7, 38.6](SSDSE-B-2026 2023年 高齢化率)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import numpy as np

# SSDSE-B-2026 2023年 高齢化率 (5 県)
metro = np.array([23.5, 25.6])    # 東京都, 神奈川県
rural = np.array([33.8, 35.7, 38.6])  # 鳥取県, 島根県, 秋田県

mean_a, mean_b = metro.mean(), rural.mean()
var_a, var_b = metro.var(ddof=1), rural.var(ddof=1)
na, nb = len(metro), len(rural)
pooled_std = np.sqrt(((na-1)*var_a + (nb-1)*var_b) / (na+nb-2))
d = (mean_a - mean_b) / pooled_std

print(f'大都市圏平均: {mean_a:.2f} %')
print(f'過疎県平均  : {mean_b:.2f} %')
print(f'プール SD  : {pooled_std:.3f}')
print(f'Cohen's d  : {d:.2f}  ← 手計算 ≈ -5.3 と一致')
📤 出力 大都市圏平均: 24.55 % 過疎県平均 : 36.03 % プール SD : 2.151 Cohen's d : -5.33 ← 手計算 ≈ -5.3 と一致

💬 Python 出力 d = −5.33 が手計算 d ≈ −5.3 と一致。 $|d| > 5$ は「超大効果量」であり、 「大都市圏と過疎県の高齢化率は、 標準偏差 5 個分以上離れている」というストーリーの数値根拠として説得力が高い。

🧮 数式に値を入れて手で計算する: 観客の理解度推定

合成データで発表前/後の理解度差から効果サイズ (Cohen's d) を計算する。

Step 1: 観客 5 人の理解度 (0-100)

発表前発表後
1307040
2407535
3256035
4508535
5205535

Step 2: 効果量 Cohen's d

差平均 = (40+35+35+35+35)/5 = 36.0 差 SD = √(0.04²+0.16²+0.16²+0.16²+0.16²)/4 ≈ √(0.005)≈ 大まかに 2.24 正確には: dev² = (4)²+(-1)²×4 = 16+4 = 20, s²=20/4=5, s=√5≈2.236 d = 36.0 / 2.236 ≈ 16.10 (極大効果)

🐍 Python で再現

1
2
3
4
5
6
7
8
import numpy as np
before = np.array([30, 40, 25, 50, 20])
after  = np.array([70, 75, 60, 85, 55])
diff = after - before
d = diff.mean() / diff.std(ddof=1)
print(f"差平均: {diff.mean()}")
print(f"差SD: {diff.std(ddof=1):.3f}")
print(f"Cohen's d: {d:.2f}")

📤 実行結果

差平均: 36.0 差SD: 2.236 Cohen's d: 16.10

💬 手計算 (Step 2) d≈16.10 と Python 出力が完全一致。 発表は強い効果。

同じ事実から 3 つの物語 — 出生数の 12 年

データストーリーテリングの核心は「どの切り口を選ぶか」です。 SSDSE-B-2026 の出生数(2012 → 2023)を例に、 すべて正しいのに印象がまったく違う 3 つの語り方を作ってみます。

語り口見せる数字読み手が受け取る印象
A. 全国で語る1,037,165 → 727,269 件、−29.9%「日本全体が一様に 3 割減った」
B. 最も減った県で語る秋田県 −44.8%、岩手県 −41.4%「地方は半減寸前、危機的だ」
C. 最も減らなかった県で語る東京都 −19.6%、大阪府 −24.3%「都市部は持ちこたえている」

3 つとも数字は正確で、SSDSE-B-2026 から直接計算できます。 にもかかわらず、A だけを見せられた読み手は地域差の存在に気づけません。 実際には 47 都道府県の変化率は −44.8%(秋田)から −19.6%(東京)まで 25 ポイントの幅があり、 中央値は −33.3% で、全国値 −29.9% より悪いのです。 全国値が中央値より高く出るのは、東京・大阪など出生数の多い都市部の減り方が小さいからで、 人口の重みが平均を押し上げています。

💬 誠実な語り方は、A・B・C のどれか 1 つを選ぶことではなく、 「全国で −29.9%。ただし県別には −44.8% 〜 −19.6% と 25 ポイントの幅があり、中央値は −33.3%」代表値と散らばりを同時に出すことです。 ストーリーを作る技術は「印象的な 1 つの数字を選ぶ技術」だと誤解されがちですが、 実際には「1 つの数字が隠しているものを、もう 1 行で補う技術」だと考えてください。

もう一点。B と C はどちらも極端値を代表として語る形になっています。 47 個のうち最大・最小を選ぶ行為は、それだけで 選択バイアスそのものです。 「秋田県では」と書くときは、必ず「47 県中最も減少幅が大きい県」と添えてください。 それを書くだけで、読み手は自分で割り引いて受け取れるようになります。

🐍 Python 実装

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

🎯 目的:SSDSE-B-2026 の 2023 年度 47 都道府県データから「高齢化率と死亡率の相関」を散布図化し、 タイトル自体に結論(r ≈ +0.97)を埋め込む「結論を見出しに」型グラフを生成する。
📥 入力data/raw/SSDSE-B-2026.csv (ヘッダ 2 行・47 都道府県、 2023 年度)。 X 軸=高齢化率(65 歳以上人口割合)、 Y 軸=死亡率(死亡数 / 10 万人)を散布図に。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 「結論を見出しに」型グラフ:タイトルに結論を書く
import os
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
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()].copy()
for _c in ['総人口', '65歳以上人口', '死亡数']:
    df[_c] = pd.to_numeric(df[_c], errors='coerce')

# 高齢化率・死亡率は SSDSE にそのままの列が無いので、実在する列から計算する
df['高齢化率'] = df['65歳以上人口'] / df['総人口'] * 100
df['死亡率'] = df['死亡数'] / df['総人口'] * 1000

r = df['高齢化率'].corr(df['死亡率'])
df.plot.scatter(x='高齢化率', y='死亡率', figsize=(7, 4))
plt.title(f'高齢化が進む県ほど死亡率も高い(r={r:+.2f})', fontsize=14)
os.makedirs('figures', exist_ok=True)
plt.savefig('figures/story.png', dpi=120)
print(f'高齢化率と死亡率の相関係数 r = {r:.3f}')
📤 出力 figures/story.png (7×4 インチ・120dpi) タイトル: 「高齢化が進む県ほど死亡率も高い(r=+0.97)」 散布図 47 点、 右肩上がりの強い線形傾向
💬 解釈:タイトルに結論を入れる「ストーリーテリング型タイトル」は、 視聴者が図を 0.5 秒見ただけでメッセージを掴める設計。 ただし因果ではなく相関であること(高齢化 → 死亡率ではなく、 共通因子も影響しうる)を脚注で必ず補い、 「公的統計に基づく観察結果」と明示する。

▶ 実行 を押せばこのページの中でそのまま動きます(ライブラリもデータも同梱済みで、 準備は要りません)。 手元の Python に移して動かすときは pip install matplotlib 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 度回すと、 「用語を読んで分かった気になる」段階から「実際に使える」段階に進めます。 知識は身体で覚えるのが結局のところ最速です。

「代表値だけの物語」を自分で壊してみる

このコードでやること:全国 1 つの数字で語りたくなったときに、 その裏にある散らばりを 5 行で出すためのコードです。 ストーリーを書く前に必ず実行して、自分の主張が中央値・四分位と矛盾しないか確かめます。

📥 入力データ(SSDSE-B-2026 の出生数、2012 年と 2023 年):

2012 年 全国合計 1,037,165 件(東京 106,673 / 秋田 5,911 など 47 県) 2023 年 全国合計 727,269 件
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 「全国 -29.9%」が隠しているもの — 県別の散らばりを出す
import pandas as pd

df = pd.read_csv("data/raw/SSDSE-B-2026.csv", encoding="cp932", header=1)
df = df[df["地域コード"].astype(str).str.match(r"^R\d{5}$", na=False)].copy()
df["出生数"] = pd.to_numeric(df["出生数"], errors="coerce")
df["年度"] = pd.to_numeric(df["年度"], errors="coerce")

a = df[df["年度"] == 2012].set_index("都道府県")["出生数"]
b = df[df["年度"] == 2023].set_index("都道府県")["出生数"]
chg = ((b - a) / a * 100).sort_values()

print(f"全国合計         : {(b.sum() - a.sum()) / a.sum() * 100:+.1f}%")
print(f"県別の中央値     : {chg.median():+.1f}%")
print(f"県別の範囲       : {chg.min():+.1f}% 〜 {chg.max():+.1f}%")
print(f"25%点 / 75%点    : {chg.quantile(.25):+.1f}% / {chg.quantile(.75):+.1f}%")
print()
print("最も減った 3 県:", ", ".join(f"{k} {v:+.1f}%" for k, v in chg.head(3).items()))
print("最も減らない 3 県:", ", ".join(f"{k} {v:+.1f}%" for k, v in chg.tail(3).items()))

📤 実行結果:

全国合計 : -29.9% 県別の中央値 : -33.3% 県別の範囲 : -44.8% 〜 -19.6% 25%点 / 75%点 : -35.2% / -30.1% 最も減った 3 県: 秋田県 -44.8%, 岩手県 -41.4%, 静岡県 -38.4% 最も減らない 3 県: 福岡県 -25.9%, 大阪府 -24.3%, 東京都 -19.6%

💬 読み方:全国合計 −29.9% と県別中央値 −33.3% の 3.4 ポイントのずれが、 「全国で語ると実態より穏やかに見える」ことを数値で示しています。 さらに 25%点 −35.2%、75%点 −30.1% を見れば、真ん中の半数の県は −35.2% 〜 −30.1% という狭い帯に収まっており、全国値 −29.9% はその帯の外(より穏やかな側)にあることが分かります。 ストーリーに書くべきは「−29.9%」ではなく、 「全国では約 3 割減。ただし県別には 2 割減から 4 割半減まで開きがある」という 1 文です。

このコードは出生数以外でもそのまま使えます。 "出生数""婚姻件数""着工新設住宅戸数" に差し替えるだけで、 別の指標について同じ確認ができます。 「全国 1 つの数字を出す前に、必ず散らばりを見る」—— これを習慣にするだけで、誤解を招くストーリーの大半は防げます。

🎮 体験:注釈・強調・順序で「伝わるメッセージ」は変わる

同じ実データ(SSDSE-B-2026 の 2023 年・高齢化率=65歳以上人口÷総人口×100、 10 県抜粋)を使っても、 注釈(基準線・ハイライト・矢印)と結論見出しを足すだけで「ただのグラフ」が「主張が伝わる図」に変わります。 下のトグルを切り替えて体感してください。 さらに「全体→注目→示唆」のステップ送りで語りの順序を、 最後の「y軸切詰め」で強調とごまかしの境界を確認できます。

注釈トグル:
語りの順序: 自由モード (全体 → 注目 → 示唆)
まず全体像から。 トグルはすべてオフ、 ただ 10 県の高齢化率を並べただけの「ただのグラフ」です。 ばらつきは見えますが、 何を伝えたいのかは読み手に委ねられています。
⚖️ 強調 vs ごまかしの境界:
✅ y軸は 0% 起点。 バーの高さは値をそのまま反映し、 東京と秋田の差もありのまま。 これは誠実な強調です。

🧭 直感:データに「文脈」と「焦点」を与える

上の実験でオフ状態のグラフは、 数値としては完全に正しいのに「だから何?」に答えられません。 基準線は「多い/少ないの物差し」という文脈を、 ハイライトと矢印は「どこを見るべきか」という焦点を、 見出しは「何が言いたいか」という結論を与えます。 データストーリーテリングの本質は新しい数値を足すことではなく、 既にある数値に文脈と焦点を重ねる注釈レイヤにあります。

⚠️ 落とし穴:チェリーピッキング・過剰演出・誤解を招く強調

🚀 発展:ナラティブ可視化・注釈レイヤ・オーサリング

このウィジェットは Segel & Heer のナラティブ可視化(martini-glass 構造=著者が順序を導いた後に読み手の自由探索へ渡す)を最小実装したものです。 「注釈トグル」は注釈レイヤ(データ層と分離した強調要素)を、 「ステップ送り」は著者が意図を設計するオーサリングの工程を体験させます。 実務では 注釈インタラクティブ可視化視覚属性複合的なグラフ と組み合わせ、 データ可視化 の素材に物語の骨格を与えます。

⚠️ よくある落とし穴

データストーリーテリングで頻出する失敗は、 (1) ストーリーに合わせて事実を曲げる (チェリーピッキング)、 (2) ビジュアルに凝りすぎて根拠数値が薄い、 (3) 主役のメッセージが拡散して結論が伝わらない、 の 3 つです。 Cole Nussbaumer Knaflic の 5 つの問い (Who/What/How/Visual/Story) を毎回確認すれば、 大半は事前に回避できます。

❌ ストーリーが事実を曲げる
「分かりやすさ」を優先しすぎて、 不確実性・反例を消してはいけない。
❌ ジャンクチャート
3D 円グラフ、 不必要な装飾。 メッセージを薄める。
❌ 数字の羅列
聞き手は数字を覚えられない。 1 スライド 1 数字に絞る。
❌ ターゲット不在
「誰のためのストーリーか」が無いと刺さらない。
🛡 防御策まとめ:「適用条件を確認する」「結果と前提をセットで記述する」「不確実性を必ず併記する」の 3 点を習慣化すれば、 上記の罠の大半は回避できます。

🗺 概念マップ

「データストーリーテリング」は、 データ可視化・ナラティブ・聴衆設計の三位一体。 以下の概念マップで中核概念と隣接領域の包含・対比関係を整理する。

Data Storytelling データ可視化 ナラティブ設計 聴衆分析 BI ツール 統計分析 意思決定支援
データストーリーテリング
📊 データ基盤
SSDSE-B-2026
公的統計
前処理・集計
📖 ナラティブ
SCR 構造
三幕構成
Pyramid Principle
🎨 視覚化
Grammar of Graphics
散布図・棒・箱ひげ
Plotly / matplotlib
👥 聴衆設計
政策担当者
研究者・市民
Call to Action
↕ 包含・依存関係
上流: データリテラシー → データ収集 → EDA
並列: インフォグラフィック / BI ダッシュボード
下流: 政策提言 / 意思決定 / 報告書

SVG 関係図: データストーリーテリングを中心とした概念の包含・上下関係

データストーリーテリング データリテラシー (前提・上流) 探索的分析 (EDA) (発見フェーズ) データ可視化 (並列・手段) BI ダッシュボード (並列・常時) 政策提言 (下流・成果) 意思決定支援 (下流・目的) 報告書・発表 (下流・成果物) 上流 並列 下流
概念データSTとの関係違い・注意
データ可視化手段・部品可視化単独ではストーリーにならない
インフォグラフィック並列 (静的情報伝達)物語構造より情報圧縮に重点
プレゼンテーション媒体・チャネルデータ ST が中身、プレゼンは形式
EDA (探索的分析)上流フェーズEDA で発見 → ST で伝達
データジャーナリズム応用分野報道目的に特化した ST

🔗 隣接手法への橋渡し

「データストーリーテリング」は単独で完結する手法ではなく、 上流・並列・下流の隣接手法と連携することで真価を発揮する。

位置隣接手法接続ポイント実務での順序
上流データリテラシー / EDA「何が面白いか」を発見EDA → DS
並列データ可視化 / BI ツール図表生成・ダッシュボードDS と同時並行
統計的根拠相関分析 / ANOVA「差は偶然か?」の検証DS の「Conflict」補強
下流政策提言 / レポート執筆「Resolution」の実装DS → 報告書

SSDSE コンペでは「EDA (散布図) → DS (三幕) → 統計検定 (ANOVA p=0.0003) → 報告書(Result セクション)」の順が高評価を得やすい。 DS は「つなぎ役」として機能し、 データと聴衆の橋渡しをする。

🌳 手法選択フロー

「データストーリーテリング」は適切な場面で使って初めて効果を発揮する。 以下のフローで「この場面に DS が適切か」を 4 分岐で判断する。

判断基準Yes の場合No の場合
① 伝達相手が人間か?次へ自動処理なら DS 不要
② 行動変容を求めるか?DS が最適。 3 幕構成を採用記録・参照用なら BI ダッシュボード
③ データに驚きの落差はあるか?Discovery Arc or Problem-Solution Arc落差を探す EDA を先行
④ 聴衆の専門知識は?専門家 → 統計指標主体の DS一般 → 比喩・具体例主体の DS

SSDSE-B-2026 コンペでの典型ケース: ① 審査員(人間)→ ② 政策示唆あり(行動変容あり)→ ③ 東京と秋田の高齢化率 15 ポイント差が落差 → ④ 専門家向けに p 値・効果量を添えた DS を選択。

🧠 直感を深める:3 要素の「かけ算」で洞察を運ぶ

冒頭の「🎨 直感で掴む」を一歩進めます。 データストーリーテリングの正体は、 データ(data)・ビジュアル(visual)・ナラティブ(narrative)の 3 要素を足し算ではなくかけ算で重ねる営みです。 かけ算なので、 どれか一つが 0 に近いと全体が伝わらなくなります。

要素担う役割これが欠けると起きること
データ主張の根拠・信頼性の源泉「印象論」になり、 反論で崩れる
ビジュアル一瞬で構造を掴ませる知覚の近道数字の羅列になり、 記憶に残らない
ナラティブ「だから何?」に答え、 行動へ導く図の墓場になり、 意思決定が動かない

鍵は文脈化(contextualization)です。 単独の数値「東京都の高齢化率 22.8%(SSDSE-B-2026・2023年・実測)」は、 それだけでは高いか低いか判断できません。 基準(全国の人口加重平均 29.1%)対比(秋田県 39.1%)を隣に置いて初めて「東京は全国平均より 6 ポイント以上低く、 最高の秋田とは 16.3 ポイントの開きがある」という意味が立ち上がります。 このページ上部の「🎮 体験」ウィジェットで、 同じ実データが注釈レイヤの追加だけで「ただのグラフ」から「主張が伝わる図」へ変わるのを確認できます。

そして 3 要素の先には必ず聴衆に合わせた翻訳行動喚起(call to action)を置きます。 「格差 16.3 ポイント」という事実を、 知事には「地方拠点への介入シナリオ」、 現場には「市区町村別の年齢層変動」へと翻訳して初めて、 グラフの羅列ではない物語になります。

💡 一文でいうと:データストーリーテリングとは「新しい数字を足す」ことではなく、 既にある数字に文脈・焦点・意味・次の一手を重ねる編集作業である。

⚠️ 落とし穴を深掘り(重要)

「物語を強くしたい」という動機は、 容易に事実を曲げる圧力に転化します。 上部の「⚠️ よくある落とし穴」を、 可視化の欺き・認知バイアス・文脈の欠落の 3 系統に整理して深掘りします。 いずれも「悪意」ではなく「善意の熱意」から起きるのが厄介な点です。

落とし穴何が起きるか対処
軸操作(y 軸切り詰め・対数の乱用)見た目の差を数倍に誇張。 量の比較で 0 起点を捨てると印象がねじれる量の比較は 0 起点が原則。 変化率を語るなら軸の非 0 を明示
チェリーピッキング主張に都合の良い県・期間だけ抽出し、 全体分布を歪める代表抜粋(最小・最大・平均を含む)か全数。 逆の結論を支持する数値も並べる
data-ink 比の無視・過剰装飾3D・影・無意味な色でメッセージが薄まる(チャートジャンク)Tufte の data-ink 比を意識し、 意味のないインクを削る
聴衆を無視した専門用語「効果量 d」「p 値」を説明なしに出し、 相手が置き去りになる相手のリテラシーに合わせ翻訳。 専門家には指標、 一般には比喩
相関を因果と語る「高齢化が進む県ほど死亡率も高い」を因果と断言してしまう交絡(年齢構成など)を疑い、 「観察された関連」と明記
確証バイアス・結論先行先に結論を決め、 それを支持するデータだけ集める反証データを能動的に探す。 「間違っていたら何が見えるはず?」を自問
文脈欠如の数値基準・単位・母数のない「裸の数字」で誤解を招く基準線・n・期間・単位を必ず添える

とりわけ軸操作は「強調」と「ごまかし」の境界に立ちます。 上部ウィジェットの「✂ y軸を切り詰める」を押すと、 東京と秋田の実際の差(16.3 ポイント)が見た目で約 2 倍に膨らむ様子を体感できます。 詳細は 誤解を招くグラフ を参照。 過剰装飾と知覚の話は 視覚属性ゲシュタルト原則色の乱用配色 に整理があります。

相関と因果の混同は、 ストーリーが最も「気持ちよく嘘になる」瞬間です。 相関分析 で得た関連を、 因果交絡 の観点で吟味し、 断定を避けます。 聴衆の専門用語問題は、 読み手のリテラシーを測る データリテラシー とセットで考えると事故が減ります。

🛡 一言防御:ストーリーを作ったら「この図は、 私が伝えたい結論の反対を主張する人でも納得する形になっているか?」を一度問う。 これだけで上記の大半を自己検知できる。

🚀 発展:ナラティブ構造・注釈設計・倫理的可視化

最後に、 実装レベルで効く 6 つの発展トピックを整理します。 上部の「🎮 体験」ウィジェットは、 このうちナラティブ構造・注釈レイヤ・プログレッシブディスクロージャーを最小実装したものです。

なお、 これら注釈は 棒グラフ や散布図といった素材(=データ可視化)の上に重ねて初めて機能します。 「効果量で驚きを裏づける」手法は 効果量 を、 全体の素材づくりは データ可視化 を参照してください。(本サイトに独立ページのない「データビジュアライゼーション基礎」等は、 これらの実在ページで代替できます。)

🧪 架空の対比例:以下は仕組みを示すための架空のシナリオです(数値は SSDSE ではありません)。 「売上が前年比 3% 増」という同じ事実を、 経営層には「3% 増=目標未達 2pt、 追加施策 A/B の意思決定を要請」、 現場には「店舗別で +12%〜−5% の分散、 下位 3 店の要因分析へ」と翻訳する——同じ数字でも聴衆で物語が変わる。