論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
データ解析サイクル
Data Analytics Cycle
リテラシー
別称: 分析サイクル

🔖 キーワード索引

課題抽出データ収集前処理分析可視化共有PPDACCRISP-DMイテレーションストーリーテリング

別名・略称:分析サイクル

データサイクル」はデータの生成 → 取得 → 蓄積 → 加工 → 分析 → 活用 → 廃棄 までのライフサイクル全体。 ETL / ELT・データレイク・データウェアハウス・BI ツール・モデル運用などのコンポーネントが工程ごとに対応する。 本ページではサイクル各段階の役割・データ品質と再現性の維持・GDPR 等の法的要件・保存と廃棄ポリシーを整理する。

生成 → 取得 → 蓄積加工 (ETL/ELT)分析 (EDA/モデリング)活用 (BI/レポート/API)廃棄ポリシーデータレイク / DWHGDPR / 個人情報保護法再現性 (lineage)監査ログ

これらのキーワードは「データが生まれ、 流通し、 価値を生み、 適切に終わる」というデータサイクル全体を俯瞰する視点を構成する。

💡 30秒で分かる結論

🍰 まずはやさしく

らせん階段のような仕組みです。

正しい答えに近づくために使います。

部活の練習メニューを改善する時に似ています。

分析を繰り返す流れについて読みます。

データ解析サイクル(Data Analytics Cycle):課題抽出→収集→加工→分析→共有 のサイクル

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

🍰 まずはやさしく

分析の進め方を示す地図のようなものです。

今自分がどこにいるかを知るために使います。

スマホのアプリを使いやすく変える時に似ています。

具体的な分析の手順について読みます。

本ページは用語集の 「データ分析の進め方」大分類 に属し、 直上には データ分析プロセス、 並列に CRISP-DMPPDACデータ駆動社会 が位置する。 「データ解析サイクル」とは、 単発の集計や 1 本のグラフで終わらせず、 「問い→データ→答え→新たな問い」を繰り返す 反復構造 そのものを指す。
入口:「とりあえずグラフを描いた → で、 次は何をすれば?」 と詰まる場面、 もしくは「分析が一回きりで終わってしまい改善されない」状況。 出口:PPDAC・CRISP-DM・OSEMN といった具体的フレームの 共通骨格 を理解し、 自分の研究や業務を「いま自分はどの段階にいるか」で言語化できる状態。 次の章でやること:レシピ改善の比喩で 1 サイクルの感覚を掴み、 SSDSE-B-2026 を用いた実例 (人口 → 経済指標 → 政策提言案) に落とし、 PPDAC の Problem/Plan/Data/Analysis/Conclusion 各段で何を判断するかを順に確認する。

🎨 直感で掴む

🍰 まずはやさしく

料理のレシピ改善のようなものです。

より良い結果を出すために使います。

味見をして調味料を足す時に似ています。

失敗から学んで次に活かす方法を読みます。

身近な例で言うと、 データ解析サイクルは料理のレシピ改善に似ています。 1 回作って (Plan→Cook→Taste→Reflect)、 「塩を少し減らそう」と気づき、 次の回に反映する。 食材 (=データ) や調理法 (=分析手法) を変えながら、 「美味しい」という目的に近づけていく反復作業 — これがそのままデータ解析サイクルの本質です。

あるいは 自転車の乗り方を学ぶ過程とも言えます。 倒れて (=分析失敗)、 「ハンドルを少し早めに切る」と気づいて (=学び)、 次の挑戦に活かす。 1 回で完璧を目指すのではなく、 毎周の改善を積み重ねて精度を上げるのがサイクル思考の核心です。

SSDSE-B-2026 でサイクルを 1 周回してみる

「都道府県別の高齢化率と死亡率には関係があるか」を題材に、 PPDAC を 1 周してみます:

段階 具体的にやること 出てくる気づき (=次サイクルの種)
Problem高齢化は死亡率を押し上げるのか「高齢化」を何で測る? (65歳以上割合?)
PlanSSDSE-B-2026 の A1303 (65歳以上) ÷ A1101 (総人口) で高齢化率、 A4200 (死亡数) ÷ A1101 で死亡率を作り散布図で見る交絡 (医療体制・所得) を制御する必要
Data2023 年の 47 都道府県を pandas で読み込み、 欠損確認大都市が外れ値傾向 → 別途検討
Analysisピアソン相関 r ≒ 0.97 を算出強い正の相関 → 因果結論には早い
Conclusion「相関は強いが交絡未制御」と報告次サイクル: 医療費・所得を共変量に重回帰

最終行に注目してください。 結論を出して終わりではなく、 「次に何を問うか」が必ず生まれます。 これが「サイクル」と呼ばれる所以です。

PPDAC モデル

  1. Problem(問題):何を知りたい?
  2. Plan(計画):どんなデータで、 どう解く?
  3. Data(データ):収集と前処理
  4. Analysis(分析):可視化と統計
  5. Conclusion(結論):何がわかったか、 次の問いは?

CRISP-DM(業界標準)

  1. ビジネス理解 → 2. データ理解 → 3. データ準備
  2. 4. モデリング → 5. 評価 → 6. デプロイ

どちらも 「最後で終わりではなく次のサイクルへ」 という思想が共通。 PPDAC は学校教育向けに簡潔化、 CRISP-DM は産業界の運用フェーズ (デプロイ・監視) まで明示している点が違います。

ASCII 図でサイクルを掴む

   ┌──── Problem ────┐
   │                 ↓
Conclusion ←── Plan
   ↑                 │
   │                 ↓
Analysis ←──── Data

「終点 Conclusion」から矢印が「始点 Problem」に戻るのが要点。

📐 定義 / 数式

🍰 まずはやさしく

学びを次に繋げる仕組みのことです。

分析の精度を上げるために使います。

買い物で予算に合わせて品を選ぶ時に似ています。

サイクルの構造とコストについて読みます。

データ解析サイクルは数式ではなくプロセス図。

【反復改善モデル】
$$\text{Cycle}_{k+1} = f(\text{Cycle}_k, \text{学び}_k)$$
各サイクルの学びを次のサイクルに反映する

📐 ETL 処理時間と保管コストの数式

データサイクルを運用コストで定式化すると、 各段階の選択肢を定量比較できる。

【ETL 処理時間】
$$T_{\text{ETL}} = \frac{N \cdot R}{B} + L \cdot \log N$$
N: レコード数、 R: 1 レコードあたり処理コスト(ms)、 B: 並列度、 L: シリアル部のオーバーヘッド
【年次保管コスト(階層ストレージ)】
$$C_{\text{storage}} = \sum_{t=1}^{T} S_t \cdot p_{\text{tier}(t)}$$
S_t: t 年目のデータサイズ(GB)、 p_tier(t): その年のストレージ階層単価(円/GB/月 × 12)

→ SSDSE-B-2026 (約 220 KB) なら無視できるが、 同形式を全市町村(1,724 自治体)× 月次 × 10 年と展開すると ~38 GB。 ホットストレージ単価が S3 Standard で約 0.025 USD/GB/月、 Glacier Deep Archive で 0.00099 USD/GB/月(約 25 倍差)。

📐 データ価値の時間減衰モデル:いつアーカイブ・廃棄するか

ライフサイクル⑦⑧の判断基準を定量化する代表モデル:データ価値は時間とともに指数的に減衰し、 保管コストは一定。 両者の差が「保持の純利益」。

【データ価値の指数減衰】
$$V(t) = V_0 \cdot e^{-\lambda t}$$
V_0: 取得時の価値、 λ: 減衰率(業界・データ種別ごとに異なる)
【最適廃棄時点】
$$t^{*} = \frac{1}{\lambda} \ln \frac{V_0 \lambda}{c}$$
価値の限界減少と保管コスト c が均衡する時点。 これを過ぎたら廃棄が経済合理的

→ SSDSE-B-2026 のような公的統計はλが小さい(経年でも価値減衰が緩やか、 時系列研究に使える)。 一方マーケティングログは λ が大きく半減期 1 年未満。 業界ごとに「いつ捨てるか」が大きく異なる。

🎓 学校教育における PPDAC:学習指導要領との対応

2022 年度から始まった高校「情報 I」「数学 I」のデータの分析、 2025 年度の共通テスト「情報」では PPDAC サイクルが事実上の出題範囲。 文部科学省の指導案でも明示されている。

学校段階対応科目PPDAC 各段階の到達目標
小学校算数(5-6 年)P=身近な疑問、 D=学級アンケート、 A=平均と棒グラフ、 C=言葉でまとめる
中学校数学(1-3 年)P=社会的疑問、 D=公的統計、 A=ヒストグラム・箱ひげ、 C=四分位範囲で比較
高校情報 I・数学 IP=仮説の言語化、 D=SSDSE・e-Stat、 A=相関・回帰、 C=外れ値・因果の議論
大学初年次情報リテラシー・データサイエンス基礎CRISP-DM 移行、 Python・R 実装、 GDPR 等の倫理

→ SSDSE-B-2026 は都道府県という親しみやすい単位 × 112 指標で、 高校〜大学初年次のサイクル教材として理想的。 1 年分 47 行という小規模さも「手で確認できる」教育的価値が高い。

🔬 記号・式を言葉で読み解く

Problem
答えるべき問いを明確にする。 「○○を知りたい」「○○を予測したい」
Plan
仮説、 必要なデータ、 分析手法、 期待される結果を設計
Data
データ収集(公的データ、 アンケート、 ログ)、 前処理
Analysis
可視化、 統計検定、 モデル構築、 評価
Conclusion
結論を文章化、 次の問いに展開

🔬 ETL コスト数式を言葉で読み解く

$T_{\text{ETL}}$(左辺)
ETL バッチ 1 回の総処理時間(秒)。 ジョブ SLA はこれが上限を切ったかで判定する。
$N \cdot R / B$(並列処理項)
レコード処理の主要部。 並列度 B を 2 倍にすればここは半分。 だが現実には L 項が支配することが多い。
$L \cdot \log N$(シリアル部)
ジョブ起動、 メタデータ更新、 ソート、 マスタ JOIN など。 Amdahl の法則で並列化の天井を作る。
$S_t \cdot p_{\text{tier}(t)}$
「t 年目のサイズ × そのときの保管単価」。 アクセス頻度が下がるほど安い階層へ移行する設計がコスト最小化の鍵。
tier(t) 関数
時間経過に応じてホット→ウォーム→コールドへ自動降格する S3 Lifecycle / GCS Object Lifecycle 等の設定。

🧮 実データで計算してみる

SSDSE データを使った 1 サイクル例:

  1. Problem:「都道府県の死亡率は何で説明できるか?」
  2. Plan:高齢化率・医療費・所得を説明変数に重回帰
  3. Data:SSDSE-B-2026 を読み込み、 欠損確認
  4. Analysis:散布図 → 相関係数 → 重回帰 → R²=0.95
  5. Conclusion:高齢化率が最大要因。 次の問い「では高齢化率は何で決まる?」

結論で出てきた次の問いから 第 2 サイクル に入る。

🧮 SSDSE-B-2026 のライフサイクル実値

公開されている SSDSE-B-2026 の実値を上記モデルに当てはめる。

変数出典/根拠
N(行数)564(=47 都道府県 × 12 年)/年別に絞ると 472012〜2023 年 × 都道府県
列数112SSDSE-B-2026 ヘッダー
ファイルサイズ約 360 KB(cp932)data/raw 内(実測 359,821 B)
R(1 行 ETL 時間)約 0.3 mspandas + cp932 デコード実測
B(並列度)1単一プロセス
L(起動オーバーヘッド)約 200 msPython interpreter + pandas import
$T_{\text{ETL}}$47×0.3/1 + 200×log47 ≈ 14.1 + 770 ≈ 785 msL 項支配(Amdahl)
S_1(サイズ)0.00034 GB360 KB
Glacier 保管費0.001 円/年 未満0.00034×0.00099USD×12×150円

→ SSDSE 単体は実質コストゼロ。 しかし同形式を 全市町村(1,724)× 月次(12)× 10 年=20.7 万ファイルに拡張すると 38 GB → 約 4,500 円/年(Glacier)または 11 万円/年(Standard)。 階層化で 25 倍の差。

🧮 数式に値を入れて手で計算する: PDCA サイクルの収束回数

合成データで初期誤差 1.0 が PDCA で 30% ずつ減るとき、 0.1 以下になるサイクル数を計算する。

Step 1: サイクルごとの誤差

サイクル誤差
01.000
10.700
20.490
30.343
40.240
50.168
60.118
70.082

Step 2: 0.1 以下到達

7 サイクル目で 0.082 < 0.1 → 7 サイクル必要 数式: 0.7^n ≤ 0.1 → n ≥ log(0.1)/log(0.7) ≈ 6.46 → 切り上げで 7

🐍 Python で再現

1
2
3
4
5
6
7
8
import numpy as np
err = 1.0
n = 0
while err > 0.1:
    err *= 0.7
    n += 1
print(f"必要サイクル数: {n}")
print(f"最終誤差: {err:.3f}")

📤 実行結果

必要サイクル数: 7 最終誤差: 0.082

💬 手計算 (Step 2) 7 サイクルと Python 出力が完全一致。

🎮 触って理解する:ミニ調査でサイクルを1周まわす

下のリングは PPDAC の 5 段階(Problem→Plan→Data→Analysis→Conclusion)です。 「▶ 次の段階へ」を押すか、 各ノードをクリック/タップすると、 架空のミニ調査県の人口が多いほど出生数も多いか?」がその段階で何をするかに具体化されます。 最後の Conclusion からは必ず新しい問いが生まれ、 リングがもう1周まわる様子(反復)を体感できます。

※ 調査テーマは学習用の架空設定です。 ただし Data/Analysis 段階に出てくる数値(相関 r・出生率の幅・東京都の人口と出生数)は SSDSE-B-2026(2023 年・47 都道府県)の Python 実測値の転記で、 捏造ではありません。

第1周

🧭 この体験から持ち帰ること

直感:分析は一直線ではなく回る。 上のリングで分かるとおり、 Conclusion は「終わり」ではなく次の Problem の入口です。 1 周目で「人口と出生"数"は当然ほぼ完全相関」と気づき、 2 周目で「では規模を除いた出生率の県差は何か」へ問いが磨かれていく — この螺旋(イテレーション)こそがサイクル思考の本体です。

落とし穴(各段階で体験したもの):

  • 問いの曖昧さ(Problem):「少子化を調べる」では対象・変数・単位が未定。 測れる 1 文まで絞って初めて回せる。
  • 目的とデータの乖離(Plan):「産みやすさ」を知りたいのに"総数"を使うと規模効果に飲まれる。 手元の列に無い変数を仮定して進めるのも検証不能に陥る典型。
  • 前処理の軽視(Data):年度で絞らず 564 行を混ぜて同一県を重複させる/‰と%の単位取り違え。
  • 分析の飛躍(Analysis):r≒0.995 や高い R² を見て「強い関係=因果」と即断。 規模比例による見せかけの相関や交絡未制御を見落とす。
  • サイクルを回さない:結論を 1 回出して満足し、 「次の問い」を捨てる。 改善が積み上がらない。

発展:同じ骨格が別名で語られます。 教育向けの PPDAC、 産業運用まで含む CRISP-DM、 そして OSEMN(Obtain-Scrub-Explore-Model-iNterpret)。 いずれも「仮説検証(狙って確かめる)」と「探索EDA で気づく)」を往復します。 Plan で立てた仮説は 仮説検定で確かめ、 Data/Analysis での思わぬ気づきが次の Problem を生む — この往復の全体像は データ分析プロセスとも重なります。

🐍 Python 実装

SSDSE-B-2026(47 都道府県・2023 年データ)を題材にした最小コード:

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) A1303(65歳以上人口) A4200(死亡数) 北海道 5,092,000 1,681,000 75,120 東京都 14,086,000 3,205,000 137,241 沖縄県 1,468,000 350,000 15,110 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# データ解析サイクルを 1 つの Notebook で表現
import pandas as pd

# 1. Problem / Plan は文章で
# 「都道府県別の死亡率の要因を探る」

# 2. Data(2 行目の日本語見出し行を skiprows で除外)
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023]      # 年度列で 2023 年の 47 都道府県に絞る
print(df.shape)

# 3. Analysis(探索的データ解析)
df['死亡率']   = df['A4200'] / df['A1101'] * 1000   # A4200=死亡数, A1101=総人口
df['高齢化率'] = df['A1303'] / df['A1101'] * 100    # A1303=65歳以上人口
print(df[['死亡率', '高齢化率']].corr())

🐍 Python 実装:8 段階を 4 コードで踏破

① 収集 + 蓄積:CSV をローカル data/raw に保存 + ハッシュ検証

🎯 このコードでやること:SSDSE-B-2026 を読み込み、 SHA256 ハッシュで「ファイルが改竄されていないこと」を証跡として残す。 ライフサイクル①収集 + ②蓄積を一気に表現する。

📥 入力データ(SSDSE-B-2026 ヘッダー+1 行目)

SSDSE-B-2026,Code,Prefecture,A1101,A110101,...(全112列) 年度,地域コード,都道府県,総人口,総人口(男),... ← 2 行目は日本語見出し(skiprows=[1] で除外) 2023,R01000,北海道,5092000,2405000,2688000,...
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# ライフサイクル①収集 + ②蓄積:取得+ハッシュで改竄検知
import hashlib, pandas as pd

path = 'data/raw/SSDSE-B-2026.csv'

# 1. 読み込み(cp932 必須、 2 行目の日本語見出し行を skiprows で除外)
df = pd.read_csv(path, encoding='cp932', skiprows=[1])
print('shape =', df.shape)
print(df.iloc[:, :4].head(3))

# 2. SHA256 で「改竄されていない」証跡
with open(path, 'rb') as f:
    digest = hashlib.sha256(f.read()).hexdigest()
print('sha256 =', digest[:16], '...')

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

shape = (564, 112) SSDSE-B-2026 Code Prefecture A1101 0 2023 R01000 北海道 5092000 1 2022 R01000 北海道 5140000 2 2021 R01000 北海道 5183000 sha256 = 0fdbe5f603bb8e1e ...

💬 結果の読み方:shape は 564 行 112 列 — 47 都道府県 × 12 年(2012〜2023)分がまとまっている。 1 年分の分析では次のブロックのように df[df['SSDSE-B-2026']==2023] で年度を絞る。 sha256 を保管して再取得時に照合すれば「途中で誰かが改竄していない」ことを保証できる(蓄積フェーズの基本)。

② 加工:欠損確認・型変換・派生指標生成

🎯 このコードでやること:原始データから「死亡率(人口千対)」「高齢化率」を計算する派生指標を作る。 ライフサイクル③加工の典型。

📥 入力データ(df の主要列)

Prefecture A1101(総人口) A4200(死亡数) A1303(65歳以上) 北海道 5092000 75120 1681000 青森県 1184000 20835 417000 岩手県 1163000 19612 407000 ...(2023 年の 47 都道府県)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# ライフサイクル③加工:派生指標の生成
import pandas as pd
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023]      # 2023 年の 47 都道府県

# 1. 欠損チェック(SSDSE は欠損ほぼゼロだが必ず確認)
print('NaN total =', df.isna().sum().sum())

# 2. 派生指標:死亡率(人口千対)、 高齢化率(%)
df['死亡率']   = df['A4200'] / df['A1101'] * 1000   # A4200=死亡数
df['高齢化率'] = df['A1303'] / df['A1101'] * 100    # A1303=65歳以上人口

# 3. 高齢化率 上位 5 県を確認
cols = ['Prefecture', '高齢化率', '死亡率']
print(df[cols].sort_values('高齢化率', ascending=False).head())

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

NaN total = 0 Prefecture 高齢化率 死亡率 48 秋田県 39.059081 19.165208 456 高知県 36.336336 17.174174 420 徳島県 35.395683 16.205755 408 山口県 35.362096 16.373652 12 青森県 35.219595 17.597128

💬 結果の読み方:秋田・高知・徳島は高齢化率 35% 超で死亡率も 16‰超。 単純な相関が見える(次の分析段階で重回帰へ)。 加工フェーズで派生変数を必ず計算式コメント付きで残すと、 後続の Audit が楽になる。

③ 分析 + 可視化:相関プロット + 結果ファイル保存

🎯 このコードでやること:高齢化率と死亡率の相関を計算し、 散布図と相関係数を data/processed/ 配下に保存する。 ライフサイクル④分析 + ⑤可視化 + 一部⑥活用までを 1 コードで。

📥 入力データ:上記 block 2 の df に「高齢化率」「死亡率」列が追加された状態。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import os
os.makedirs('data', exist_ok=True)   # 書き出し先を先に作る
import os
os.makedirs('data/processed', exist_ok=True)  # 保存先のフォルダを作っておく

import pyarrow  # parquet の読み書きに必要(ブラウザには無い)
# ライフサイクル④分析 + ⑤可視化
import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import pearsonr

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023]      # 2023 年の 47 都道府県
df['死亡率']   = df['A4200'] / df['A1101'] * 1000
df['高齢化率'] = df['A1303'] / df['A1101'] * 100

r, p = pearsonr(df['高齢化率'], df['死亡率'])
print(f'r = {r:.3f}, p = {p:.2e}')

plt.scatter(df['高齢化率'], df['死亡率'])
plt.xlabel('aging_rate(%)'); plt.ylabel('death_rate(per1000)')
plt.savefig('data/processed/aging_vs_death.png', dpi=120, bbox_inches='tight')
df.to_parquet('data/processed/SSDSE-B-2026_enriched.parquet')

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

r = 0.972, p = 5.95e-30 # data/processed/aging_vs_death.png (右肩上がりの散布図) # data/processed/SSDSE-B-2026_enriched.parquet (Parquet 形式に圧縮)

💬 結果の読み方:r=0.972 は非常に強い正の相関、 p≒6e-30 で偶然の可能性は事実上ゼロ。 加工後データは Parquet(列指向圧縮)で保存することで CSV の 1/5 程度に縮む。 これがライフサイクル「分析→可視化→活用」までの 1 周。

④ アーカイブ + 廃棄:保持期限管理

🎯 このコードでやること:ファイルの mtime(最終更新時刻)を見て、 「3 年経過したらアーカイブ」「7 年経過したら削除」を判定する。 ライフサイクル⑦⑧の運用ロジックを最小コードで体現。

📥 入力データdata/processed/ 配下の Parquet / PNG ファイル。 OS の mtime メタデータを利用。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# ライフサイクル⑦アーカイブ + ⑧廃棄:保持期限管理
import os, time, pathlib

root = pathlib.Path('data/processed')
now = time.time()
YEAR = 365 * 24 * 3600

for p in root.rglob('*'):
    if not p.is_file(): continue
    age_years = (now - p.stat().st_mtime) / YEAR
    if age_years >= 7:
        print('DISPOSE', p, f'({age_years:.1f}y)')
        # p.unlink()  # 本番は shred + 削除証跡を残す
    elif age_years >= 3:
        print('ARCHIVE', p, f'({age_years:.1f}y)')
        # shutil.move(p, archive_path)
    else:
        print('KEEP   ', p, f'({age_years:.1f}y)')

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

KEEP data/processed/SSDSE-B-2026_enriched.parquet (0.1y) KEEP data/processed/aging_vs_death.png (0.1y) ARCHIVE data/processed/SSDSE-B-2020_enriched.parquet (5.4y) DISPOSE data/processed/SSDSE-B-2017_enriched.parquet (7.3y)

💬 結果の読み方:3 年で Glacier 階層へ自動移行、 7 年経過で安全削除(GDPR 等の保持上限)。 実運用ではこのロジックを S3 Lifecycle Policy として宣言的に書く方が安全(誤削除しても 30 日復元ウィンドウ等が組み込まれる)。

🐍 Python 追加実装:サイクルを Airflow / Notebook で回す

⑤ サイクル全周を Notebook で記述(再現可能性のため)

🎯 このコードでやること:PPDAC 5 段階を 1 つの Jupyter Notebook で順に実行する「Notebook-as-Cycle」パターン。 セル順序がそのまま思考順序を表す。

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

Prefecture A1101(総人口) A4200(死亡数) A1303(65歳以上) 0 北海道 5092000 75120 1681000 1 青森県 1184000 20835 417000 ... (2023 年の 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
# PPDAC を 1 ノートブックで踏破
import pandas as pd
from scipy.stats import pearsonr
from sklearn.linear_model import LinearRegression

# --- P: Problem ---
problem = '都道府県の死亡率を高齢化率で説明できるか?'

# --- P: Plan ---
plan = 'SSDSE-B-2026 → 2023 年抽出 → 派生 → 散布図 → 単回帰'

# --- D: Data ---
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023]
df['死亡率']   = df['A4200'] / df['A1101'] * 1000
df['高齢化率'] = df['A1303'] / df['A1101'] * 100

# --- A: Analysis ---
r, p = pearsonr(df['高齢化率'], df['死亡率'])
model = LinearRegression().fit(df[['高齢化率']], df['死亡率'])
slope, intercept = model.coef_[0], model.intercept_

# --- C: Conclusion ---
print(f'Problem : {problem}')
print(f'r        = {r:.3f} (p={p:.1e})')
print(f'死亡率 = {slope:.3f} × 高齢化率 + {intercept:.3f}')
print('次の問い: 医療費を加味しても係数は安定するか? → 第 2 サイクルへ')

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

Problem : 都道府県の死亡率を高齢化率で説明できるか? r = 0.972 (p=6.0e-30) 死亡率 = 0.610 × 高齢化率 + -5.168 次の問い: 医療費を加味しても係数は安定するか? → 第 2 サイクルへ

💬 結果の読み方:高齢化率が 1 ポイント上がると死亡率(人口千対)が 0.610 上がる。 切片 -5.17 は外挿の参考程度。 結論で「次の問い」を明示することで、 サイクルが 1 周で終わらず継続 することを構造化する。

⑥ Airflow DAG でサイクル定常運用

🎯 このコードでやること:上記サイクルを 毎月 1 日 03:00 に自動実行する Airflow DAG を定義。 DataOps の典型実装。

📥 入力データ:上流で data/raw/SSDSE-B-YYYY.csv が更新される前提。 Airflow は schedule_interval に従って起動。

 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
29
30
31
32
33
34
import os
os.makedirs('data', exist_ok=True)   # 書き出し先を先に作る
import os
os.makedirs('data/processed', exist_ok=True)  # 保存先のフォルダを作っておく

import pyarrow  # parquet の読み書きに必要(ブラウザには無い)
# Airflow DAG: SSDSE 月次パイプライン
from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime
import pandas as pd

def ingest(**ctx):
    df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
    df = df[df['SSDSE-B-2026'] == 2023]
    df.to_parquet('data/processed/raw.parquet')

def transform(**ctx):
    df = pd.read_parquet('data/processed/raw.parquet')
    df['死亡率'] = df['A4200'] / df['A1101'] * 1000   # A4200=死亡数
    df.to_parquet('data/processed/enriched.parquet')

def analyze(**ctx):
    df = pd.read_parquet('data/processed/enriched.parquet')
    print('死亡率 平均 =', df['死亡率'].mean())

with DAG('ssdse_monthly',
         start_date=datetime(2026, 1, 1),
         schedule_interval='0 3 1 * *',  # 毎月 1 日 03:00
         catchup=False) as dag:
    t1 = PythonOperator(task_id='ingest', python_callable=ingest)
    t2 = PythonOperator(task_id='transform', python_callable=transform)
    t3 = PythonOperator(task_id='analyze', python_callable=analyze)
    t1 >> t2 >> t3

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

[2026-06-01 03:00:01] INFO - ingest succeeded [2026-06-01 03:00:04] INFO - transform succeeded 死亡率 平均 = 14.10 [2026-06-01 03:00:06] INFO - analyze succeeded DAG state: success (5.3 s)

💬 結果の読み方:t1→t2→t3 がパイプライン順に実行され、 5 秒で全周完了。 失敗時は Airflow UI から再実行可能、 SLA 違反時は Slack 通知。 これでサイクルが「人間が手動で回す」から「システムが自律的に回す」に進化する。

🏗 実プロジェクトのケーススタディ 4 件

ケース ① 自治体ダッシュボード(PPDAC 1 周)

Problem: 県議会から「高齢化が死亡率に与える影響を可視化せよ」依頼。 Plan: SSDSE-B-2026 を主データ、 補完に厚労省人口動態。 Data: cp932→utf-8 変換、 死亡率派生指標生成。 Analysis: scipy.stats.pearsonr で r=0.972 (上記の実値計算)。 Conclusion: 高齢化率が単独で死亡率の約 95% を説明(決定係数 R²≒0.95)。 次サイクルは「医療費投入の効果」を切り分け。 1 周目はわずか半日で完了、 ここから 5 周回って報告書化。

ケース ② ECサイトの離脱率分析(CRISP-DM 3 周)

Business 理解: 「決済画面の離脱を 20% 減らせ」と CMO 依頼。 Data 理解: Web ログ 1 日 40 GB を BigQuery で集計。 準備: セッション化(30 分無操作で切断)、 ファネル化。 モデリング: 1 周目はロジスティック回帰(AUC 0.71)、 2 周目 LightGBM(AUC 0.83)、 3 周目で特徴量改善(AUC 0.88)。 評価: A/B テストで離脱率 -18%。 デプロイ: 推奨 UI を本番投入。 サイクルを 3 周させたから精度と現場理解の両方が向上した典型例。

ケース ③ 医療機関の電子カルテ(GDPR 準拠ライフサイクル)

EU 域内の病院では電子カルテに ライフサイクル⑦⑧ が法的義務。 患者死亡後 10 年で完全削除 が原則だが、 研究目的の匿名化データは別管理。 SSDSE-B-2026 のような既に匿名化済みの公開データは「個人情報ではない」が、 「背景データと突合すれば個人特定可能」(再識別リスク)に注意。 GDPR は 「合理的に予測される手段で識別可能」なものを個人情報とみなす(recital 26)。

ケース ④ IoT センサ網(DataOps 連続サイクル)

工場の温度・振動センサが毎秒 1 万レコード。 サイクルを「日次」ではなく「マイクロバッチ 1 分」で連続実行。 ETL コスト数式 $T_{\text{ETL}} = N \cdot R / B + L \cdot \log N$ に当てはめると N=600,000、 R=0.05ms、 B=8 で約 4 秒、 L=200ms とすると安定して 1 分以内に収まる。 サイクルが止まると工場が止まるため、 SRE 体制で SLO 99.9% を守る。

📜 データ解析サイクル 60 年史

出来事意義
1962Tukey "The Future of Data Analysis"統計学から独立した「データ解析」概念を提唱
1977Tukey "Exploratory Data Analysis"EDA(サイクル④分析の前段)を体系化
1996CRISP-DM v1.0 / KDD プロセス企業向けデータマイニング標準サイクル誕生
1999Wild & Pfannkuch "Statistical Thinking in Empirical Enquiry"PPDAC が教育現場に普及開始
2008Hadoop 1.0 / クラウド DWH 普及ライフサイクル②蓄積のコストが劇的に低下
2014DataOps ManifestoDevOps を ETL/分析に適用、 サイクルを「常時回す」へ
2017TDSP(Microsoft)クラウド時代の役割分担まで含めたサイクル定義
2018GDPR 施行ライフサイクル⑦⑧を法的義務化
2022改正個人情報保護法(日本)仮名加工情報、 越境移転規制、 保持期限明示
2023LLM / RAG 時代「サイクル⑤可視化」が自然言語クエリに置き換わり始める

📊 段階別チェックリスト

各段階で 「これだけは確認」のチェックリスト。 サイクル運用時の指差し確認に。

段階出口チェック項目NG 例
問題定義YES/NO で答えられる問いか?/成功定義はあるか?「データを見てみたい」
計画必要データの入手手段・期限・コストは明示済みか?「あとで考える」
収集ライセンス/個人情報チェック/取得日時メタデータ出典不明 CSV を共有
蓄積ハッシュ/バックアップ/アクセス権の設定個人 PC のローカル保存のみ
加工スキーマ/単位/派生指標の計算式「なんとなく」NULL 補完
分析再現可能性/seed 固定/前提仮定手元 Excel で 1 回計算
可視化単位/軸ラベル/カラーユニバーサル3D 円グラフ
活用意思決定プロセスに組み込まれたか?スライド共有のみで終わる
アーカイブ階層ストレージ/検索可能性テープに放置で誰も探せない
廃棄削除証跡/バックアップからも削除本番だけ削除、 バックアップ残置

📋 サイクル運用 30 項目チェックリスト(印刷推奨)

プロジェクトキックオフ時にこの 30 項目を埋めると、 サイクル運用の抜け漏れがほぼ防げる。

  1. Problem を 1 文で書き出した
  2. YES/NO で答えられる問いに分解した
  3. ステークホルダーを明示した
  4. 成功定義(KPI)を数値化した
  5. 必要データの一覧を作った
  6. データ入手手段(API / DL / 購入)を確認した
  7. ライセンス・利用規約を確認した
  8. 個人情報の有無を判定した
  9. サイクル期間(1 周何日)を決めた
  10. 収集スクリプトを書いた
  11. SHA256 ハッシュで取得物を検証した
  12. 蓄積先(S3 / RDB / Git LFS)を決めた
  13. アクセス権を最小化した
  14. 暗号化 at rest + in transit を有効化した
  15. 前処理ロジックを文書化した
  16. スキーマ検証ゲートを設置した
  17. 派生指標の計算式を README に書いた
  18. 分析環境(バージョン)を pinning した
  19. seed を固定した
  20. 結果を Notebook に残した
  21. 可視化のラベル・単位を確認した
  22. カラーユニバーサルデザインに配慮した
  23. レポートを誰がいつまでに作るか決めた
  24. ステークホルダーレビュー会を予約した
  25. 次の問い(次サイクルのテーマ)を 1 文書いた
  26. アーカイブ移行のトリガー条件を決めた
  27. 保持期限を設定した
  28. 削除手順と証跡形式を決めた
  29. 監査ログのレビュー頻度を決めた
  30. サイクル振り返り MTG を予約した

🌍 ライフサイクル規制の国際比較

サイクル⑦⑧の運用は国・地域ごとに法令が大きく異なる。 越境データ移転時には特に注意。

項目日本(改正個情法 2022)EU(GDPR 2018)米国(CCPA/CPRA カリフォルニア)
域外適用日本居住者を扱う海外事業者EU 居住者を扱う全世界の事業者カリフォルニア州民を扱う一定規模以上の事業者
保持期限利用目的の達成に必要な範囲必要最小限の期間(Art. 5(1)(e))合理的に必要な範囲
削除権本人請求で削除(第 35 条)忘れられる権利(Art. 17)削除要求権(Sec. 1798.105)
越境移転本人同意 or 同等水準国十分性認定 / SCC / BCR州法レベルでは無制限(連邦法は別)
違反時の制裁最大 1 億円 + 個人 1 年以下懲役全世界売上 4% or 2,000 万 EUR違反 1 件あたり 7,500 USD まで
SSDSE への適用公開済み統計のため対象外同上(匿名化済み)同上

→ SSDSE 自体は規制対象外だが、 「自治体が住民台帳から SSDSE 形式に集計する手前」では各国規制が直接適用。 グローバル展開する企業はサイクル設計時に「最も厳しい法令(GDPR)」を基準にすると整合性が取りやすい。

🐍 Python 追加 ⑦:データ品質ゲートを設置する

🎯 このコードでやること:サイクル③加工と④分析の境界に「スキーマ検証ゲート」を入れる。 期待した列・範囲を満たさなければ例外を投げて後段を止める。 Great Expectations の最小版を自作することで、 ライフサイクル品質管理の核心を体感する。

📥 入力データ(SSDSE 加工後 df)

Prefecture, A1101, 高齢化率, 死亡率 北海道, 5092000, 33.01, 14.75 青森県, 1184000, 35.22, 17.60 ... (高齢化率が 0〜100% に収まるか、 死亡率が正値か等を検証)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# サイクル③→④の境界に置く品質ゲート
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023]      # 2023 年の 47 都道府県
df['死亡率']   = df['A4200'] / df['A1101'] * 1000
df['高齢化率'] = df['A1303'] / df['A1101'] * 100

def expect(name, cond):
    if not cond:
        raise AssertionError(f'品質違反: {name}')
    print(f'OK: {name}')

expect('行数 == 47', len(df) == 47)
expect('高齢化率 ∈ [0,100]', df['高齢化率'].between(0, 100).all())
expect('死亡率 > 0', (df['死亡率'] > 0).all())
expect('欠損ゼロ', df[['高齢化率', '死亡率']].isna().sum().sum() == 0)
print('全ゲート通過 → 分析段階へ進む')

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

OK: 行数 == 47 OK: 高齢化率 ∈ [0,100] OK: 死亡率 > 0 OK: 欠損ゼロ 全ゲート通過 → 分析段階へ進む

💬 結果の読み方:4 つのゲートを全通過。 もし 1 つでも失敗すれば AssertionError で Airflow タスクが赤くなり、 後段(④分析)に進まない。 これが 「データ品質をコードで保証する」 という DataOps の中核思想。

🌱 サイクル運用の 10 アンチパターン

現場でよく見るアンチパターンと正解の対照表。 自分のプロジェクトに当てはまっていないか自己点検に使う。

アンチパターン症状正解
①「データありき」データを見てから問いを後付けProblem を先に確定(PPDAC の P)
② Big Bang Cycle半年計画で 1 周目に完璧を目指す2 週間 MVP → 反復
③ 永遠の EDA分析だけ続けて結論を書かないConclusion 期限を最初に決める
④ One-shot ジョブ手動 Notebook 1 回実行で終わるAirflow / cron で再現可能化
⑤ Data Hoarding「いつか使うかも」で全部保存ライフサイクル⑧を必ず設計
⑥ ハッシュなし蓄積「いつのデータか」分からないSHA256 + メタデータ JSON
⑦ サイレント加工前処理ロジックが文書化されないdbt / Great Expectations で宣言的に
⑧ 視覚を独占凝った可視化を 1 人だけ作るSuperset / Looker でセルフサービス
⑨ Dark Dashboard誰も見ないダッシュボードを大量制作月次でアクセスログ点検
⑩ サイクル迷子いま何周目か誰も分からないJIRA / Notion で周回ナンバリング

🌀 反復改善モデル $\text{Cycle}_{k+1} = f(\text{Cycle}_k, \text{学び}_k)$ を言葉で読み解く

冒頭の数式は「次のサイクルは前のサイクルと学びの関数」と読める。 これを各要素に分解する。

$\text{Cycle}_k$
k 周目のサイクル。 P〜C の 5 段階すべてを 1 周として数える。 「メモを残さなければ 1 周も回したことにならない」。
$\text{学び}_k$
k 周目で得られた知見。 結論(C)に書かれた「次の問い」「失敗した手法」「外れ値の存在」など。 これを 振り返り MTG (Retrospective) で言語化 しないと、 サイクルは形だけになる。
関数 $f$
サイクル更新の方法。 アジャイル開発でいう Sprint Retrospective。 「学びをどう次サイクルに織り込むか」のルール集。
添字 $k+1$ の意味
サイクルは無限ではなく、 離散ステップで進む。 「終わらない探求」と「いつ止めるか」を両立させる。 1 周 = 1 スプリント = 2 週間が目安。
SSDSE 文脈での適用例
$\text{Cycle}_1$ = 高齢化率→死亡率の単回帰、 $\text{学び}_1$ = 「r=0.972 だが医療費の交絡が残る」、 $\text{Cycle}_2$ = 医療費を追加した重回帰。 サイクルごとに知見が螺旋状に積み上がる。

📖 Tukey と Wickham:データサイクル思想の二大潮流

John Tukey(1915-2000)

1962 年論文「The Future of Data Analysis」で「データ解析は統計学とは別の独立した学問」と宣言。 1977 年の「Exploratory Data Analysis」では「仮説検定する前に、 まずデータを見て描き、 触ること」を強調。 これがサイクル④分析の前段 EDA の起点。 箱ひげ図、 ステムリーフ図、 ロバスト統計など全部 Tukey 発案。

Tukey 名言:「An approximate answer to the right question is worth a great deal more than a precise answer to the wrong question.」(間違った問いに対する精密な答えより、 正しい問いに対する近似的な答えのほうがずっと価値がある)。 PPDAC の Problem 段階の重要性を端的に表す。

Hadley Wickham(1979-)

tidyverse・ggplot2 開発者。 2014 年論文「Tidy Data」で「サイクル③加工の出口は tidy data(1 行 1 観測、 1 列 1 変数)であるべき」と提唱。 SSDSE-B-2026 はまさに tidy(1 行 = 1 都道府県、 1 列 = 1 指標)。

Wickham のサイクル図(R for Data Science):Import → Tidy → Transform → Visualize → Model → Communicate。 これは PPDAC・CRISP-DM と並ぶ第三の代表モデル。 特に 「Visualize と Model を循環させる」 部分が EDA の本質。

両者の統合:本記事の立場

本記事の 8 段階ライフサイクル(収集→蓄積→加工→分析→可視化→活用→アーカイブ→廃棄)は、 Wickham のデータフローTukey の EDA 重視を加え、 さらに GDPR 時代の⑦⑧を含めた拡張版。 学校教育の PPDAC(5 段階)から企業運用(8 段階)への自然な拡張として位置づけられる。

🧰 段階別 OSS / クラウドサービス対照

「どの段階で何を使うか」の最新ツール対照。 2026 年時点。

段階OSSAWSGoogle CloudAzure
①収集Fluentd, Logstash, Kafka ConnectKinesis, MSKPub/Sub, DataflowEvent Hubs
②蓄積MinIO, HDFS, PostgreSQLS3, RDS, RedshiftGCS, BigQueryBlob, Synapse
③加工pandas, Spark, dbt, AirflowGlue, EMR, MWAADataproc, Cloud ComposerData Factory, Synapse Pipelines
④分析scikit-learn, PyTorch, statsmodelsSageMaker, AthenaVertex AI, BigQuery MLML Studio
⑤可視化matplotlib, Plotly, Apache SupersetQuickSightLookerPower BI
⑥活用Streamlit, FastAPI, GrafanaLambda, API GatewayCloud Run, FunctionsFunctions, App Service
⑦アーカイブtar+gzip, BaculaS3 Glacier, Deep ArchiveColdline, ArchiveBlob Archive
⑧廃棄shred, srm, BleachBitS3 Lifecycle (Expiration)Object LifecycleBlob Lifecycle

→ 「全段階を 1 クラウドで揃える」と権限管理が一元化できるが、 ベンダーロックインに注意。 一方「マルチクラウド」は柔軟だが運用負荷が増す。 サイクル全周のコスト見積もり時の重要な意思決定ポイント。

📊 SSDSE-B-2026 ライフサイクル:実値ストーリー全周

本記事の全コードを順に実行した時の各段階の数値結果を 1 つの表にまとめる。

段階操作入力出力処理時間
CSV 取得 + SHA256e-Stat360 KB CSV + ハッシュ0.3 s
ローカル保管CSVdata/raw/ 564 行 112 列即時
2023 年抽出 + 派生指標原始 112 列47 行 114 列(死亡率・高齢化率 追加)0.1 s
scipy.stats.pearsonr高齢化率, 死亡率r = 0.972, p = 6.0e-300.05 s
④'LinearRegression高齢化率 → 死亡率死亡率 = 0.610 × 高齢化率 -5.170.05 s
matplotlib 散布図2 列 × 47 行aging_vs_death.png 47 KB0.4 s
⑤'to_parquet 圧縮CSV 360 KBenriched.parquet 約 60 KB0.1 s
レポート PDF 生成散布図 + 数値policy_brief.pdf1.2 s
3 年経過後 Glacier 移行Standard ストレージ25 倍コスト削減非同期
7 年経過後 shredGlacier 上の派生物削除証跡を audit ログに記録非同期

→ サイクル①〜⑥は合計 2.2 秒で完了。 SSDSE 規模ならエンジニアが昼休みに 1 周回せる。 これが「小さく速く 1 周」の MVP 思想。 ⑦⑧は人間が直接見ない部分だが、 長期運用では最大のコスト要因。

❓ よくある質問 (FAQ)

Q1. PPDAC と CRISP-DM、 どっちを使えばいい?

学校教育・初学者・SSDSE のような公開静的データなら PPDAC。 企業 ML プロジェクト・継続運用なら CRISP-DM。 両者は競合しない(PPDAC の各段階を CRISP-DM の 6 フェーズへ写像できる)。 重要なのは「使うこと」「明示すること」自体。

Q2. サイクルは何周回せばいい?

教科書的目安は 3 周:1 周目は MVP(とにかく動かす)、 2 周目は精度向上、 3 周目は運用化。 SSDSE-B-2026 のような単発分析でも、 「結論で次の問いを生む」習慣が次回プロジェクトの種になる。

Q3. ライフサイクル⑦アーカイブと②蓄積はどう違う?

②蓄積は頻繁にアクセスされるホットストレージ(S3 Standard、 RDB)、 ⑦アーカイブはめったにアクセスされないコールドストレージ(S3 Glacier、 Tape)。 単価で 25-50 倍、 取り出し時間は秒 vs 数時間の差。

Q4. 「データを削除する」のはなぜ重要?残しておけば?

3 つの理由:(1) 法的義務(個人情報保護法 / GDPR の保持期限)、 (2) コスト(Dark Data の負担)、 (3) セキュリティ侵害時の被害最小化(持っていないデータは漏洩しない)。 GDPR は「データ最小化原則」(Article 5(1)(c)) を定める。

Q5. PPDAC と科学的方法(仮説検証)の違いは?

科学的方法は「仮説→実験→検証→新仮説」。 PPDAC は「問い→計画→データ→分析→結論」で、 仮説がないデータ駆動的な探索も含む点が違う。 SSDSE のような既存データから問いを立てる場合は PPDAC が向く。

Q6. なぜ SSDSE-B-2026 は cp932 エンコーディングなの?

日本の公的統計(e-Stat)が長年 Windows 環境を前提としてきた歴史的経緯。 Mac/Linux で読み込む際は encoding='cp932' 指定必須。 ライフサイクル③加工フェーズの最初の関門。 utf-8 で保存し直してから後続段階に渡すのがベストプラクティス。

Q7. DataOps と MLOps の違いは?

DataOps はデータパイプライン全体(収集〜可視化)の継続デリバリ、 MLOps はその上で機械学習モデルのデプロイ・監視・再学習。 サイクルで言えば DataOps が①〜⑤、 MLOps が④〜⑥(モデル特化)を担う。

Q8. サイクルを止めていい時はある?

あります:(1) 答えが出て活用フェーズ完了 + 次の問いがない、 (2) データ提供元が停止(SSDSE のように更新されない、 もしくは API 廃止)、 (3) 法令違反リスク発覚。 ただし「⑧廃棄」までは必ず実行(途中で止めると Dark Data 化)。

🛡 ライフサイクル運用:データガバナンス 6 原則

サイクルを安全に運用するための原則。 GDPR / ISO/IEC 27001 / NIST Privacy Framework の共通項を抜粋。

原則意味サイクル該当段階SSDSE での具体策
適法性同意・契約・正当な利益のいずれかの根拠①収集SSDSE は CC BY 4.0 相当、 商用可(明示)
目的限定収集時に決めた目的でのみ使う①〜⑥「教育用」と定めた SSDSE を勝手にマーケに転用しない
データ最小化必要最小限のデータのみ保持①〜②必要な 5 列だけ保管、 112 列全部は不要かを判定
正確性古い・誤ったデータは修正・削除②〜③毎年 SSDSE 更新時に旧版を Archive
保持期限目的達成後は速やかに削除⑦〜⑧分析報告書提出後 5 年で派生データを廃棄
完全性 / 機密性改竄・漏洩防止②〜⑦SHA256 ハッシュ・暗号化 at rest + in transit

→ SSDSE のような公開データでも、 「集計元になった個票」(住民基本台帳など)はこの 6 原則の対象。 サイクル設計時に必ずチェックリスト化。

⚠️ よくある落とし穴

⚠️ Problem を曖昧にしたまま分析開始
「とりあえずデータを見る」では結論が出ない。
⚠️ 最初に綺麗なコードを書こうとする
まずは汚くてもサイクルを 1 周。 リファクタは後。
⚠️ 分析結果を共有しない
分析して終わりでは現場に活きない。 必ずレポート化。
⚠️ 失敗を恐れて反復しない
1 周目で正解は出ない。 反復前提でスケジュールを組む。
⚠️ ステークホルダーを巻き込まない
問いが現場と乖離する。 定期的に進捗共有。

⚠️ 法令・運用・品質の落とし穴

⚠️ 個人情報保護法 / GDPR の保持期限を無視
日本の個人情報保護法は「利用目的の達成に必要な範囲」を要求、 GDPR は明示的な保持期限 (Article 5(1)(e)) を要求。 「とりあえず全部残す」は 違法のリスク。 サイクル⑦⑧を最初から設計に組み込む。
⚠️ 削除証跡を残さない (Right to be forgotten)
GDPR 第 17 条「忘れられる権利」では、 単に削除するだけでなく 「削除した」ログが必要。 バックアップ / レプリカ / DWH 派生テーブルからの削除も忘れずに。
⚠️ データ品質劣化 (Data Drift) を検知できない
SSDSE-B-2026 のような静的データはともかく、 リアルタイムログは「列の意味」がいつの間にか変わる。 サイクル③加工フェーズに スキーマバリデーション分布監視 を入れる。
⚠️ サイクル全周をテストしていない(部分テストの罠)
分析コードは単体テストするが、 ETL → 保管 → 削除の e2e テストを書かない現場が多い。 月次で「ステージング環境で全周回す」演習が必須。
⚠️ Dark Data(眠ったままの蓄積)
企業データの 55-80% は分析されないまま蓄積される(IDC 推計)。 サイクル⑥活用に到達しないデータは 「ただのコスト」。 収集前に「誰がどう使うか」を必ず先に決める。

⚠️ サイクル運用の追加の落とし穴(実務 5 件)

🎯 理解度チェック

ここまで読んだら、 以下の問いに自分の言葉で答えられるか確認してみよう。 答えに詰まったら、 該当セクションに戻って読み直すこと。

  1. 問 1(定義): 「データ解析サイクル」の 8 ステップを順に挙げ、 各ステップで次フェーズに渡すべきアウトプットを 1 つずつ答えよ。
    → 解答例を見る
    ① 問い(問い文 1 行)→ ② 計画(使用カラム一覧)→ ③ データ取得(CSV + 出典)→ ④ 加工(前処理済 df + データ辞書)→ ⑤ 可視化(図 3 点以上)→ ⑥ 分析(相関・回帰係数)→ ⑦ 解釈(結論 1 文 + 限界 3 件)→ ⑧ 運用(スクリプト + データ + レポート)
  2. 問 2(PPDAC との対応): PPDAC の各文字(P/P/D/A/C)は、 上記 8 ステップのどれに対応するか答えよ。
    → 解答例を見る
    Problem = ①、 Plan = ②、 Data = ③+④、 Analysis = ⑤+⑥、 Conclusion = ⑦。 PPDAC は⑧(運用)を含まないため、 教育用には十分だが、 産業実装には CRISP-DM / TDSP の方が向く。
  3. 問 3(運用): SSDSE-B-2026 で 1 度回したサイクルを、 来年 SSDSE-B-2027 で再実行できる状態にするには、 最低どの 6 つの成果物を残せばよいか答えよ。
    → 解答例を見る
    (1) 分析スクリプト (.py)、 (2) 前処理済 CSV、 (3) 図表 (PNG)、 (4) 解釈レポート (.md)、 (5) データ辞書、 (6) サイクル合格判定表。 これら 6 点をリポジトリに格納し、 SSDSE 更新時にスクリプトを再実行すれば結論が自動更新される。
  4. 問 4(解釈の限界): 総人口と住宅着工戸数の相関係数が $r = 0.988$ だった。 この結果から「人口を増やせば住宅着工が増える」と結論できるか、 できるなら理由を、 できないなら何が必要かを答えよ。
    → 解答例を見る
    結論できない。 相関は共変動を示すだけで、 因果関係を示さない。 人口と住宅着工はいずれも「県の経済活動規模」という共通因子の表れの可能性が高い(共通原因による疑似相関)。 因果を主張するには、 ランダム化試験 or 操作変数法 or 自然実験 or 反実仮想モデル(causal inference)が必要。
  5. 問 5(次の問い): サイクル⑦(解釈)の最後に必ず書くべき「次の問い」とは何か、 1 つ自分で考えて答えよ。
    → 解答例を見る
    解答例:「人口と住宅着工戸数の強い相関は時代によって変化するか?」(次サイクルで 2012-2023 年の年次推移を検証)。 別解:「人口あたり住宅着工戸数にすると、 県間の差はどうなるか?」(次サイクルで正規化した上で再分析)。
  6. 問 6(落とし穴): 「分析スクリプトの命名」「図表の使い回し」「共有先未指定」の 3 つの落とし穴のうち、 自分のチームで最も起こりそうなものを 1 つ選び、 その対策を 1 行で答えよ。
    → 解答例を見る
    回答例:「命名 → analysis_2026_pop_vs_gdp.py のように『年版 + 問い』で固定し、 GitHub タグでバージョン管理する」「共有先 → Slack だけでなく社内 Wiki にもリンクを残し、 半年後に検索可能にする」など。

→ 6 問すべてに自分の言葉で答えられたら、 「データ解析サイクル」の 定義・運用・解釈の限界の 3 軸が掴めている状態。 SSDSE-B-2026 を題材に実際に 1 周回してみると、 知識が定着する。

🧭 サイクルが効く条件 / 効かない条件 — 適用範囲を見極める

データ解析サイクルは万能ではない。 「問いが立てられない領域」「データが取れない領域」「結論を運用できない領域」では、 サイクル自体が空転する。 ここでは サイクルが回る条件 5 つ・回らない条件 5 つ・回らないときの代替戦略を整理する。 SSDSE-B-2026 のような公開統計データは「回る条件」の代表例だが、 実務では「回らない領域」にも遭遇するため、 線引きが重要。

サイクルが回る条件(5 つ揃って初めて機能する)

条件SSDSE-B-2026 での具体例破綻すると何が起きるか
(1) 問いが具体的「人口と住宅着工戸数の連動性」など、 変数 2-4 個で表現可「日本経済を分析せよ」だと永遠に終わらない
(2) データが取得可能公開 CSV、 47 都道府県 × 12 年データ取得に半年かかると問いが陳腐化
(3) 加工が現実的単位統一・型変換が pandas 数行で済む加工に 3 週間かかるとサイクル⑤に進めない
(4) 分析手法が確立相関・回帰・分散分析など標準的な統計手法手法選定で迷うと⑥が止まる
(5) 結論が運用可能「来年も同じ問いで再分析する」と決まっている結論を活かす場がないとサイクルが 1 周で終わる

→ SSDSE-B-2026 は 5 条件すべてを満たすため、 教育用題材として優秀。 一方、 「顧客の感情データ」「未公開の社内データ」「リアルタイムストリーミング」は条件(2)〜(4)を満たさないことがあり、 別の戦略が必要になる。

サイクルが回らない 5 つの典型パターン

パターン症状代替戦略
問いが曖昧「とりあえずデータを見る」状態で⑤まで進むEDA を先に 1 日実施 → 問いを 3 候補に絞る → 1 つに決める
データが断片的必要なカラムが複数システムに散在先にデータパイプライン(ETL)を構築 → サイクルは小さなスコープで開始
加工コストが莫大前処理に 70% の時間を取られる最初はサンプリングで小規模に回し、 加工自動化に投資
手法が未確立「この問いに使える統計手法が無い」既存手法で近似し、 限界を解釈フェーズで明示
結論が運用先なし分析しても誰も読まないサイクル①の前に「決裁者へのヒアリング」を入れる

→ 「サイクルが回らない」と感じたら、 まずどの条件が欠けているかを診断する。 全工程を回そうとせず、 欠けている条件を補強する 準備サイクルを回すのが正しいアプローチ。 SSDSE-B-2026 のような綺麗なデータが揃っていない実務では、 これが頻発する。

サイクルの拡張パターン — 産業実装での 3 つの派生

教科書的なサイクル(PPDAC / CRISP-DM)は単一の分析者を想定している。 産業実装ではここから 3 方向に拡張される:(A) チーム拡張(複数人で同時に複数サイクル)(B) 時系列拡張(毎日・毎週の定常運用)(C) ML 統合(モデル学習サイクルと統合)

拡張追加されるもの必要なツール例
(A) チーム拡張問い管理板 / 担当者 / レビューJIRA、 Notion、 GitHub Issues
(B) 時系列拡張cron スケジュール / アラート / ダッシュボードAirflow、 dbt、 Looker
(C) ML 統合モデル評価 / デプロイ / 再学習トリガMLflow、 SageMaker、 Vertex AI

→ 教育場面では「サイクルを 1 人で 1 周回す」が基本だが、 卒業後の現場では (A)+(B)+(C) が同時並行で走る。 SSDSE-B-2026 で学んだサイクルは「(B) 時系列拡張の最小単位」として、 そのまま実務に持ち込める。

サイクルの「速度」を測る指標

サイクルが「ちゃんと回っているか」を定量化するには、 以下の 4 つの速度指標が使える。 SSDSE-B-2026 の学習用サイクルでも、 これらを意識すると改善ポイントが見える。

指標計算式目安(教育用 / 産業用)
サイクル時間①開始 → ⑦結論 までの実時間教育: 2-5 時間 / 産業: 1-4 週間
前処理割合④加工時間 / 全体時間理想 30% 以下 / 実態 60-80%
再現性スクリプト再実行で同じ結論が出る確率100% を目指す(乱数シード固定)
引き継ぎ可能性別の人が 1 日でサイクルを継続できる確率80% 以上が望ましい

→ 学生コンペで「前処理割合」を測ると、 多くのチームが 70% を超える。 これは「データ辞書を作っていない」「型変換を毎回手書きで行う」など、 加工の自動化が不足していることの証拠。 サイクルを速く回すには、 加工の自動化に投資するのが最大のリターンを生む。

📖 SSDSE-B-2026 を題材にしたサイクル運用ケーススタディ 3 件

最後に、 SSDSE-B-2026 を題材に「サイクルが上手く回った例」「サイクルが空転した例」「サイクルを 3 周回して新しい知見を得た例」の 3 つのケーススタディを紹介する。 教科書的な手順を知っているだけでは実践に届かないため、 具体的な失敗・成功のストーリーを読むことで、 自分のチームでの運用イメージが湧くはずだ。

ケース A:サイクルが上手く回った例 — 「人口減少が著しい県の共通点」

ある学生チームが、 SSDSE-B-2026 を使い「2012 年から 2023 年で人口が大きく減少した県には、 高齢化・住宅着工などの共通点があるか」という問いを立てた。 ① 問いを「人口減少率上位 5 県の高齢化率・住宅着工戸数・消費支出を比較する」と具体化。 ② 計画段階で、 必要なカラム(A1101 総人口 2012・2023、 A1303 65歳以上、 H1800 住宅着工戸数、 L3221 消費支出)を列挙し、 図表案(散布図・棒グラフ)を先に決定。 ③〜④ 取得と加工は pandas で 30 行程度。 ⑤ 可視化で「人口減少率上位 5 県(秋田・青森・高知・山形・岩手)は、 すべて高齢化率 35% 超」と一目で判明。 ⑥ 分析で「人口減少率と高齢化率の相関 $r = -0.97$」と定量化。 ⑦ 解釈で「人口減少は『高齢化が先行 → 自然減 → 若者流出』の連鎖の結果と推測される。 ただし因果方向は本データだけでは確定できない」と限界を明示。 ⑧ 運用としてスクリプトを GitHub に保存し、 翌年版でも同じ手順で更新できる状態を作った。

→ このケースは 5 つの「サイクルが回る条件」をすべて満たしていた。 問いが具体的、 データが揃う、 加工が容易、 手法(相関)が確立、 結論を「翌年版で再検証」という運用先まで決めていた。 サイクルが空転しないのはこの設計の良さによる。

ケース B:サイクルが空転した例 — 「47 都道府県の幸福度ランキング」

別のチームは「47 都道府県の幸福度を SSDSE-B-2026 から算出する」という野心的な問いを立てた。 しかし、 ① 問いの段階で「幸福度をどう定義するか」が決まらず、 「収入・労働時間・教育・健康」の 4 軸を独自に加重平均すると決定。 ② 計画段階で「加重をどう決めるか」がまた未解決。 ③ データは揃ったが、 ④ 加工で「収入が高い県」「労働時間が短い県」「教育水準が高い県」「健康寿命が長い県」がほとんど一致せず、 加重次第でランキングが大きく変動。 ⑤ 可視化しても説得力のある図にならず、 ⑥ 分析もどの指標と何を比較すべきか決まらない。 ⑦ 解釈は「幸福度の定義に依存して結論が変わる」と書かざるを得ず、 ⑧ 運用先も無い状態で終了。

→ このケースの問題は「問いが曖昧」だった点に尽きる。 サイクル①で「幸福度 = 何の関数か」を 1 つに固定できなかったため、 ②〜⑦のすべてが揺らいだ。 教訓は「問いを 1 文で書ける状態にならない限り、 サイクルを回し始めない」。 EDA に 1 日かけて問いを 3 候補に絞り、 1 つを選ぶ前準備が必要だった。

ケース C:サイクルを 3 周回して累積知識を得た例 — 「コロナ前後の小売構造変化」

ある社会人チームは、 SSDSE-B-2026 を年版で 3 周回した。 1 周目(2019 年版データ)で「都市部の小売販売額は人口集中度と強く相関($r = 0.95$)」を確認。 2 周目(2020 年版)で同じ分析を実施したところ、 相関が $r = 0.88$ に低下。 「コロナで都市の小売需要が落ちた可能性」と仮説を立てる。 3 周目(2021 年版)で再度確認すると $r = 0.85$ まで低下、 地方への分散傾向が明確に。 「コロナ禍は単年の異常値ではなく、 小売構造の恒常的な変化を引き起こした可能性」という、 1 周目だけでは絶対に得られなかった結論に到達。

→ このケースは「サイクルを回す本当の価値」を示している。 単年データだけでは「相関が強い」止まり。 3 年分回すと「相関の時系列変化」が見え、 「構造変化の発見」という質的に異なる知識が得られる。 サイクル⑧(運用)で「来年も同じスクリプトを回す」と決めた設計の勝利。

3 ケースの教訓を 1 枚にまとめる

ケースサイクルの成否主要因読者が真似すべき点
A 人口減少成功問いの具体化 + 運用先の事前決定サイクル①と⑧をセットで設計する
B 幸福度空転問いが 1 文で書けなかったEDA で問いを 3 候補に絞ってから着手
C コロナ前後大成功(3 周)同じ問いを年版で繰り返したスクリプトを「再実行可能」に作る

→ 3 つのケースの共通教訓は、 「サイクルの設計品質は、 ①問いと⑧運用で 80% 決まる」ということ。 中間の②〜⑦は手順がほぼ確立されているので、 初学者でも教科書通りに進めれば失敗しにくい。 一方、 ①と⑧は「自分のチーム固有の文脈」を踏まえる必要があり、 ここで手を抜くとサイクル全体が無価値化する。

最後に:サイクルを「文化」にする

データ解析サイクルは、 個人の手順としてだけでなく、 チーム・組織の文化として根付かせることで真価を発揮する。 「分析の議事録に必ず①〜⑧のチェック表を貼る」「四半期ごとに過去サイクルをレビューする会を開く」「データ辞書を Wiki に共有する」など、 小さな運用ルールの積み重ねが、 1 年後・3 年後の組織の分析力を大きく分ける。 SSDSE-B-2026 を題材にしたサイクル演習は、 その文化を生む最小単位の練習。 ぜひ 1 度、 自分の手で 1 周回してみてほしい。

🗺 概念マップ:データサイクルの位置づけ

データサイエンス全体
├── 思考プロセス
│   ├── データ解析サイクル(本記事)
│   │   ├── PPDAC(教育向け)
│   │   ├── CRISP-DM(企業向け)
│   │   ├── KDD(学術向け)
│   │   ├── SEMMA(SAS 系)
│   │   └── TDSP(Microsoft 系)
│   └── 仮説検証サイクル(科学的方法)
├── データライフサイクル
│   ├── 収集 → 蓄積 → 加工 → 分析
│   └── 可視化 → 活用 → アーカイブ → 廃棄
├── 関連分野
│   ├── DataOps(運用統合)
│   ├── MLOps(モデル運用)
│   └── データガバナンス(権限・品質)
└── 法令・倫理
    ├── 個人情報保護法
    ├── GDPR(EU)
    └── データ倫理 (AI 倫理ガイドライン)
  
データ解析サイクル 組織の成熟度と扱うデータ規模 独立したフェーズ 安定したデータと再現可能な分 問いは 1 文で書けるか? 使うカラムを列挙できるか? 図表案を 3 つ事前に描ける

🔗 隣接手法への橋渡し

データサイクルは個別工程を時間軸で連結する全体図。 3 視点 (接続・統合・比較) で隣接概念との関係を整理する。

🔌 接続: 上流・下流での連鎖

🧩 統合: サイクル運用への組み込み

収集 → 蓄積 → 加工 → 分析 → 活用 → フィードバック → 次サイクル設計の流れで、 各サイクルでの学びを次に反映する設計が肝要。 SSDSE は年次更新されるため、 「前年データでモデル構築 → 今年データで検証 → 差分を次年度の前処理に反映」というサイクル設計が現実的。

⚖️ 比較: 隣接サイクル概念との位置づけ

概念主眼反復単位適用
データサイクル時間軸の連結収集 → 活用全体長期データ運営
データ分析のプロセス分析作業の標準化1 プロジェクト社内分析チーム
CRISP-DM業務理解 + 反復6 フェーズ業界横断
MLOps運用継続連続本番 ML

4 概念は時間軸が異なる。 データサイクルは年・月単位、 CRISP-DM/データ分析プロセスは週・日単位、 MLOps は分・秒単位。 SSDSE 系では年次サイクル全体を「データサイクル」、 各年分析を「CRISP-DM/PPDAC」と読み替えると整理しやすい。

🌳 手法選択フロー

データサイクルは収集 → 蓄積 → 分析 → 運用 → 再収集の継続的循環で構成される。

  1. 収集・蓄積の設計は? Yes → データ収集、 No → データレイク を先に確認
  2. 分析・モデリング工程は? Yes → データ分析のプロセス、 No → CRISP-DM を先に確認
  3. 運用と再学習は? Yes → MLOps、 No → データドリフト を先に確認

一過性分析なら単発スクリプト、 定期実行なら Airflow、 ストリーミングなら Kafka、 と「更新頻度と即時性」で選ぶ。

🎨 直感で掴む・深掘り:7 段階の反復ループ

既に上の「直感で掴む」ではレシピ改善・自転車の比喩で 1 周の感覚を掴んだ。 ここではもう一段だけ抽象化し、 モデル名(PPDAC / CRISP-DM)に依存しない「データ活用の反復プロセス」そのものの骨格を、 問い → 収集 → 処理 → 分析 → 解釈 → 伝達 → 行動 の 7 段階として見る。 この 7 段階は特定のフレームワークの用語ではなく、 どのモデルでも共通して現れる最小公倍数だと考えてほしい。

重要なのは、 7 段階目の「行動」から矢印が 1 段階目の「問い」へ戻る点だ。 行動した結果、 現場に新しい状況が生まれ、 それが次の問いになる。 これが「サイクル」を単なる手順リストと分ける最大の特徴で、 1 周ごとに問いの質が上がる螺旋(スパイラル)になる。

7 段階と各段階の「本当の目的」

各段階は「作業」ではなく「次段階へ渡す価値」で理解するとブレない。

段階 本当の目的(作業ではなく価値) この段階を飛ばすと…
① 問い答えられる形まで問いを絞る(1 文で書ける粒度)「とりあえず集計」で結論が出ない
② 収集問いに答えられる母集団の代表標本を得る手元の都合のデータで代用し偏る
③ 処理分析可能な「きれいな表」に整える型・単位・欠損が分析結果を汚す
④ 分析問いに対する定量的な答えを出す印象論・チェリーピッキングに陥る
⑤ 解釈数値の意味・限界・因果の可否を言語化相関を因果と誤読する
⑥ 伝達意思決定者が動ける形に翻訳する「良い分析」が誰にも届かない
⑦ 行動意思決定・施策・次の問いを生む分析が「見て終わり」で価値ゼロ

→ ①〜⑤は本記事の既存「直感」表(PPDAC 1 周)と重なり、 ⑥⑦は PPDAC が明示しない「伝達・行動」を独立段階として立てた点が違う。 産業実装ではこの ⑥⑦ こそ最も難しく、 データストーリーテリングMLOps がそれぞれ ⑥・⑦ を担う。

3 モデルは同じ骨格の別ラベル — 対応表

PPDAC・CRISP-DM・OSEMN は「別の手法」ではなく、 同じ 7 段階に別名を貼ったもの。 一度この対応が腑に落ちれば、 どのモデルの本を読んでも「いま自分はどの段階か」を即座に翻訳できる。

7 段階 PPDAC CRISP-DM OSEMN
① 問いProblemBusiness Understanding(前提として問いを想定)
② 収集Plan / DataData UnderstandingObtain
③ 処理DataData PreparationScrub
④ 分析AnalysisModelingExplore / Model
⑤ 解釈ConclusionEvaluation(Model 評価に内包)
⑥ 伝達Conclusion(報告)(Deployment 手前)N-terpret
⑦ 行動(次の Problem へ)Deployment(解釈を実務に反映)

→ OSEMN(オーサム、 Obtain-Scrub-Explore-Model-iNterpret)は本用語集に単独ページが無いため本文中の説明のみとする。 表を縦に読むと、 PPDAC は ①〜⑤ に厚く ⑥⑦ が薄い(教育向け)CRISP-DM は ⑦(Deployment)まで含む(産業向け)OSEMN は ②〜⑥ の実装作業に特化(データサイエンティストの手作業寄り)という各モデルの重心の違いが見える。 詳細は PPDAC サイクルCRISP-DM の各ページを参照。

⚠️ よくある落とし穴・深掘り:7 段階それぞれの罠

上の「よくある落とし穴」では運用・法令面を扱った。 ここでは7 段階の反復プロセスそのものに潜む構造的な罠を、 段階に沿って 8 点整理する。 いずれも「知っていれば避けられるが、 知らないと必ず踏む」典型例。

⚠️ 1. サイクルを「線形」だと思い込む(最重要)
図は矢印で①→②→…と並ぶが、 実際は段階を行きつ戻りつする。 分析(④)中に「この列が欲しかった」と気づけば収集(②)へ戻る。 解釈(⑤)で「問いがずれていた」と気づけば①へ戻る。 初学者は「後戻り=失敗」と感じて隠すが、 後戻りは正常なサイクルの動作。 CRISP-DM がフェーズ間を両矢印で描くのはこのため。 スケジュールも「一直線に進む前提」で組むと必ず破綻する。
⚠️ 2. 問い(①)を軽視して収集から始める
「データがあるから分析しよう」は順序が逆。 問いが無いままだと、 SSDSE-B-2026 の 112 指標のどれを見ればよいか決まらず、 相関行列を総当たりして偶然の相関を拾う(多重比較の罠)。 112 指標なら組合せは 6,000 通り超で、 有意水準 5% でも約 300 個が「偶然有意」に見える。 問いを 1 文で固定してから列を選ぶ。
⚠️ 3. 収集(②)のバイアスに無自覚
「取れたデータ」は「知りたい母集団」と一致しない。 SSDSE-B-2026 は 47 都道府県すべてを含む全数データなので選択バイアスは小さいが、 アンケートや Web ログでは回答者・利用者に偏りが入る(生存者バイアス・自己選択バイアス)。 「誰が・どんな条件で・いつ観測されたか」を収集段階で記録しないと、 後段でいくら精密に分析してもバイアスは消えない。
⚠️ 4. 前処理(③)が全体の大半を占めることを見積もらない
実務では前処理が全工数の 6〜8 割を占めるのが通例(本記事「サイクルの速度指標」参照)。 SSDSE-B-2026 でも cp932 デコード・ヘッダー 2 行目のスキップ(skiprows=[1])・列名の日本語対応・欠損記号の処理が要る。 「分析が本番」と考えて前処理を軽く見積もると、 スケジュールが崩れる。 前処理をスクリプト化・自動化して次サイクルで再利用することが速度改善の最大レバレッジ。
⚠️ 5. 解釈(⑤)と伝達(⑥)のギャップ
分析者の頭の中では「r=0.97 だが交絡未制御」と正しく解釈できていても、 レポートに「強い相関」とだけ書くと、 読み手は「因果」と受け取る。 解釈の解像度と伝達の解像度がずれるのが典型的な事故。 限界(因果の可否・外れ値・標本の偏り)を必ず伝達側にも 1 行残す。 詳細は データストーリーテリング
⚠️ 6. 行動(⑦)につながらない分析
「面白い発見」でも、 意思決定者が動けなければサイクルは 1 周で死ぬ。 分析着手前に「この結果が出たら誰が何を決めるか」を先に握る(=決裁者へのヒアリングを①の前に入れる)。 動かせる変数(施策で変えられるもの)を含まない分析は、 面白くても行動不能。
⚠️ 7. フィードバックループの欠如(サイクルが閉じない)
⑦の行動結果を①の次の問いに戻す仕組みが無いと、 それは「サイクル」ではなく「一本道」。 施策を打ちっぱなしにせず、 効果を再測定して次サイクルの入力にする。 SSDSE のような年次更新データは「前年の結論を今年データで検証 → 差分を次年度に反映」という自然なループを組める(本記事ケース C 参照)。
⚠️ 8. 各段階の品質を測らずに次へ流す
サイクルは最も弱い段階の品質で頭打ちになる(律速段階)。 収集が偏っていれば分析がいくら精密でも結論は歪む。 段階ごとに品質指標(②完全性・③スキーマ準拠率・④再現性・⑤限界の明示・⑥意思決定貢献度)を持ち、 弱い段階に投資を集中する。 「分析手法を高度化する」より「収集の偏りを直す」方が効くことが多い。

🚀 発展:探索的 vs 確証的・成果物・意思決定への接続

🔀 探索的サイクル vs 確証的サイクル

同じ 7 段階でも、 探索的(exploratory)に回すか 確証的(confirmatory)に回すかで作法が正反対になる。 これを混同すると、 探索で見つけた仮説を同じデータで「検証済み」と誤主張する二重利用(double dipping)の罠に落ちる。

観点 探索的サイクル 確証的サイクル
目的仮説を「生む」仮説を「検証する」
問い(①)緩く広く(何が起きている?)事前に固定(H0/H1 を宣言)
手法(④)EDA・可視化・多変量総当たり検定・信頼区間・事前登録
データ手元の全データ探索との標本 / 別年次
p 値の解釈参考程度(多重比較で甘い)意味を持つ(事前固定なら)

→ 正しい運用は探索サイクル → 確証サイクルの 2 段構え。 SSDSE-B-2026 なら「2012〜2022 年で探索して仮説を作り、 2023 年で確証する」「奇数年で探索・偶数年で確証する」といった年次分割が現実的。 同じ年のデータで見つけた相関を同じ年で「有意」と言うのは循環論法。

📦 各段階の「成果物(アーティファクト)」を残す

サイクルを再現・引き継ぎ可能にする鍵は、 各段階で次に渡せる形の成果物を必ず出力すること。 頭の中や一時変数に留めない。

段階 残すべき成果物 形式の例
① 問い問い文 1 行・仮説・成功条件README / Issue
② 収集生データ + 出典 + 取得日時data/raw/ + 取得スクリプト
③ 処理前処理済データ + データ辞書clean.csv + dict.md
④ 分析分析コード + 係数・図notebook / .py + PNG
⑤ 解釈結論 1 文 + 限界リストreport.md
⑥ 伝達意思決定者向け要約・スライド1 枚要約 / 議事録リンク
⑦ 行動決定事項 + 次サイクルの問い決定ログ + 次 Issue

→ 本記事「理解度チェック 問 3」の 6 成果物リストを 7 段階に拡張したもの。 これらが揃えば SSDSE-B-2027 公開時にスクリプト再実行だけで結論が更新される。

🏛 データガバナンスと意思決定への接続

サイクルを組織で回すと、 「誰がどのデータに触れてよいか」「結論をどう意思決定に接続するか」という統制と接続の設計が必要になる。 これが データガバナンス の役割で、 サイクルの外枠として全段階を貫く。

→ 教育場面では 1 人が全 7 段階を回すが、 組織では ①⑥⑦ を企画・意思決定者、 ②〜⑤ を分析者、 統制をガバナンス担当が分担する。 「いま誰がどの段階に責任を持つか」を明示するのが、 サイクルを組織文化にする第一歩。