別名・略称:分析サイクル
「データサイクル」はデータの生成 → 取得 → 蓄積 → 加工 → 分析 → 活用 → 廃棄 までのライフサイクル全体。 ETL / ELT・データレイク・データウェアハウス・BI ツール・モデル運用などのコンポーネントが工程ごとに対応する。 本ページではサイクル各段階の役割・データ品質と再現性の維持・GDPR 等の法的要件・保存と廃棄ポリシーを整理する。
これらのキーワードは「データが生まれ、 流通し、 価値を生み、 適切に終わる」というデータサイクル全体を俯瞰する視点を構成する。
🍰 まずはやさしく
らせん階段のような仕組みです。
正しい答えに近づくために使います。
部活の練習メニューを改善する時に似ています。
分析を繰り返す流れについて読みます。
データ解析サイクル(Data Analytics Cycle):課題抽出→収集→加工→分析→共有 のサイクル
🍰 まずはやさしく
分析の進め方を示す地図のようなものです。
今自分がどこにいるかを知るために使います。
スマホのアプリを使いやすく変える時に似ています。
具体的な分析の手順について読みます。
🍰 まずはやさしく
料理のレシピ改善のようなものです。
より良い結果を出すために使います。
味見をして調味料を足す時に似ています。
失敗から学んで次に活かす方法を読みます。
身近な例で言うと、 データ解析サイクルは料理のレシピ改善に似ています。 1 回作って (Plan→Cook→Taste→Reflect)、 「塩を少し減らそう」と気づき、 次の回に反映する。 食材 (=データ) や調理法 (=分析手法) を変えながら、 「美味しい」という目的に近づけていく反復作業 — これがそのままデータ解析サイクルの本質です。
あるいは 自転車の乗り方を学ぶ過程とも言えます。 倒れて (=分析失敗)、 「ハンドルを少し早めに切る」と気づいて (=学び)、 次の挑戦に活かす。 1 回で完璧を目指すのではなく、 毎周の改善を積み重ねて精度を上げるのがサイクル思考の核心です。
「都道府県別の高齢化率と死亡率には関係があるか」を題材に、 PPDAC を 1 周してみます:
| 段階 | 具体的にやること | 出てくる気づき (=次サイクルの種) |
|---|---|---|
| Problem | 高齢化は死亡率を押し上げるのか | 「高齢化」を何で測る? (65歳以上割合?) |
| Plan | SSDSE-B-2026 の A1303 (65歳以上) ÷ A1101 (総人口) で高齢化率、 A4200 (死亡数) ÷ A1101 で死亡率を作り散布図で見る | 交絡 (医療体制・所得) を制御する必要 |
| Data | 2023 年の 47 都道府県を pandas で読み込み、 欠損確認 | 大都市が外れ値傾向 → 別途検討 |
| Analysis | ピアソン相関 r ≒ 0.97 を算出 | 強い正の相関 → 因果結論には早い |
| Conclusion | 「相関は強いが交絡未制御」と報告 | 次サイクル: 医療費・所得を共変量に重回帰 |
最終行に注目してください。 結論を出して終わりではなく、 「次に何を問うか」が必ず生まれます。 これが「サイクル」と呼ばれる所以です。
どちらも 「最後で終わりではなく次のサイクルへ」 という思想が共通。 PPDAC は学校教育向けに簡潔化、 CRISP-DM は産業界の運用フェーズ (デプロイ・監視) まで明示している点が違います。
┌──── Problem ────┐ │ ↓ Conclusion ←── Plan ↑ │ │ ↓ Analysis ←──── Data 「終点 Conclusion」から矢印が「始点 Problem」に戻るのが要点。
🍰 まずはやさしく
学びを次に繋げる仕組みのことです。
分析の精度を上げるために使います。
買い物で予算に合わせて品を選ぶ時に似ています。
サイクルの構造とコストについて読みます。
データ解析サイクルは数式ではなくプロセス図。
データサイクルを運用コストで定式化すると、 各段階の選択肢を定量比較できる。
→ SSDSE-B-2026 (約 220 KB) なら無視できるが、 同形式を全市町村(1,724 自治体)× 月次 × 10 年と展開すると ~38 GB。 ホットストレージ単価が S3 Standard で約 0.025 USD/GB/月、 Glacier Deep Archive で 0.00099 USD/GB/月(約 25 倍差)。
ライフサイクル⑦⑧の判断基準を定量化する代表モデル:データ価値は時間とともに指数的に減衰し、 保管コストは一定。 両者の差が「保持の純利益」。
→ SSDSE-B-2026 のような公的統計はλが小さい(経年でも価値減衰が緩やか、 時系列研究に使える)。 一方マーケティングログは λ が大きく半減期 1 年未満。 業界ごとに「いつ捨てるか」が大きく異なる。
2022 年度から始まった高校「情報 I」「数学 I」のデータの分析、 2025 年度の共通テスト「情報」では PPDAC サイクルが事実上の出題範囲。 文部科学省の指導案でも明示されている。
| 学校段階 | 対応科目 | PPDAC 各段階の到達目標 |
|---|---|---|
| 小学校 | 算数(5-6 年) | P=身近な疑問、 D=学級アンケート、 A=平均と棒グラフ、 C=言葉でまとめる |
| 中学校 | 数学(1-3 年) | P=社会的疑問、 D=公的統計、 A=ヒストグラム・箱ひげ、 C=四分位範囲で比較 |
| 高校 | 情報 I・数学 I | P=仮説の言語化、 D=SSDSE・e-Stat、 A=相関・回帰、 C=外れ値・因果の議論 |
| 大学初年次 | 情報リテラシー・データサイエンス基礎 | CRISP-DM 移行、 Python・R 実装、 GDPR 等の倫理 |
→ SSDSE-B-2026 は都道府県という親しみやすい単位 × 112 指標で、 高校〜大学初年次のサイクル教材として理想的。 1 年分 47 行という小規模さも「手で確認できる」教育的価値が高い。
SSDSE データを使った 1 サイクル例:
結論で出てきた次の問いから 第 2 サイクル に入る。
公開されている SSDSE-B-2026 の実値を上記モデルに当てはめる。
| 変数 | 値 | 出典/根拠 |
|---|---|---|
| N(行数) | 564(=47 都道府県 × 12 年)/年別に絞ると 47 | 2012〜2023 年 × 都道府県 |
| 列数 | 112 | SSDSE-B-2026 ヘッダー |
| ファイルサイズ | 約 360 KB(cp932) | data/raw 内(実測 359,821 B) |
| R(1 行 ETL 時間) | 約 0.3 ms | pandas + cp932 デコード実測 |
| B(並列度) | 1 | 単一プロセス |
| L(起動オーバーヘッド) | 約 200 ms | Python interpreter + pandas import |
| $T_{\text{ETL}}$ | 47×0.3/1 + 200×log47 ≈ 14.1 + 770 ≈ 785 ms | L 項支配(Amdahl) |
| S_1(サイズ) | 0.00034 GB | 360 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 倍の差。
合成データで初期誤差 1.0 が PDCA で 30% ずつ減るとき、 0.1 以下になるサイクル数を計算する。
| サイクル | 誤差 |
|---|---|
| 0 | 1.000 |
| 1 | 0.700 |
| 2 | 0.490 |
| 3 | 0.343 |
| 4 | 0.240 |
| 5 | 0.168 |
| 6 | 0.118 |
| 7 | 0.082 |
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}") |
💬 手計算 (Step 2) 7 サイクルと Python 出力が完全一致。
下のリングは PPDAC の 5 段階(Problem→Plan→Data→Analysis→Conclusion)です。 「▶ 次の段階へ」を押すか、 各ノードをクリック/タップすると、 架空のミニ調査「県の人口が多いほど出生数も多いか?」がその段階で何をするかに具体化されます。 最後の Conclusion からは必ず新しい問いが生まれ、 リングがもう1周まわる様子(反復)を体感できます。
※ 調査テーマは学習用の架空設定です。 ただし Data/Analysis 段階に出てくる数値(相関 r・出生率の幅・東京都の人口と出生数)は SSDSE-B-2026(2023 年・47 都道府県)の Python 実測値の転記で、 捏造ではありません。
直感:分析は一直線ではなく回る。 上のリングで分かるとおり、 Conclusion は「終わり」ではなく次の Problem の入口です。 1 周目で「人口と出生"数"は当然ほぼ完全相関」と気づき、 2 周目で「では規模を除いた出生率の県差は何か」へ問いが磨かれていく — この螺旋(イテレーション)こそがサイクル思考の本体です。
落とし穴(各段階で体験したもの):
発展:同じ骨格が別名で語られます。 教育向けの PPDAC、 産業運用まで含む CRISP-DM、 そして OSEMN(Obtain-Scrub-Explore-Model-iNterpret)。 いずれも「仮説検証(狙って確かめる)」と「探索(EDA で気づく)」を往復します。 Plan で立てた仮説は 仮説検定で確かめ、 Data/Analysis での思わぬ気づきが次の Problem を生む — この往復の全体像は データ分析プロセスとも重なります。
SSDSE-B-2026(47 都道府県・2023 年データ)を題材にした最小コード:
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()) |
🎯 このコードでやること:SSDSE-B-2026 を読み込み、 SHA256 ハッシュで「ファイルが改竄されていないこと」を証跡として残す。 ライフサイクル①収集 + ②蓄積を一気に表現する。
📥 入力データ(SSDSE-B-2026 ヘッダー+1 行目):
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 列 — 47 都道府県 × 12 年(2012〜2023)分がまとまっている。 1 年分の分析では次のブロックのように df[df['SSDSE-B-2026']==2023] で年度を絞る。 sha256 を保管して再取得時に照合すれば「途中で誰かが改竄していない」ことを保証できる(蓄積フェーズの基本)。
🎯 このコードでやること:原始データから「死亡率(人口千対)」「高齢化率」を計算する派生指標を作る。 ライフサイクル③加工の典型。
📥 入力データ(df の主要列):
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()) |
📤 実行すると次の出力が得られる:
💬 結果の読み方:秋田・高知・徳島は高齢化率 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≒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)') |
📤 実行すると次の出力が得られる:
💬 結果の読み方:3 年で Glacier 階層へ自動移行、 7 年経過で安全削除(GDPR 等の保持上限)。 実運用ではこのロジックを S3 Lifecycle Policy として宣言的に書く方が安全(誤削除しても 30 日復元ウィンドウ等が組み込まれる)。
🎯 このコードでやること:PPDAC 5 段階を 1 つの Jupyter Notebook で順に実行する「Notebook-as-Cycle」パターン。 セル順序がそのまま思考順序を表す。
📥 入力データ(SSDSE-B-2026 抜粋):
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 サイクルへ') |
📤 実行すると次の出力が得られる:
💬 結果の読み方:高齢化率が 1 ポイント上がると死亡率(人口千対)が 0.610 上がる。 切片 -5.17 は外挿の参考程度。 結論で「次の問い」を明示することで、 サイクルが 1 周で終わらず継続 することを構造化する。
🎯 このコードでやること:上記サイクルを 毎月 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 |
📤 実行すると次の出力が得られる:
💬 結果の読み方:t1→t2→t3 がパイプライン順に実行され、 5 秒で全周完了。 失敗時は Airflow UI から再実行可能、 SLA 違反時は Slack 通知。 これでサイクルが「人間が手動で回す」から「システムが自律的に回す」に進化する。
Problem: 県議会から「高齢化が死亡率に与える影響を可視化せよ」依頼。 Plan: SSDSE-B-2026 を主データ、 補完に厚労省人口動態。 Data: cp932→utf-8 変換、 死亡率派生指標生成。 Analysis: scipy.stats.pearsonr で r=0.972 (上記の実値計算)。 Conclusion: 高齢化率が単独で死亡率の約 95% を説明(決定係数 R²≒0.95)。 次サイクルは「医療費投入の効果」を切り分け。 1 周目はわずか半日で完了、 ここから 5 周回って報告書化。
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 周させたから精度と現場理解の両方が向上した典型例。
EU 域内の病院では電子カルテに ライフサイクル⑦⑧ が法的義務。 患者死亡後 10 年で完全削除 が原則だが、 研究目的の匿名化データは別管理。 SSDSE-B-2026 のような既に匿名化済みの公開データは「個人情報ではない」が、 「背景データと突合すれば個人特定可能」(再識別リスク)に注意。 GDPR は 「合理的に予測される手段で識別可能」なものを個人情報とみなす(recital 26)。
工場の温度・振動センサが毎秒 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% を守る。
| 年 | 出来事 | 意義 |
|---|---|---|
| 1962 | Tukey "The Future of Data Analysis" | 統計学から独立した「データ解析」概念を提唱 |
| 1977 | Tukey "Exploratory Data Analysis" | EDA(サイクル④分析の前段)を体系化 |
| 1996 | CRISP-DM v1.0 / KDD プロセス | 企業向けデータマイニング標準サイクル誕生 |
| 1999 | Wild & Pfannkuch "Statistical Thinking in Empirical Enquiry" | PPDAC が教育現場に普及開始 |
| 2008 | Hadoop 1.0 / クラウド DWH 普及 | ライフサイクル②蓄積のコストが劇的に低下 |
| 2014 | DataOps Manifesto | DevOps を ETL/分析に適用、 サイクルを「常時回す」へ |
| 2017 | TDSP(Microsoft) | クラウド時代の役割分担まで含めたサイクル定義 |
| 2018 | GDPR 施行 | ライフサイクル⑦⑧を法的義務化 |
| 2022 | 改正個人情報保護法(日本) | 仮名加工情報、 越境移転規制、 保持期限明示 |
| 2023 | LLM / RAG 時代 | 「サイクル⑤可視化」が自然言語クエリに置き換わり始める |
各段階で 「これだけは確認」のチェックリスト。 サイクル運用時の指差し確認に。
| 段階 | 出口チェック項目 | NG 例 |
|---|---|---|
| 問題定義 | YES/NO で答えられる問いか?/成功定義はあるか? | 「データを見てみたい」 |
| 計画 | 必要データの入手手段・期限・コストは明示済みか? | 「あとで考える」 |
| 収集 | ライセンス/個人情報チェック/取得日時メタデータ | 出典不明 CSV を共有 |
| 蓄積 | ハッシュ/バックアップ/アクセス権の設定 | 個人 PC のローカル保存のみ |
| 加工 | スキーマ/単位/派生指標の計算式 | 「なんとなく」NULL 補完 |
| 分析 | 再現可能性/seed 固定/前提仮定 | 手元 Excel で 1 回計算 |
| 可視化 | 単位/軸ラベル/カラーユニバーサル | 3D 円グラフ |
| 活用 | 意思決定プロセスに組み込まれたか? | スライド共有のみで終わる |
| アーカイブ | 階層ストレージ/検索可能性 | テープに放置で誰も探せない |
| 廃棄 | 削除証跡/バックアップからも削除 | 本番だけ削除、 バックアップ残置 |
プロジェクトキックオフ時にこの 30 項目を埋めると、 サイクル運用の抜け漏れがほぼ防げる。
サイクル⑦⑧の運用は国・地域ごとに法令が大きく異なる。 越境データ移転時には特に注意。
| 項目 | 日本(改正個情法 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)」を基準にすると整合性が取りやすい。
🎯 このコードでやること:サイクル③加工と④分析の境界に「スキーマ検証ゲート」を入れる。 期待した列・範囲を満たさなければ例外を投げて後段を止める。 Great Expectations の最小版を自作することで、 ライフサイクル品質管理の核心を体感する。
📥 入力データ(SSDSE 加工後 df):
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('全ゲート通過 → 分析段階へ進む') |
📤 実行すると次の出力が得られる:
💬 結果の読み方:4 つのゲートを全通過。 もし 1 つでも失敗すれば AssertionError で Airflow タスクが赤くなり、 後段(④分析)に進まない。 これが 「データ品質をコードで保証する」 という DataOps の中核思想。
現場でよく見るアンチパターンと正解の対照表。 自分のプロジェクトに当てはまっていないか自己点検に使う。
| アンチパターン | 症状 | 正解 |
|---|---|---|
| ①「データありき」 | データを見てから問いを後付け | 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 で周回ナンバリング |
冒頭の数式は「次のサイクルは前のサイクルと学びの関数」と読める。 これを各要素に分解する。
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 段階の重要性を端的に表す。
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 段階)への自然な拡張として位置づけられる。
「どの段階で何を使うか」の最新ツール対照。 2026 年時点。
| 段階 | OSS | AWS | Google Cloud | Azure |
|---|---|---|---|---|
| ①収集 | Fluentd, Logstash, Kafka Connect | Kinesis, MSK | Pub/Sub, Dataflow | Event Hubs |
| ②蓄積 | MinIO, HDFS, PostgreSQL | S3, RDS, Redshift | GCS, BigQuery | Blob, Synapse |
| ③加工 | pandas, Spark, dbt, Airflow | Glue, EMR, MWAA | Dataproc, Cloud Composer | Data Factory, Synapse Pipelines |
| ④分析 | scikit-learn, PyTorch, statsmodels | SageMaker, Athena | Vertex AI, BigQuery ML | ML Studio |
| ⑤可視化 | matplotlib, Plotly, Apache Superset | QuickSight | Looker | Power BI |
| ⑥活用 | Streamlit, FastAPI, Grafana | Lambda, API Gateway | Cloud Run, Functions | Functions, App Service |
| ⑦アーカイブ | tar+gzip, Bacula | S3 Glacier, Deep Archive | Coldline, Archive | Blob Archive |
| ⑧廃棄 | shred, srm, BleachBit | S3 Lifecycle (Expiration) | Object Lifecycle | Blob Lifecycle |
→ 「全段階を 1 クラウドで揃える」と権限管理が一元化できるが、 ベンダーロックインに注意。 一方「マルチクラウド」は柔軟だが運用負荷が増す。 サイクル全周のコスト見積もり時の重要な意思決定ポイント。
本記事の全コードを順に実行した時の各段階の数値結果を 1 つの表にまとめる。
| 段階 | 操作 | 入力 | 出力 | 処理時間 |
|---|---|---|---|---|
| ① | CSV 取得 + SHA256 | e-Stat | 360 KB CSV + ハッシュ | 0.3 s |
| ② | ローカル保管 | CSV | data/raw/ 564 行 112 列 | 即時 |
| ③ | 2023 年抽出 + 派生指標 | 原始 112 列 | 47 行 114 列(死亡率・高齢化率 追加) | 0.1 s |
| ④ | scipy.stats.pearsonr | 高齢化率, 死亡率 | r = 0.972, p = 6.0e-30 | 0.05 s |
| ④' | LinearRegression | 高齢化率 → 死亡率 | 死亡率 = 0.610 × 高齢化率 -5.17 | 0.05 s |
| ⑤ | matplotlib 散布図 | 2 列 × 47 行 | aging_vs_death.png 47 KB | 0.4 s |
| ⑤' | to_parquet 圧縮 | CSV 360 KB | enriched.parquet 約 60 KB | 0.1 s |
| ⑥ | レポート PDF 生成 | 散布図 + 数値 | policy_brief.pdf | 1.2 s |
| ⑦ | 3 年経過後 Glacier 移行 | Standard ストレージ | 25 倍コスト削減 | 非同期 |
| ⑧ | 7 年経過後 shred | Glacier 上の派生物 | 削除証跡を audit ログに記録 | 非同期 |
→ サイクル①〜⑥は合計 2.2 秒で完了。 SSDSE 規模ならエンジニアが昼休みに 1 周回せる。 これが「小さく速く 1 周」の MVP 思想。 ⑦⑧は人間が直接見ない部分だが、 長期運用では最大のコスト要因。
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 化)。
サイクルを安全に運用するための原則。 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 原則の対象。 サイクル設計時に必ずチェックリスト化。
analysis_final_v2_real_LAST.py のような命名は、 サイクル⑧の運用を即座に破壊する。 analysis_2026_pop_vs_gdp.py のように「年版 + 問い」で命名し、 GitHub タグでバージョンを管理する。ここまで読んだら、 以下の問いに自分の言葉で答えられるか確認してみよう。 答えに詰まったら、 該当セクションに戻って読み直すこと。
analysis_2026_pop_vs_gdp.py のように『年版 + 問い』で固定し、 GitHub タグでバージョン管理する」「共有先 → Slack だけでなく社内 Wiki にもリンクを残し、 半年後に検索可能にする」など。→ 6 問すべてに自分の言葉で答えられたら、 「データ解析サイクル」の 定義・運用・解釈の限界の 3 軸が掴めている状態。 SSDSE-B-2026 を題材に実際に 1 周回してみると、 知識が定着する。
データ解析サイクルは万能ではない。 「問いが立てられない領域」「データが取れない領域」「結論を運用できない領域」では、 サイクル自体が空転する。 ここでは サイクルが回る条件 5 つ・回らない条件 5 つ・回らないときの代替戦略を整理する。 SSDSE-B-2026 のような公開統計データは「回る条件」の代表例だが、 実務では「回らない領域」にも遭遇するため、 線引きが重要。
| 条件 | SSDSE-B-2026 での具体例 | 破綻すると何が起きるか |
|---|---|---|
| (1) 問いが具体的 | 「人口と住宅着工戸数の連動性」など、 変数 2-4 個で表現可 | 「日本経済を分析せよ」だと永遠に終わらない |
| (2) データが取得可能 | 公開 CSV、 47 都道府県 × 12 年 | データ取得に半年かかると問いが陳腐化 |
| (3) 加工が現実的 | 単位統一・型変換が pandas 数行で済む | 加工に 3 週間かかるとサイクル⑤に進めない |
| (4) 分析手法が確立 | 相関・回帰・分散分析など標準的な統計手法 | 手法選定で迷うと⑥が止まる |
| (5) 結論が運用可能 | 「来年も同じ問いで再分析する」と決まっている | 結論を活かす場がないとサイクルが 1 周で終わる |
→ SSDSE-B-2026 は 5 条件すべてを満たすため、 教育用題材として優秀。 一方、 「顧客の感情データ」「未公開の社内データ」「リアルタイムストリーミング」は条件(2)〜(4)を満たさないことがあり、 別の戦略が必要になる。
| パターン | 症状 | 代替戦略 |
|---|---|---|
| 問いが曖昧 | 「とりあえずデータを見る」状態で⑤まで進む | EDA を先に 1 日実施 → 問いを 3 候補に絞る → 1 つに決める |
| データが断片的 | 必要なカラムが複数システムに散在 | 先にデータパイプライン(ETL)を構築 → サイクルは小さなスコープで開始 |
| 加工コストが莫大 | 前処理に 70% の時間を取られる | 最初はサンプリングで小規模に回し、 加工自動化に投資 |
| 手法が未確立 | 「この問いに使える統計手法が無い」 | 既存手法で近似し、 限界を解釈フェーズで明示 |
| 結論が運用先なし | 分析しても誰も読まない | サイクル①の前に「決裁者へのヒアリング」を入れる |
→ 「サイクルが回らない」と感じたら、 まずどの条件が欠けているかを診断する。 全工程を回そうとせず、 欠けている条件を補強する 準備サイクルを回すのが正しいアプローチ。 SSDSE-B-2026 のような綺麗なデータが揃っていない実務では、 これが頻発する。
教科書的なサイクル(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 周回して新しい知見を得た例」の 3 つのケーススタディを紹介する。 教科書的な手順を知っているだけでは実践に届かないため、 具体的な失敗・成功のストーリーを読むことで、 自分のチームでの運用イメージが湧くはずだ。
ある学生チームが、 SSDSE-B-2026 を使い「2012 年から 2023 年で人口が大きく減少した県には、 高齢化・住宅着工などの共通点があるか」という問いを立てた。 ① 問いを「人口減少率上位 5 県の高齢化率・住宅着工戸数・消費支出を比較する」と具体化。 ② 計画段階で、 必要なカラム(A1101 総人口 2012・2023、 A1303 65歳以上、 H1800 住宅着工戸数、 L3221 消費支出)を列挙し、 図表案(散布図・棒グラフ)を先に決定。 ③〜④ 取得と加工は pandas で 30 行程度。 ⑤ 可視化で「人口減少率上位 5 県(秋田・青森・高知・山形・岩手)は、 すべて高齢化率 35% 超」と一目で判明。 ⑥ 分析で「人口減少率と高齢化率の相関 $r = -0.97$」と定量化。 ⑦ 解釈で「人口減少は『高齢化が先行 → 自然減 → 若者流出』の連鎖の結果と推測される。 ただし因果方向は本データだけでは確定できない」と限界を明示。 ⑧ 運用としてスクリプトを GitHub に保存し、 翌年版でも同じ手順で更新できる状態を作った。
→ このケースは 5 つの「サイクルが回る条件」をすべて満たしていた。 問いが具体的、 データが揃う、 加工が容易、 手法(相関)が確立、 結論を「翌年版で再検証」という運用先まで決めていた。 サイクルが空転しないのはこの設計の良さによる。
別のチームは「47 都道府県の幸福度を SSDSE-B-2026 から算出する」という野心的な問いを立てた。 しかし、 ① 問いの段階で「幸福度をどう定義するか」が決まらず、 「収入・労働時間・教育・健康」の 4 軸を独自に加重平均すると決定。 ② 計画段階で「加重をどう決めるか」がまた未解決。 ③ データは揃ったが、 ④ 加工で「収入が高い県」「労働時間が短い県」「教育水準が高い県」「健康寿命が長い県」がほとんど一致せず、 加重次第でランキングが大きく変動。 ⑤ 可視化しても説得力のある図にならず、 ⑥ 分析もどの指標と何を比較すべきか決まらない。 ⑦ 解釈は「幸福度の定義に依存して結論が変わる」と書かざるを得ず、 ⑧ 運用先も無い状態で終了。
→ このケースの問題は「問いが曖昧」だった点に尽きる。 サイクル①で「幸福度 = 何の関数か」を 1 つに固定できなかったため、 ②〜⑦のすべてが揺らいだ。 教訓は「問いを 1 文で書ける状態にならない限り、 サイクルを回し始めない」。 EDA に 1 日かけて問いを 3 候補に絞り、 1 つを選ぶ前準備が必要だった。
ある社会人チームは、 SSDSE-B-2026 を年版で 3 周回した。 1 周目(2019 年版データ)で「都市部の小売販売額は人口集中度と強く相関($r = 0.95$)」を確認。 2 周目(2020 年版)で同じ分析を実施したところ、 相関が $r = 0.88$ に低下。 「コロナで都市の小売需要が落ちた可能性」と仮説を立てる。 3 周目(2021 年版)で再度確認すると $r = 0.85$ まで低下、 地方への分散傾向が明確に。 「コロナ禍は単年の異常値ではなく、 小売構造の恒常的な変化を引き起こした可能性」という、 1 周目だけでは絶対に得られなかった結論に到達。
→ このケースは「サイクルを回す本当の価値」を示している。 単年データだけでは「相関が強い」止まり。 3 年分回すと「相関の時系列変化」が見え、 「構造変化の発見」という質的に異なる知識が得られる。 サイクル⑧(運用)で「来年も同じスクリプトを回す」と決めた設計の勝利。
| ケース | サイクルの成否 | 主要因 | 読者が真似すべき点 |
|---|---|---|---|
| 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 倫理ガイドライン)
データサイクルは個別工程を時間軸で連結する全体図。 3 視点 (接続・統合・比較) で隣接概念との関係を整理する。
収集 → 蓄積 → 加工 → 分析 → 活用 → フィードバック → 次サイクル設計の流れで、 各サイクルでの学びを次に反映する設計が肝要。 SSDSE は年次更新されるため、 「前年データでモデル構築 → 今年データで検証 → 差分を次年度の前処理に反映」というサイクル設計が現実的。
| 概念 | 主眼 | 反復単位 | 適用 |
|---|---|---|---|
| データサイクル | 時間軸の連結 | 収集 → 活用全体 | 長期データ運営 |
| データ分析のプロセス | 分析作業の標準化 | 1 プロジェクト | 社内分析チーム |
| CRISP-DM | 業務理解 + 反復 | 6 フェーズ | 業界横断 |
| MLOps | 運用継続 | 連続 | 本番 ML |
4 概念は時間軸が異なる。 データサイクルは年・月単位、 CRISP-DM/データ分析プロセスは週・日単位、 MLOps は分・秒単位。 SSDSE 系では年次サイクル全体を「データサイクル」、 各年分析を「CRISP-DM/PPDAC」と読み替えると整理しやすい。
データサイクルは収集 → 蓄積 → 分析 → 運用 → 再収集の継続的循環で構成される。
一過性分析なら単発スクリプト、 定期実行なら Airflow、 ストリーミングなら Kafka、 と「更新頻度と即時性」で選ぶ。
既に上の「直感で掴む」ではレシピ改善・自転車の比喩で 1 周の感覚を掴んだ。 ここではもう一段だけ抽象化し、 モデル名(PPDAC / CRISP-DM)に依存しない「データ活用の反復プロセス」そのものの骨格を、 問い → 収集 → 処理 → 分析 → 解釈 → 伝達 → 行動 の 7 段階として見る。 この 7 段階は特定のフレームワークの用語ではなく、 どのモデルでも共通して現れる最小公倍数だと考えてほしい。
重要なのは、 7 段階目の「行動」から矢印が 1 段階目の「問い」へ戻る点だ。 行動した結果、 現場に新しい状況が生まれ、 それが次の問いになる。 これが「サイクル」を単なる手順リストと分ける最大の特徴で、 1 周ごとに問いの質が上がる螺旋(スパイラル)になる。
各段階は「作業」ではなく「次段階へ渡す価値」で理解するとブレない。
| 段階 | 本当の目的(作業ではなく価値) | この段階を飛ばすと… |
|---|---|---|
| ① 問い | 答えられる形まで問いを絞る(1 文で書ける粒度) | 「とりあえず集計」で結論が出ない |
| ② 収集 | 問いに答えられる母集団の代表標本を得る | 手元の都合のデータで代用し偏る |
| ③ 処理 | 分析可能な「きれいな表」に整える | 型・単位・欠損が分析結果を汚す |
| ④ 分析 | 問いに対する定量的な答えを出す | 印象論・チェリーピッキングに陥る |
| ⑤ 解釈 | 数値の意味・限界・因果の可否を言語化 | 相関を因果と誤読する |
| ⑥ 伝達 | 意思決定者が動ける形に翻訳する | 「良い分析」が誰にも届かない |
| ⑦ 行動 | 意思決定・施策・次の問いを生む | 分析が「見て終わり」で価値ゼロ |
→ ①〜⑤は本記事の既存「直感」表(PPDAC 1 周)と重なり、 ⑥⑦は PPDAC が明示しない「伝達・行動」を独立段階として立てた点が違う。 産業実装ではこの ⑥⑦ こそ最も難しく、 データストーリーテリング と MLOps がそれぞれ ⑥・⑦ を担う。
PPDAC・CRISP-DM・OSEMN は「別の手法」ではなく、 同じ 7 段階に別名を貼ったもの。 一度この対応が腑に落ちれば、 どのモデルの本を読んでも「いま自分はどの段階か」を即座に翻訳できる。
| 7 段階 | PPDAC | CRISP-DM | OSEMN |
|---|---|---|---|
| ① 問い | Problem | Business Understanding | (前提として問いを想定) |
| ② 収集 | Plan / Data | Data Understanding | Obtain |
| ③ 処理 | Data | Data Preparation | Scrub |
| ④ 分析 | Analysis | Modeling | Explore / Model |
| ⑤ 解釈 | Conclusion | Evaluation | (Model 評価に内包) |
| ⑥ 伝達 | Conclusion(報告) | (Deployment 手前) | N-terpret |
| ⑦ 行動 | (次の Problem へ) | Deployment | (解釈を実務に反映) |
→ OSEMN(オーサム、 Obtain-Scrub-Explore-Model-iNterpret)は本用語集に単独ページが無いため本文中の説明のみとする。 表を縦に読むと、 PPDAC は ①〜⑤ に厚く ⑥⑦ が薄い(教育向け)、 CRISP-DM は ⑦(Deployment)まで含む(産業向け)、 OSEMN は ②〜⑥ の実装作業に特化(データサイエンティストの手作業寄り)という各モデルの重心の違いが見える。 詳細は PPDAC サイクル・CRISP-DM の各ページを参照。
上の「よくある落とし穴」では運用・法令面を扱った。 ここでは7 段階の反復プロセスそのものに潜む構造的な罠を、 段階に沿って 8 点整理する。 いずれも「知っていれば避けられるが、 知らないと必ず踏む」典型例。
同じ 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 段階を回すが、 組織では ①⑥⑦ を企画・意思決定者、 ②〜⑤ を分析者、 統制をガバナンス担当が分担する。 「いま誰がどの段階に責任を持つか」を明示するのが、 サイクルを組織文化にする第一歩。
7 段階の各段階をさらに深く学ぶための用語集内リンク。 いずれも本用語集に実在するページ。
※ OSEMN(Obtain-Scrub-Explore-Model-iNterpret)は本用語集に単独ページが無いため、 本文の対応表内での説明に留めている。