第14回: データストーリーテリング
資料のダウンロード
| ファイル | 内容 |
|---|---|
| exercise.py | ハンズオン演習スクリプト |
ヒントの使い方
python exercise.py --hint 1 # 方向性ヒント
python exercise.py --hint 1 --level 2 # より具体的なヒント
python exercise.py --hint 1 --level 3 # コード例
python exercise.py --check # 提出前の自己チェック
演習問題への取り組み方
- 下の講義ノートを読む(事前学習・2時間目安)
exercise.pyを実行してグラフを確認する- 演習問題(5問)に取り組む
python exercise.py --checkで確認するexercise.pyを提出する(締切は授業後1週間)
詰まったとき
解決しない場合は Q&A ページの投稿フォームを使ってください。
講義ノート
1. 本日の到達目標
- データストーリーテリングの3要素(データ・ビジュアル・ナラティブ)を説明できる
- 起承転結の構造を使って、複数のグラフを一貫したストーリーに組み上げられる
- 「データを見せる」と「洞察を伝える」の違いを理解し、実装に反映できる
2. データストーリーテリングの3要素
データストーリーテリングとは、データ分析の結果を「物語」として構成し、聴衆が行動を起こせる形で伝達するコミュニケーション手法です。Brent Dykes(2016)はこれを以下の3要素の重なりとして定義しました。
2.1 データ(Data)
分析の根拠となる事実です。単独では「ただの数字」に過ぎません。
- 適切な集計・変換が行われているか?
- 外れ値や欠損値の扱いが明示されているか?
- データの限界(期間・対象・精度)が説明されているか?
2.2 ビジュアル(Visuals)
データを視覚化した図表です。チャートの種類・色・注釈の選択が、メッセージの伝わりやすさを左右します。
- グラフタイプはデータの構造に合っているか?(分布→箱ひげ、比較→棒、推移→折れ線)
- 最も重要な1点が視覚的に強調されているか?
- アクセシビリティ(色覚多様性・フォントサイズ)に対応しているか?
2.3 ナラティブ(Narrative)
データとビジュアルをつなぐ「語り」です。タイトル・キャプション・注釈・プレゼンの言葉が該当します。
- 「何が起きているか」だけでなく「なぜ重要か」「何をすべきか」まで述べているか?
- 聴衆が行動を取れる具体的な提言があるか?
- 専門用語を使いすぎていないか?
3.「洞察を伝える」vs「データを見せる」
この違いを理解することが、データストーリーテリングの核心です。
3.1 「データを見せる」グラフ(探索的可視化)
探索的可視化は分析者自身のためのものです。目的は「データを理解する」ことで、受け手は自分自身です。
特徴: - すべての変数・カテゴリを網羅的に表示 - タイトルは「~の分布」「~vs ~」などの記述的な形式 - 特定の結論へ誘導しない - Jupyter Notebook などの分析環境で使う
3.2 「洞察を伝える」グラフ(説明的可視化)
説明的可視化は意思決定者のためのものです。目的は「行動を促す」ことで、受け手は分析結果を知らない人々です。
特徴: - 最も重要な1〜2点に絞って強調 - タイトルは「緑化率が高いほど幸福感が向上する」など、主張を含む - 注釈・矢印・色の強調で視線を誘導 - レポート・プレゼン・ダッシュボードで使う
対比の例:
| 項目 | データを見せる | 洞察を伝える |
|---|---|---|
| タイトル | 「場所種別ごとの幸福感スコアの分布」 | 「公園は他の場所より幸福感が1.4点高い」 |
| 色使い | 全カテゴリを異なる色で均等に表示 | 注目すべきカテゴリのみ強調色、他はグレー |
| 注釈 | なし | 最大差・転換点・具体的な数値を注記 |
| 結論 | 示さない | 「公園の増設が市民幸福感の向上に有効」 |
4. 起承転結構造とビジネスレポートへの応用
4.1 なぜ起承転結か
日本語圏の読者は「起承転結」の構造に慣れており、この流れに沿ったレポートは読み進めやすいとされています。ビジネスでは「SCQA(Situation / Complication / Question / Answer)」という類似フレームワークも広く使われます。
4.2 4パネル構成の設計
| パネル | 役割 | グラフタイプ | 問いかけ |
|---|---|---|---|
| 起 | 問題の提示 | 箱ひげ図・棒グラフ | 「現状はどうなっているか?」 |
| 承 | 原因・相関の発見 | 散布図・ヒートマップ | 「なぜそうなっているか?」 |
| 転 | 複雑さ・例外・時間変化 | 時系列・面グラフ | 「常にそうなのか? 条件はあるか?」 |
| 結 | 提言・行動指針 | ランキング・優先度マトリクス | 「では何をすべきか?」 |
4.3 matplotlib.gridspec での実装
from matplotlib.gridspec import GridSpec
fig = plt.figure(figsize=(18, 14))
gs = GridSpec(
nrows=2, ncols=2,
hspace=0.42, # 縦方向の間隔
wspace=0.35, # 横方向の間隔
left=0.07, right=0.97,
top=0.88, bottom=0.06,
)
ax1 = fig.add_subplot(gs[0, 0]) # 左上(起)
ax2 = fig.add_subplot(gs[0, 1]) # 右上(承)
ax3 = fig.add_subplot(gs[1, 0]) # 左下(転)
ax4 = fig.add_subplot(gs[1, 1]) # 右下(結)
# 全体タイトルは fig.suptitle() または fig.text() で追加
fig.text(0.5, 0.96, "レポートのメインメッセージをここに書く",
ha="center", fontsize=17, fontweight="bold")
4.4 タイトルに「主張」を入れるテクニック
タイトルは単なるラベルではなく、そのパネルで伝えるべき「洞察の一文」にします。
| NG(記述的) | OK(主張的) |
|---|---|
| 「場所別幸福感スコア」 | 「公園の幸福感は最も高く、オフィス街の1.3倍」 |
| 「緑化率と幸福感の関係」 | 「緑化率が高いほど幸福感が向上する(r=0.72)」 |
| 「週次幸福感の推移」 | 「公園の幸福感は夏季に特に高まる」 |
| 「優先改善地点」 | 「駅前の高混雑地点3カ所を最優先で改善すべき」 |
5. 期末ダッシュボード課題 — 評価ルーブリック
5.1 課題の概要
共有データ(shared_data.py)を使い、「都市空間の幸福感向上のための政策提言」をテーマとした4〜6パネルのレポート図または対話的ダッシュボードを作成してください。
提出物:
- Pythonスクリプト(.py または .ipynb)
- 生成された図ファイル(.png / .html)
- 200字以内の分析サマリー(テキスト)
5.2 評価ルーブリック(100点満点)
| 評価軸 | 配点 | 5(満点) | 3(標準) | 1(要改善) |
|---|---|---|---|---|
| ストーリー構造 | 25点 | 起承転結(または相当する構造)が明確で、各パネルが論理的につながっている | 一部のパネルでストーリーの流れが不明瞭 | パネルが独立していてストーリーがない |
| 洞察の明確さ | 25点 | 各パネルのタイトルが「主張」を含み、注釈で根拠を示している | タイトルは主張的だが注釈が不足 | タイトルが記述的で洞察が読み取れない |
| アクセシビリティ | 20点 | colorblind 対応パレット・形状の二重符号化・適切なフォントサイズが揃っている | 一部対応しているが不完全 | 色覚多様性への配慮がない |
| データ-インク比 | 15点 | 不要な装飾がなく、データが前面に出ている | 軽微な装飾はあるが許容範囲 | 3D・グラデーション・過剰グリッドがある |
| 技術的正確さ | 15点 | スクリプトがエラーなく実行でき、統計処理が正確 | 軽微なエラーはあるが概ね正確 | スクリプトが実行できない・統計が誤り |
加点(最大10点): - 対話的可視化(Plotly / Altair)を実装している場合: +5点 - WCAG AA 基準のコントラスト比を意識した配色説明がある場合: +5点
5.3 評価の観点(採点者へのメモ)
最も重視するのは「ストーリー構造」と「洞察の明確さ」の合計50点部分です。技術的に複雑なグラフよりも、「なぜこのグラフが必要か」「このグラフは何を主張しているか」が明確なシンプルなグラフを高く評価します。
6. まとめ
| キーワード | 内容 |
|---|---|
| データストーリーテリング | データ・ビジュアル・ナラティブの3要素を組み合わせて洞察を伝えること |
| 説明的可視化 | 意思決定者向けに、特定のメッセージを強調した可視化 |
| 探索的可視化 | 分析者自身が全体像を把握するための可視化 |
| 起承転結 | 問題提示→原因発見→深掘り→提言の4段構成 |
| GridSpec | matplotlib で複数パネルを柔軟に配置するためのレイアウト管理クラス |
| 主張的タイトル | 「何が」ではなく「何を伝えたいか」を一文で表したタイトル |
参考文献
- Dykes, B. (2016). Effective Data Storytelling. Wiley.
- Knaflic, C. N. (2015). Storytelling with Data. Wiley.
- Minto, B. (2009). The Pyramid Principle. Financial Times/Prentice Hall.
- matplotlib 公式ドキュメント: https://matplotlib.org/stable/gallery/subplots_axes_and_figures/gridspec_multicolumn.html