論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
データ分析のプロセス
Data Analysis Process
リテラシー

🔖 キーワード索引

このページ内のセクションへ素早く飛べます(クリックで該当箇所へジャンプ):

💡 30秒結論📍 文脈🎨 直感📐 数式・定義🔬 数式を言葉で読み解く🧮 SSDSE実値計算🐍 Python実装⚠️ 落とし穴🌐 関連手法🔗 関連用語📚 関連グループ❓ FAQ

データ分析プロセス」は問いの設定からインサイト共有までを工程化した一連の手順。 PPDAC や CRISP-DM が代表例で、 各工程の成果物・完了条件・関係者・反復ループを明確化することで属人化を防ぐ。 本ページでは PPDAC と CRISP-DM の対応、 6 工程の成果物と完了条件、 工程間の依存と逆流、 役割分担、 MLOps 時代の追加要素 (データテスト・XAI 等) を整理する。

PPDAC サイクルCRISP-DM 6 工程問い→データ→分析→結論成果物と完了条件役割分担 (BA/DS/DE/ML)反復ループデータテスト (pandera)XAIMLOps

これらのキーワードは「問いを立てる → データを集める → 分析する → 結論を共有する → 振り返って改善」というデータ分析プロセスの反復構造を構成する。

💡 30秒で分かる結論 — データ分析プロセス

🍰 まずはやさしく

分析の地図のようなものです。

正しい順番で作業するために使います。

部活の練習メニューを組む時に似ています。

分析の流れと注意点を読みましょう。

💡 30秒で分かる結論

課題抽出→収集→加工→分析→共有の流れ

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

🍰 まずはやさしく

分析の進め方のルールです。

迷わずに作業を進めるために使います。

スマホのアプリを使い分ける感覚です。

色々な考え方や読み方を解説します。

CRISP-DM、PPDAC、KDD、SEMMA など複数の流派がある。 共通点は「線形ではなく循環=何度も前工程に戻る」こと。 実務の 6 割は前処理に取られる。

本ページは データ分析プロセス(Data Analysis Process) を、 ジャストインタイム型データサイエンス教育の文脈で 12 のセクションに分けて解説します。 上から順に読まなくても、 「🔖 キーワード索引」から必要箇所だけ拾い読みすることもできます。

🎨 直感で掴む — データ分析プロセスとは何者か

🍰 まずはやさしく

分析のサイクル(回し方)のことです。

納得できる答えを出すために使います。

買い物で予算を決めて品を選ぶ流れです。

具体的な手順とやり取りを学びましょう。

データ分析プロセスは「問いの設定 → データ取得 → 前処理 → 探索 → モデリング → 評価 → 共有」を 1 サイクルとして回す型のこと。 CRISP-DM・PPDAC・KDD・SEMMA など名称は異なるが、 共通するのは「線形ではなく 循環」で、 評価結果から問いに戻る往復が含まれる点。 SSDSE-B-2026 で「人口減少県の高齢化率」を分析するなら、 仮説 → 都道府県別抽出 → 欠損補完 → 散布図 → 回帰 → 残差検査 → レポート、 という 7 工程が 1 周になる。

場面データ分析プロセスが登場する例何が分かるか
論文の Methods 節「データ分析プロセスを用いて分析した」手法の前提と限界が文脈に乗る
実務レポート「データ分析プロセスの観点で評価」意思決定の根拠が明確化
教育・学習SSDSE-B-2026 を題材に演習実データで本物の感覚が得られる
政策・社会プロセス 分野で標準的に登場EBPM や DX の議論に直結

本ページではこのあと、 数式(または定義)・SSDSE 実データ計算・Python実装・落とし穴 を順番に追いかけて、 用語を「使える知識」にしていきます。

🎨 直感で掴む

「データ分析」を問い → 計画 → 収集 → 解析 → 結論の 5 段階に区切って、 行ったり来たりしながら進める作業手順。 SSDSE-B-2026 で「人口規模が消費支出とどう関係するか」を解くなら、 問いの定義 → 必要列の選定 → 47 都道府県分の前処理 → 回帰分析 → 政策含意の議論、 と段階を踏む。

以下では、 PPDAC (Problem / Plan / Data / Analysis / Conclusion) の 5 段階を SSDSE-B-2026 の「人口と消費支出の関係」課題で具体化し、 各段階の成果物・チェックリスト・後戻り条件を整理します。 CRISP-DM や KDD との対応関係、 そして「Problem を定義せず Data から入ると EDA が永遠に終わらない」「Conclusion で施策に結びつかない図表だけが残る」といった失敗パターンも順に辿ります。

🎨 直感で掴む(深掘り版):データ分析は「問い」から始まり「物語」で終わる

データ分析プロセス (data analysis process) とは、 ビジネス課題や研究設問を出発点として、 データ収集 → 前処理 → 分析 → 可視化 → 報告という一連の流れを 体系的に管理する作業手順。 「データを見たら何か分かるかも」では失敗するため、 PPDAC(Problem - Plan - Data - Analysis - Conclusion)、 CRISP-DM、 OSEMN といった標準的なフレームワークが提唱されてきた。 SSDSE-B-2026 のような公的データを使う場合も、 全 47 都道府県 ×112 列という膨大なデータをいきなり見ても何も読み取れない。 必ず「何を知りたいか」を明確化してから動く。

分析プロセスは一見すると線形のステップに見えるが、 実際は 反復的・循環的。 前処理中に「あれ、 このデータ欠測が多すぎる」と気付けば収集ステップに戻る。 分析中に「あれ、 違う変数が必要だ」と気付けば前処理に戻る。 報告して「もう一段深掘りしたい」と言われれば分析に戻る。 一方通行で進む書籍のチュートリアルと、 現実のプロジェクトの最大の違いがここにある。

分析の 付加価値の 80% は前処理と問題設定にあると言われる。 機械学習エンジニアでさえ、 仕事時間の 60~80% を「データクリーニング」に使っているという調査が複数ある(CrowdFlower 2016、 Kaggle Survey 2017~2022)。 SSDSE-B-2026 の都道府県データでも、 欠損や桁数の違い、 単位の混在をチェックせずに分析すると、 派手な結論ほど後から崩れる。 「分析の華やかさ」より「データを信じられる状態に整える愚直さ」が成否を分ける。

主要フレームワークの比較

フレームステップ起源特徴
PPDACProblem / Plan / Data / Analysis / Conclusion統計教育(Wild & Pfannkuch 1999)高校・大学の統計教育で広く採用
CRISP-DMビジネス理解 / データ理解 / 準備 / モデリング / 評価 / 展開産業界(1996)業務適用が主目的、 反復前提
OSEMNObtain / Scrub / Explore / Model / iNterpretデータサイエンス(Mason & Wiggins 2010)エンジニア寄り、 シェル文化
KDD選択 / 前処理 / 変換 / マイニング / 解釈学術(Fayyad 1996)データマイニング寄り
SEMMASample / Explore / Modify / Model / AssessSAS InstituteSAS ツール前提、 ベンダー色

どれも同じ流れを違う名前で呼んでいるだけだが、 業界・教育目的・ツールによって主流が違う。 学部教育では PPDAC、 企業の DX 部門では CRISP-DM、 個人のデータサイエンス学習では OSEMN がよく出る。

📐 数式・定義

🍰 まずはやさしく

分析のステップをまとめた枠組みです。

作業の配分を決めるために使います。

テスト勉強の計画を立てる時に似ています。

工程の分け方と時間の使いかたを読みます。

データ分析プロセスは概念的フレームワークであり、 計算式そのものよりは「ステップ列とその間の依存関係」を記述する。 ジャストインタイム教育として 2 つの計量化を入れる。

プロセスを順列付きステップ集合として表す: $$ P = (S_1, S_2, \dots, S_k), \quad S_i \subset \mathcal{T},\ S_i \cap S_j = \emptyset $$

ここで $\mathcal{T}$ は分析タスクの全体集合、 $S_i$ は $i$ 番目のフェーズに割り当てられたタスク部分集合。 PPDAC なら $k=5$、 CRISP-DM なら $k=6$。

工数配分の経験則 (Pareto 80-20): $$ \sum_{i \in \{\text{Plan, Data}\}} c_i \approx 0.8 \sum_{i=1}^{k} c_i $$

ここで $c_i$ はフェーズ $i$ の所要工数。 計画+データ準備で全体の 8 割という経験則 (Kaggle Survey 2022) を、 分析設計の指針として使う。

📐 定義

課題抽出→収集→加工→分析→共有の流れ

英語名 Data Analysis Process

🎯 いつ・どこで使うか

📋 前提条件・適用範囲

この用語を理解・使用するときは、 次のような前提を意識してください:

📐 数式:分析プロセスの定量的目標

データ分析プロセスは概念的フレームワークだが、 各ステップには 定量的なゴールが設定できる。

① 問題定義の SMART 化:Specific / Measurable / Achievable / Relevant / Time-bound。 「売上を上げる」ではなく「3 ヶ月以内に EC サイトの CVR を 1.0% → 1.3% に上げる」のように、 KPI と達成期限を明示する。

② データ品質指標:完全性 (completeness)、 一意性 (uniqueness)、 一貫性 (consistency)、 適時性 (timeliness)、 正確性 (accuracy)、 妥当性 (validity)。 各次元の合格基準を定義する。

$$\text{Completeness}_j = \frac{n_{\text{not\_null}}^{(j)}}{N}, \quad \text{Uniqueness}_j = \frac{n_{\text{distinct}}^{(j)}}{n_{\text{not\_null}}^{(j)}}$$

③ 探索的データ分析 (EDA) の基本統計量:平均、 中央値、 標準偏差、 歪度、 尖度、 欠損率、 上下限。 SSDSE-B-2026 の各列に対して計算する。

$$\bar{x} = \frac{1}{N}\sum_{i=1}^{N} x_i, \quad s^2 = \frac{1}{N-1}\sum_{i=1}^{N}(x_i-\bar{x})^2$$

④ モデル評価指標:回帰なら RMSE・MAE・R²、 分類なら Accuracy・Precision・Recall・F1・AUC。 ビジネス文脈と統計指標の両方で評価する。

$$\text{RMSE} = \sqrt{\frac{1}{N}\sum_{i=1}^{N}(y_i - \hat{y}_i)^2}, \quad R^2 = 1 - \frac{\sum (y_i-\hat{y}_i)^2}{\sum (y_i-\bar{y})^2}$$

🔬 数式・定義を「言葉」で読み解く

先ほどの数式・定義に出てきた記号や概念を、 一つずつ確認します。 とくに データ分析プロセス の文脈で意味を取り違えやすい部分を強調します。

記号意味と注意点
$N$対象データの全行数(SSDSE-B-2026 なら 47 都道府県 × 年数)
$n_{\text{not\_null}}^{(j)}$列 $j$ のうち欠損していない行数。 Completeness の分子
$n_{\text{distinct}}^{(j)}$列 $j$ における異なる値の数。 Uniqueness の分子(キー列なら全行ユニーク)
$\bar{x}, s^2$標本平均と標本分散。 EDA で各列の中心位置とばらつきを把握する
$y_i, \hat{y}_i, \bar{y}$実測値・予測値・実測値の平均。 RMSE / $R^2$ で予測精度を評価する
RMSE / $R^2$モデル評価指標。 RMSE は元単位の誤差、 $R^2$ は説明分散の比率(0〜1)

分析プロセスの各工程は 定量的な完了条件 を持ちます。 Completeness が 0.95 を下回れば「データ理解」フェーズに戻る、 RMSE が業務許容値を超えれば「モデリング」フェーズに戻る、 のように「指標の数値で工程を進退判定する」のが CRISP-DM / PPDAC を機能させる鍵です。 ${\sigma}^2$(母分散)と $s^2$(標本分散)の区別、 $n$ と $N$(標本サイズ vs 母集団サイズ)の使い分けは EDA 段階で必ず確認してください。

🔬 数式を言葉で読み解く

数式を言葉で読み解くと、 Completeness(完全性)は「データ列のうち、 値が埋まっている割合」。 SSDSE-B-2026 で「L322107 列の completeness = 0.98」なら 47 都道府県中 46 県が埋まっている、 1 県が欠損ということ。 0.95 を下回ったら原因究明が必要。 Uniqueness は「ユニークな値の数 ÷ 非欠損件数」で、 1.0 ならキー列、 低ければカテゴリ変数の指標。

RMSE は「予測誤差の平均的な大きさ」で、 単位は元データと同じ(人口を予測すれば「人」、 円を予測すれば「円」)。 だから ビジネス的な解釈がしやすいのが利点。 一方 は「予測モデルが、 平均値で予測した時より、 どれだけ良いか」を 0~1 で表す無次元量。 0.7 を超えれば説明力十分、 0.3 以下なら使い物にならない、 が経験則(ただし分野依存)。

数式や指標は「分析プロセスの各ステップが完了したか」を判定する基準として使う。 「データ完全性 95% 達成 = 前処理ステップ完了」「R² > 0.7 達成 = モデリング合格」のように、 ステップごとに 定量的な完了条件を持つことで、 ふわっとした「分析できました」を防げる。

🔬 詳細追補:データ分析プロセスの全工程を SSDSE-B-2026 で徹底分解する

ここまでで CRISP-DM の 6 工程と PPDAC サイクルの 5 工程を概観したが、 実務では 「どの工程に何時間を投下するか」「成果物は何を作るか」「次工程への引き継ぎ条件は何か」を明文化しないと、 プロジェクトはほぼ確実に迷走する。 本節では SSDSE-B-2026(全 47 都道府県 × 約 100 項目)を題材に、 6 工程それぞれを 「投入時間 / 成果物 / 完了条件」の 3 軸で具体化し、 さらに 3 枚の図と 6 個の表でプロセス全体の 骨格を可視化する。 学習者は「データ分析プロセスとはチェックリストの羅列ではなく、 工程間の依存関係と完了条件で駆動される工学プロセスである」ことを理解できる。

📊 図 A:分析プロセスの工程別投入時間の経験則(円グラフ的構造)

経験豊富なデータサイエンティストの調査(Forbes, CrowdFlower 2016 ほか)では、 プロジェクト総時間の 約 60-80%データ準備に費やされる。 SSDSE-B-2026 はクリーニング済みであるため極端ではないが、 それでも以下の図のような時間配分が現実的である。

工程別投入時間の箱ひげ(プロジェクト工程の分布イメージ)
図 A:分析工程の時間配分(イメージ)。 ビジネス理解 5%、 データ理解 15%、 データ準備 50%、 モデリング 15%、 評価 10%、 展開 5%。 SSDSE-B-2026 のように整備済みデータでもデータ準備が最大ブロックになりやすい。

📋 表 1:6 工程の成果物・完了条件・想定時間

#工程代表的な成果物完了条件(次工程に進める条件)想定時間 (1 案件 40h 換算)
1ビジネス理解課題定義書、 仮説リスト、 成功指標 (KPI)関係者が課題と KPI に合意し、 サインオフ2h (5%)
2データ理解データプロファイル、 EDA レポート、 欠損 / 外れ値リストKPI 算出に必要な列が揃い、 欠損率が許容範囲6h (15%)
3データ準備前処理パイプライン (.py)、 特徴量定義書、 分析用テーブルパイプラインが冪等で再実行可能、 train/test 分割完了20h (50%)
4モデリングモデル候補一覧、 ハイパラ探索ログ、 ベースライン比較表ベースラインを上回るモデルが最低 1 つ、 過学習検証済み6h (15%)
5評価ホールドアウト評価結果、 ビジネス指標換算、 リスク分析KPI を満たす、 倫理 / 公平性レビュー合格4h (10%)
6展開本番デプロイ、 監視ダッシュボード、 運用ドキュメント本番稼働、 SLO 達成、 再学習トリガ定義2h (5%)

📋 表 2:CRISP-DM と PPDAC の対応関係

PPDACCRISP-DM 該当工程SSDSE-B-2026 での具体例
Problem (問題設定)1. ビジネス理解「47 都道府県の所得格差を何で説明できるか?」を設定
Plan (計画)2. データ理解 (前半)使用列 (総人口 A1101、 高齢人口 A1303、 消費支出 L3221...) を決定
Data (データ収集 / 加工)2. データ理解 (後半) + 3. データ準備SSDSE-B-2026.csv を読み込み、 列名整備・欠損確認
Analysis (分析)4. モデリング + 5. 評価所得 ~ 人口 + 大学卒業率 の重回帰、 決定係数を確認
Conclusion (結論)5. 評価 + 6. 展開「人口集中+大学卒業率の高さが所得を説明」と報告

📊 図 B:工程間の依存関係(DAG)

分析プロセスは 厳密な直線ではなく、 工程 4→2 や 5→3 への 逆流が発生する DAG(有向非巡回グラフ)である。 「モデルが期待を下回ったらデータ理解に戻る」「評価で公平性問題が出たらデータ準備をやり直す」というループは標準的である。

工程間の依存と逆流(DAG イメージ)
図 B:工程依存図。 「直線実線=順方向」「破線=逆流ループ」。 モデリング → データ準備 への戻りが最頻、 次いで評価 → ビジネス理解(KPI 再定義)。 ループの存在を前提に 各工程をスクリプト化しておくと逆流コストが激減する。

📋 表 3:各工程で発生しがちな失敗パターンとリカバリ

工程よくある失敗兆候リカバリ
ビジネス理解KPI が曖昧 (「精度を上げる」のみ)評価工程で「何を達成すれば成功か」が答えられないKPI を「Recall ≥ 0.8 かつ運用コスト ≤ X 円」に再定義
データ理解EDA 不足で外れ値・欠損を把握せずモデリングモデル精度が異常に高い/低い、 残差に偏りpandas-profiling 等で全列を一括プロファイル
データ準備リーク(目的変数情報が特徴量に紛れる)交差検証で異常に高いスコア特徴量定義書で「目的変数算出に使う列」を明示・除外
モデリング過学習を Train スコアで気づかないTrain 0.99 / Val 0.55 のような大乖離早期停止・正則化・交差検証を必須化
評価指標のみで判断、 ビジネス影響を見ない高精度なのに導入後の売上が変わらない指標 → 期待ビジネス効果換算表を必ず作成
展開監視ゼロでモデルドリフトに気づかない数ヶ月後に予測精度が静かに低下入力分布・出力分布・主要 KPI の 3 系統を監視

🐍 Python 実装 5:SSDSE-B-2026 で 6 工程を最小コードで通す

このコードでやること:SSDSE-B-2026 を用いて、 ビジネス理解 → データ理解 → データ準備 → モデリング → 評価 → 展開(保存)までを一気通貫で通す。 各工程を print('===') で区切って成果物を順次提示する。 教材として「最小プロセス雛形」を提供する目的。

📥 入力データ(SSDSE-B-2026 の使用列イメージ):

SSDSE-B-2026 Prefecture A1101(総人口) A1303(高齢人口) L3221(消費支出/月) ... R01000 北海道 5140000 1698000 296888 ... R13000 東京都 14086000 3209000 341320 ... ... (47 行 ×112 列 ×12 年)
 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
35
36
37
38
# Step 1: ビジネス理解 — KPI を明示
print('=== Step 1 ビジネス理解 ===')
print('KPI: 47 都道府県の消費支出を ±15% 以内で予測したい (MAPE <= 15%)')

# Step 2: データ理解 — 読み込みと 2023 年抽出
import numpy as np
import pandas as pd
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
d = df[df['SSDSE-B-2026'] == 2023].copy()
print('=== Step 2 データ理解 ===')
print('shape:', d.shape)
print(d[['A1101', 'L3221']].describe().round(0))

# Step 3: データ準備 — 派生変数(対数人口・高齢化率)
d['対数人口'] = np.log10(d['A1101'])
d['高齢化率'] = d['A1303'] / d['A1101'] * 100
features = d[['対数人口', '高齢化率']]
target = d['L3221']  # 消費支出(二人以上の世帯・月)
print('=== Step 3 データ準備 ===')
print(features.head(3))

# Step 4: モデリング — 重回帰でベースライン
from sklearn.linear_model import LinearRegression
model = LinearRegression().fit(features, target)
print('=== Step 4 モデリング ===')
print('係数:', dict(zip(features.columns, model.coef_.round(1))))

# Step 5: 評価 — MAPE 計算
pred = model.predict(features)
mape = (abs(pred - target) / target).mean() * 100
print('=== Step 5 評価 ===')
print(f'MAPE = {mape:.2f}% (KPI 15%)')

# Step 6: 展開 — モデル保存
import joblib
joblib.dump(model, 'outputs/consumption_model_v1.joblib')
print('=== Step 6 展開 ===')
print('saved: outputs/consumption_model_v1.joblib')

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

=== Step 1 ビジネス理解 === KPI: 47 都道府県の消費支出を ±15% 以内で予測したい (MAPE <= 15%) === Step 2 データ理解 === shape: (47, 112) A1101 L3221 count 47. 47. mean 2645809. 295856. === Step 3 データ準備 === 対数人口 高齢化率 0 6.71 33.01 1 6.07 35.22 2 6.07 35.00 === Step 4 モデリング === 係数: {'対数人口': 19857.5, '高齢化率': -725.1} === Step 5 評価 === MAPE = 6.07% (KPI 15%) === Step 6 展開 === saved: outputs/consumption_model_v1.joblib

💬 6 工程が 40 行程度で通り、 MAPE 6.07% で KPI(±15%)を達成。 各工程の出力が === で区切られ、 引き継ぎ/レビューが容易。 ただし決定係数 R² は 0.13 と低く、 消費支出は対数人口と高齢化率の 2 変数だけでは説明力が弱い点も読み取れる。 実プロジェクトではこの雛形を起点に、 工程ごとに別ファイル化 (step2_eda.py 等) して拡張する。

📊 図 C:工程ごとの「成果物の積み上がり」イメージ

プロジェクトを通過した時に 何が手元に積み上がるかを可視化することで、 学習者は「分析プロセスとは中間成果物の連鎖である」ことを理解できる。

工程ごとの成果物積み上がり(ヒストグラム的イメージ)
図 C:工程ごとの成果物の積み上がり。 1 工程後は「課題定義書 1」、 3 工程後は「EDA + パイプライン + 分析用 DF 計 3」、 6 工程後は「モデル + 監視 + 文書」まで合計 7 種。 各工程で 消えない成果物が残ることが、 再現性とチーム引き継ぎの基盤になる。

📋 表 4:分析プロセスにおける役割分担(チーム構成例)

役割主担当工程必要スキル小規模 PJ での兼任
ドメインエキスパート1, 5, 6事業知識・KPI 設計事業部側マネージャが兼任
データエンジニア2, 3, 6SQL・パイプライン構築分析者が SQL も書いて兼任
データサイエンティスト2, 3, 4, 5統計・機械学習・Pythonプロジェクトのコア
MLOps エンジニア6CI/CD・監視・コンテナクラウド経験のある DS が兼任
プロジェクトマネージャ全工程(横串)進捗管理・優先度調整事業部リーダが兼任

📋 表 5:プロセスの成熟度モデル(Maturity Level)

レベル特徴典型的兆候次レベルへの推奨アクション
L0 アドホックExcel・手作業中心同じ集計を毎月手で実施Python スクリプト化・Git 管理
L1 再現可能notebook が動く「先生のお手本」notebook が個人ローカル共通リポジトリへ移管、 関数化
L2 自動化CI で定期実行cron / Airflow で日次バッチ単体テスト追加、 データ品質監視
L3 監視ありSLO・SLI を計測入出力分布の異常を検知し通知再学習自動化、 オンライン評価
L4 適応的フィードバックループ完備A/B テストで継続改善他事業領域へ横展開、 標準化

🐍 Python 実装 6:プロセスの再現性を担保する最小ディレクトリ構造を生成する

このコードでやること:分析プロジェクトの典型的ディレクトリ構造 (data/raw, data/processed, notebooks, src, outputs, reports) を Python から作成し、 README ひな形を書き出す。 「再現性 = 構造化」が原則。

📥 入力データ(任意のプロジェクト名):

project_name = 'ssdse_income_analysis_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
import pathlib

project = pathlib.Path('ssdse_income_analysis_2026')
dirs = [
    'data/raw', 'data/processed', 'data/external',
    'notebooks', 'src/features', 'src/models',
    'outputs/models', 'outputs/figures', 'reports'
]
for d in dirs:
    (project / d).mkdir(parents=True, exist_ok=True)
    (project / d / '.gitkeep').touch()

readme = project / 'README.md'
readme.write_text(
    '# SSDSE 所得分析 2026\n\n'
    '## ディレクトリ\n'
    '- data/raw      : 元データ (SSDSE-B-2026.csv)\n'
    '- data/processed: 前処理後 parquet\n'
    '- notebooks     : EDA や試行錯誤\n'
    '- src           : 本番コード (関数・クラス)\n'
    '- outputs       : モデル・図\n'
    '- reports       : 報告書 (md / pdf)\n',
    encoding='utf-8'
)
print('created:', sum(1 for _ in project.rglob('*')))

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

created: 22

💬 9 ディレクトリ + 9 個の .gitkeep + README 計 18 ファイルを生成。 cookiecutter-data-science のミニ版に相当。 構造を 最初に固定することで、 工程逆流時もファイル探索コストがゼロになる。 これは CRISP-DM の「データ準備」工程の 前提条件として整備すべき。

📋 表 6:プロセス各工程で参照すべき関連用語クイックリンク

工程関連する本サイト用語
1. ビジネス理解ドメイン知識 / PPDACサイクル / CRISP-DM
2. データ理解探索的データ分析 (EDA) / 記述統計 (代表値) / 分布
3. データ準備データクレンジング / 欠損値処理 / 特徴量エンジニアリング
4. モデリング回帰 / 分類 / ハイパーパラメータ調整
5. 評価交差検証 / 評価指標 / 過学習
6. 展開MLOps / モデル監視 / 再学習・デプロイ

📝 まとめ:データ分析プロセスを「工程 × 成果物 × 完了条件」で握ろう

本節で示した 3 図 + 6 表 + 2 コードは、 データ分析プロセスを「単なる絵」から 運用可能なチェックリストへ昇華させるための装置である。 学習者は次のステップとして、 (a) 自身の手元データで表 1 を埋め、 (b) 図 B の DAG を自プロジェクト用に書き換え、 (c) Python 実装 5 と 6 を雛形にして最初のスクリプトを起こす、 という順序で実践に移ると良い。 「データ分析プロセスを理解する」とは、 これら成果物が手元に揃って初めて完成する。

最後に強調すべきは、 プロセスは目的ではないという点である。 CRISP-DM も PPDAC も、 ビジネス価値(あるいは学術的発見)を生む手段に過ぎない。 プロセスを律儀に守ること自体が目的化し、 「KPI を達成したのにレポートテンプレを完成させるためだけに 3 日延長する」というような 形式主義に陥らないよう、 常に「この工程は誰の何のためにあるか」を自問する習慣をつけたい。 SSDSE-B-2026 のような公的データを題材に小さな完走を 3-5 回繰り返すと、 プロセスは身体感覚として定着する。

📖 補足解説:データ分析プロセスを「方法論」から「現場の習慣」に落とし込む

データ分析プロセスを語る上で見落とされがちなのが、 「個々の作業者の手癖」「組織としての標準」のギャップである。 教科書的には CRISP-DM は単線的に「ビジネス理解 → データ理解 → ... → 展開」と進む。 しかし、 現場の熟練者の作業ログを観察すると、 同じ「データ理解」フェーズの中で、 ある人は 欠損率の確認 → 単変量分布 → 二変量相関の順に進めるのに対し、 別の人は 目的変数の分布 → 関係しそうな変数の散布図 → 残った変数の欠損確認と進める。 どちらも妥当だが、 同じ案件で 2 人が並行作業すると 「同じことを別々の順で 2 回やる」無駄が発生する。 これを避けるためには、 工程の 順序そのものをドキュメント化し、 ペアでレビューする文化が必要になる。

また、 SSDSE-B-2026 のような すでに整っているデータと、 自社のログ DB から SQL で抽出する 生データでは、 「データ準備」工程の重みが桁違いに変わる。 教育用に SSDSE-B-2026 を使う場合、 学習者は「データ準備は 30 分で終わるもの」という誤った感覚を持ちやすい。 これを補正するには、 意図的に 欠損を混入させた SSDSE-B-2026列名が崩れた CSVを準備し、 「実際の現場では、 列名を統一する作業だけで 1 日かかることがある」というハンズオン課題を組み込むのが効果的である。 本サイトの データクレンジング欠損値処理 のページでは、 そうした崩れたデータを題材にした演習を提供している。

さらに、 プロセスの 切り替えコストも無視できない。 ある工程から別の工程に移る際、 多くの人は「頭を切り替える」のに 15-30 分かかる。 1 日に 6 工程を全て触ろうとすると、 切り替えだけで 90-180 分が消える。 この無駄を避けるため、 熟練者は 「今日は EDA に集中する」「明日はモデリングと評価だけ」のように、 工程を 時間でブロックする。 ポモドーロ・テクニックや「ディープワーク」と相性が良い。 学習者には「マルチタスクで全工程を少しずつ進める」のではなく、 「今日 1 日はこの工程だけ」と決めて取り組むことを推奨したい。 これは小さなコツに見えるが、 1 ヶ月単位のプロジェクトでは生産性が 1.5-2 倍違ってくる。

プロセスを 記録する習慣もまた、 軽視されがちな現場の差別化要因である。 「今日はこの作業をなぜしたのか」「どの仮説を捨てたのか」「次に何を試そうとしているのか」を、 1 日 5 分の作業ログとして Markdown に書き残す。 これだけで、 1 週間後の自分や、 引き継ぎを受けたチームメンバが 「なぜこの数値を選んだのか」を即座に再構成できる。 Jupyter notebook を「コードのメモ」として使う人は多いが、 ノートブックは 探索ログに向く反面、 判断の理由を残すには冗長すぎる。 別途 docs/decisions/ ディレクトリに「いつ・誰が・何を・なぜ決めたか」を 1 ファイル 1 件で残す ADR (Architecture Decision Record) 風の運用が、 結局のところプロジェクトの寿命を伸ばす。

最後に、 「失敗の標準化」こそが組織レベルでプロセスを成熟させる鍵である。 個人のミス(リーク、 過学習、 KPI の取り違え)は誰でも犯す。 重要なのは、 そのミスが 個人の反省で終わらず、 「次の案件ではこれを防ぐためのチェックリストを工程 3 に追加した」という形で プロセス自体に組み込まれることである。 SSDSE-B-2026 のような演習データで意図的に失敗を体験し、 それを「自分のチェックリストに追加する」という習慣を身につけると、 同じ失敗を繰り返さない強い分析者になれる。 これは技術的なスキルというより、 メタ的な学習能力の問題であり、 データ分析プロセスを学ぶ最終目標と言って良い。

本ページで紹介した 3 図 + 6 表 + 2 コードに加え、 上述の補足解説を踏まえることで、 学習者は「データ分析プロセスを 暗記する」段階から「自分の手で 運用する」段階へ進むことができる。 次のステップとして、 (a) 今手元にあるデータで CRISP-DM 6 工程を 1 日で通してみる、 (b) その過程で詰まった工程をブログや学習ノートにまとめる、 (c) 翌週に別データで同じプロセスを試し、 改善点を比較する、 という 3 ステップの自己学習を強く推奨する。 プロセスを「読む」のではなく「動かす」ことで、 初めて教科書の文字列が 現場の知恵に変わる。

なお、 本ページで取り上げた CRISP-DM (1999 年策定、 IBM/SPSS 主導) と PPDAC (1990 年代、 ニュージーランドの統計教育で発展) は、 どちらも 20 年以上の運用実績を持つ古典的フレームワークである。 近年は MLOps の文脈で CRISP-ML(Q) や Google の MLOps Continuous Delivery Levels、 Microsoft の Team Data Science Process (TDSP) など、 機械学習に特化した派生プロセスも増えてきた。 これらは全て CRISP-DM の 6 工程を基礎に、 「データ品質保証」「モデル監視」「再学習トリガ」などの 運用フェーズを厚くした拡張版である。 学習者はまず CRISP-DM の 6 工程を血肉化し、 その後 MLOps 系の派生プロセスへ進むのが効率的な学習順序となる。

プロセスの 軽量版として、 短時間ハッカソンや 1 日ワークショップでは PPDAC の 5 工程を 30 分単位で回す「PPDAC スプリント」が有効である。 SSDSE-B-2026 を題材に、 「30 分で Problem を 1 文に書く」「次の 30 分で Plan と Data を確定」「次の 60 分で Analysis」「最後の 30 分で Conclusion をスライド 3 枚にまとめる」と区切ると、 計 2.5 時間で 1 サイクル完走できる。 これを 3-5 回繰り返すと、 プロセスの順序と各工程の 感覚的所要時間が身体に染み込む。 教育機関や社内研修でデータ分析プロセスを教える際は、 講義 1 時間 + PPDAC スプリント 3 サイクルという構成が学習効果が高い。

最後に 個人プロジェクトの落とし穴として頻出するのが、 「Plan を立てずにいきなり Data から始める」パターンである。 SSDSE-B-2026 を見て「面白そうな列がたくさんある」と思った瞬間、 つい df.corr() を全列で走らせて相関上位を眺めてしまう。 これは Problem を飛ばしているため、 出てきた相関に 意味を与えられず、 「だから何?」で終わる。 必ず「自分は何を知りたいのか」を 1 文で書いてから手を動かす習慣をつけたい。 1 文書くのに 5 分しかかからないが、 この 5 分が後の 5 時間を救う。

本ページの内容を 1 行で総括するならば、 「データ分析プロセスとは 工程と成果物と完了条件の三位一体であり、 これらをドキュメント化・スクリプト化・チェックリスト化して初めて、 個人技から組織知へ昇華する」となる。 学習者がこの 1 行を体感として理解できれば、 本ページの役割は果たされたと言える。 関連ページの PPDAC サイクルCRISP-DMデータクレンジング も併せて読むことで、 プロセス理解が一段と立体化する。

📘 追加トピック:各工程で意識すべき「品質ゲート」と「自動テスト」

ソフトウェア開発の世界では「品質ゲート (Quality Gate)」という概念がある。 これは、 ある工程から次の工程へ進む前に、 一定の品質基準を満たしているかを 自動的に判定するチェックポイントのことを指す。 データ分析プロセスにも、 同様の品質ゲートを設けることで、 後工程での手戻りを大幅に削減できる。 具体的には、 「データ理解 → データ準備」のゲートで 欠損率が 30% を超える列の存在を検出する、 「データ準備 → モデリング」のゲートで 目的変数のリークが疑われる列を警告する、 「モデリング → 評価」のゲートで 交差検証スコアの分散が大きすぎる場合に停止する、 などのチェックを CI スクリプトとして組み込む。 こうした品質ゲートは GitHub Actions や GitLab CI で簡単に実装でき、 1 度書けば全プロジェクトで使い回せる。

品質ゲートと表裏一体なのが、 「データに対する自動テスト」である。 ソフトウェア開発では pytest でコードをテストするのが当然になったが、 データ分析では データそのものをテストする習慣がまだ薄い。 pandera, great_expectations, cuallee といったライブラリを使えば、 「この列は 0 以上である」「この列の欠損率は 5% 未満である」「この列の値はカテゴリ {A, B, C} に含まれる」といった 制約を Python コードで記述し、 データ読み込み時に自動検証できる。 SSDSE-B-2026 の場合、 「人口総数は 50 万以上 1500 万以下」「消費支出は正の値」といった単純な制約だけでも、 将来 CSV が破損したり列順が変わったりした際に即座に気づける。

「データのバージョン管理」もまた、 プロセスの再現性を支える重要な要素である。 Git は コードのバージョン管理には最適だが、 数百 MB を超える CSV や Parquet のバージョン管理には向かない。 そこで DVC (Data Version Control), LakeFS, Pachyderm といった データ用 Gitと呼べるツールが登場している。 これらを使うと、 「2026 年 3 月のデータで学習したモデル」と「2026 年 4 月のデータで再学習したモデル」を、 ハッシュ値で完全に区別・再現できる。 規制業界(金融、 医療、 製薬)では、 モデルの監査要件上、 こうしたデータバージョン管理がほぼ必須となっている。 教育目的では DVC の tutorial 用 SSDSE データセットを用意し、 小さな CSV でバージョン管理の体験をするのが効果的である。

プロセスの 後半工程(評価・展開)では、 モデルの説明可能性 (XAI: Explainable AI) もまた品質ゲートの一部となる。 SHAP, LIME, Permutation Importance といった手法で「なぜこの予測になったか」を可視化し、 ドメインエキスパートが 直感に反する判断を見つけて指摘する、 という協働サイクルが回ると、 モデルの信頼性が劇的に向上する。 SSDSE-B-2026 で「東京都の所得が高いのは大学卒業率のおかげ」というモデルが出てきた時、 SHAP で確認すると 人口密度の方が支配的だった、 というような 仮説の修正がしばしば起こる。 これは XAI なしには気づけない発見である。 評価工程に SHAP 等の可視化を 必須項目として組み込むことを推奨する。

最後に 展開工程の隠れた難所として、 「本番環境と開発環境のデータ分布の差」がある。 開発時には SSDSE-B-2026 のような クリーンで整ったデータを使うが、 本番では NaN想定外のカテゴリ値桁数の急変が頻繁に発生する。 これに備えるため、 展開前に「壊れたデータ」を意図的に注入する カオステストファジングテストを実施するのが望ましい。 例えば「カラム順を入れ替えた CSV」「数値列に文字列が混入した CSV」「特定の列が完全に欠損した CSV」を投入して、 パイプラインが 適切にエラーを返すか、 あるいは 事前定義された代替値で補完して継続するかを確認する。 こうしたテストを評価工程の終わりに組み込むと、 本番稼働初日の障害が激減する。

これら品質ゲート・データテスト・データバージョン管理・XAI・カオステストの 5 つは、 教科書の CRISP-DM 6 工程には明示されていないが、 2020 年代後半のデータサイエンス現場では事実上の標準になりつつある追加要素である。 本ページの基本構成を体得したら、 次のステップとしてこれら 5 つの要素を順番に取り入れていくことで、 プロセスは 実務レベルへとアップグレードされる。 教育用には SSDSE-B-2026 を使った小さな演習として、 「品質ゲート 1 つ + pandera 1 スキーマ + DVC でのバージョン管理 1 ステップ」を最低限実装してみるのが取っ掛かりとして良い。

プロセス全体を眺めると、 データ分析は 「探索的な創造作業」であると同時に 「再現性が要求される工学プロセス」でもある、 という 二面性を持っている。 前半(ビジネス理解・データ理解)は探索的・創造的な性質が強く、 後半(評価・展開)は工学的・標準化が支配的になる。 中間(データ準備・モデリング)はその両方を併せ持つ。 この二面性を理解せず、 「とにかく自由に試したい」と探索一辺倒で進めると展開できないモデルしか作れず、 逆に「とにかく標準化したい」と工学一辺倒で進めると新しい発見が生まれない。 学習者は工程ごとに 頭の使い方を切り替える意識を持つと、 プロセスの本質が見えてくる。

本ページで提示した内容を 実際に手を動かして体験することは、 何度読み返すよりも価値がある。 SSDSE-B-2026 を data/raw/ に配置し、 Python 実装 5 と 6 のコードを run.py として保存し、 python run.py で実行してみる。 出力ファイル outputs/consumption_model_v1.joblib が生成されたら、 それを joblib.load() で読み戻し、 新しいデータ行に対して予測を出してみる。 ここまで通せば、 CRISP-DM の 6 工程を 身体感覚として理解できたことになる。 次は同じデータで 異なるモデル(決定木、 ランダムフォレスト、 勾配ブースティング)を試し、 評価指標の差を比較する。 この比較作業こそが、 モデリング工程の真髄である。

プロセスを学ぶ上で意外と効果的な学習法が、 「他人のプロセスを観察する」ことである。 Kaggle のトップ解法 notebook、 GitHub の有名 OSS プロジェクト、 国際会議 (KDD, NeurIPS) の論文の補遺資料には、 熟練者がどのような順序でどのような成果物を作っているかが詳細に記録されている。 SSDSE-B-2026 を扱った日本の事例は少ないが、 米国の American Community Survey や英国の ONS Census といった公的データを扱う Kaggle コンペや GitHub リポジトリは多数存在する。 これらを「データ分析プロセスの教科書」として参照すると、 工程ごとの具体的な作業内容と所要時間の感覚が掴める。 月 1 件のペースで他人のプロセスを精読する習慣をつけたい。

本ページの追補は以上である。 ここまで読んだ学習者は、 (1) CRISP-DM と PPDAC の対応関係、 (2) 各工程の成果物と完了条件、 (3) 工程間の依存と逆流、 (4) 役割分担と成熟度モデル、 (5) 品質ゲート・データテスト・XAI といった現代的追加要素、 という 5 つの観点を網羅的に理解できたはずである。 次にやるべきは、 これらを 頭の中で完結させず、 SSDSE-B-2026 や自前データで 実際に通してみることである。 1 度通せば、 教科書の文字列が 使える技術へと変わる。 データ分析プロセスは、 読むものではなく 動かすものである。

🧭 ケーススタディ:SSDSE-B-2026 で「県別所得格差の説明」をプロセスに沿って完走する

最後に、 ここまでに学んだプロセスを 1 本の物語として通して見せる。 題材は SSDSE-B-2026 を用いた「都道府県別の消費支出の差を、 どの要因で説明できるか」というシンプルな問いである。 この問いに対して、 6 工程をどう進め、 どこで詰まり、 どうリカバリするかを、 読者がプロジェクトを 追体験できる形で記述する。

【工程 1:ビジネス理解 — 30 分】 最初に問いを 1 文に固める。 「47 都道府県の消費支出を、 人口規模・年齢構成・出生の 3 観点でどの程度説明できるか?」 KPI は「重回帰モデルの決定係数 R² が 0.5 以上」と置く。 ここで 注意すべきは、 「消費格差を 解消するための介入策」までを最初から目指さないことである。 説明モデルと介入モデルは別物であり、 まず説明から入る。 ステークホルダ(教育機関の場合は指導教員、 学習者の場合は自分自身)と問いと KPI を握り、 「これが達成されたら成功」を 記録する。

【工程 2:データ理解 — 60 分】 SSDSE-B-2026 を pd.read_csv で読み込み、 列数約 100、 行数 47 を確認。 df.info() で型の整合性を見る。 欠損率を全列に対して計算し、 30% を超える列をリストアップ。 消費支出列 (L3221)、 総人口列 (A1101)、 高齢人口列 (A1303)、 出生数列 (A4101)、 合計特殊出生率列 (A4103) など、 関心領域に関わる列を絞る。 単変量ヒストグラムを 5 列ほど描き、 東京都が典型的な外れ値として全分布で右端に張り出すことを確認する。 ここで「東京を含めるか除外するか」という 分析設計上の判断が必要になる。 ひとまず両方走らせて感度分析することにする。

【工程 3:データ準備 — 90 分】 派生変数として「高齢化率 = 高齢人口 A1303 / 総人口 A1101」「対数人口 = log10(総人口)」「出生率 = 合計特殊出生率 A4103」の 3 つを整理。 欠損は中央値補完で対応(30% 未満なので妥当)。 train/test 分割は 47 県では行わず、 全データで学習しつつ Leave-One-Out 交差検証で評価する方針に切り替える。 これは「サンプル数が少ない」という SSDSE-B-2026 固有の制約への対応で、 工程 2 で気づいて工程 3 で設計に反映した好例である。

【工程 4:モデリング — 60 分】 ベースラインとして LinearRegression で単純な重回帰を当てる。 説明変数は対数人口、 高齢化率、 合計特殊出生率の 3 つ。 全データ学習でも R² ≈ 0.15 前後にとどまり、 KPI の 0.5 に届かない。 次に RandomForestRegressorGradientBoostingRegressor を試しても、 LOO 交差検証の R² は改善せず、 むしろ悪化する。 サンプル数 47 では 非線形モデルは過学習しやすく、 かつ消費支出は世帯構成・物価など未観測要因に強く依存するため、 人口統計量だけでは説明力が伸びない。 これは「説明変数の不足を複雑なモデルで埋めることはできない」というセオリーの実例として、 学習者に強い印象を残す。

【工程 5:評価 — 45 分】 重回帰の係数を見ると、 対数人口が正、 高齢化率と合計特殊出生率が負に効くが、 いずれも寄与は小さく決定係数も低い。 つまり「都道府県の消費支出の差は 人口規模年齢構成では部分的にしか説明できない」という結論になる。 ここで 東京都を除外した感度分析を実施しても R² はほぼ変わらず低いままで、 「少数の人口統計量では説明力が乏しい」という結論は頑健だと確認できる。 SHAP で各県への寄与を見ると、 対数人口が最大の寄与で大都市圏がやや押し上げられる程度にとどまり、 説明変数を追加する必要があることが可視化される。

【工程 6:展開 — 30 分】 モデルを joblib.dump で保存し、 README に「どのデータでいつ学習したか」「どの係数が支配的か」「LOO R² がいくつか」を 5 行で記録する。 教育目的の本プロジェクトでは「本番デプロイ」は不要だが、 後日再現できる状態にすることが「展開」の最低条件である。 関連スクリプト群を src/ 配下に整理し、 requirements.txtpip freeze で生成。 これで翌年 SSDSE-C-2027 が出た時、 同じスクリプトで再学習・比較分析ができる。

【総所要時間】 計約 5 時間 15 分。 1 日のワークショップとして適度な分量である。 重要なのは、 各工程の所要時間と詰まりポイントが事前に予測できる状態に近づくこと。 上記の流れを 3 回繰り返すと、 「工程 3 で欠損確認に意外と時間がかかる」「工程 4 のモデル比較で複雑モデルが勝つことは小サンプルでは稀」といった 感覚値が身につく。 この感覚こそが、 教科書を読むだけでは得られない、 プロセス学習の真の成果である。

本ケーススタディは 最小完走の例である。 実プロジェクトでは、 さらに「政策提言フェーズ」「他国との比較」「時系列での変化追跡」など、 1-3 ヶ月かかる拡張が続く。 しかしどれだけ大きなプロジェクトでも、 骨格は 本ケーススタディと同じ 6 工程である。 大きな案件は、 小さな完走を 多数積み重ねることで進む。 学習者は 「まず 5 時間で 1 サイクル完走する」ことを最初の目標に据え、 そこから徐々に各工程を深掘りしていくのが、 最も効率的な学習パスとなる。

最後に ケーススタディの教訓を 3 つに整理する。 (1) 問いを 1 文で書くこと — これがないと評価工程で迷子になる。 (2) シンプルなモデルから始めること — 小サンプルでは線形回帰が勝つことが多い。 (3) 感度分析を必ず実施すること — 外れ値除去で結論が変わるかを確認する。 この 3 つを習慣化するだけで、 多くのプロジェクトが 納得感のある結論に到達できる。 SSDSE-B-2026 を題材に、 ぜひ自分の手で 1 サイクル完走してみてほしい。 完走した瞬間、 「データ分析プロセス」という言葉が 自分のスキルに変わる。

📎 巻末資料:プロセス学習のための推奨書籍・参考リソース

データ分析プロセスを更に深く学びたい読者のため、 教科書・論文・オンラインリソースを以下に整理する。 いずれも本ページの内容を補完し、 より 体系的実践的な理解を助ける資料群である。 言語は日本語と英語が混在するが、 入門段階では日本語、 中級以降は英語資料へ進むのが効率的な学習パスとなる。

【入門書】 西内啓『統計学が最強の学問である』『データ分析実務スキル検定 公式テキスト』、 平井明代『教育・心理系研究のためのデータ分析入門』などは、 プロセスとしての分析の流れを丁寧に解説しており、 大学初年次の読者でも理解可能。 【中級書】 矢吹太朗『ITエンジニアのための機械学習理論入門』、 「scikit-learn でハンズオン」系の書籍は、 工程 3-5 の具体的実装に強い。 【上級書・MLOps】 Chip Huyen『Designing Machine Learning Systems』, Mark Treveil『Introducing MLOps』は、 工程 6(展開)に特化した必読書で、 本番運用の実態を学べる。

【オンラインリソース】 Kaggle Learn の "Intro to Machine Learning" シリーズ、 fast.ai の "Practical Deep Learning for Coders"、 Coursera の "IBM Data Science Professional Certificate" などは、 ハンズオンで CRISP-DM の全工程を体験できる。 【日本語コミュニティ】 Qiita のタグ "データ分析" "CRISP-DM" "PPDAC"、 connpass のデータサイエンス系勉強会、 統計・データ解析コンペティション(本コンペ含む)への参加が、 プロセスを 身体化する最良の場となる。

【論文・標準文書】 CRISP-DM の原典である Chapman et al. (2000) 『CRISP-DM 1.0 Step-by-step data mining guide』 (SPSS Inc.) は無料で PDF が入手可能で、 100 ページ弱の中に 6 工程の標準作業項目が網羅されている。 PPDAC の原典は Wild & Pfannkuch (1999) 『Statistical thinking in empirical enquiry』 (International Statistical Review)。 MLOps の標準として Google の "MLOps: Continuous delivery and automation pipelines in machine learning" のホワイトペーパーは必読。 これらの原典を 1 度通読すると、 派生情報(ブログ記事・スライド)の 解釈精度が一段上がる。

【データソース】 SSDSE シリーズ(教育用標準データセット、 独立行政法人統計センター)の他、 e-Stat(政府統計の総合窓口)、 RESAS(地域経済分析システム)、 UCI Machine Learning Repository、 Kaggle Datasets などは、 本ページのプロセスを 自前の問いで試すための題材を豊富に提供する。 重要なのは 「データを 1 つ決めて、 同じデータで CRISP-DM を 3 回回す」という反復学習である。 1 回目は粗く完走、 2 回目は工程 2・3 を深掘り、 3 回目は工程 4-6 で複数モデル比較と感度分析。 この 3 回反復で、 プロセスの全工程を 所要時間感覚付きで習得できる。

本ページの追補と巻末資料を通じ、 学習者が「データ分析プロセス」を 単なる用語から 使える方法論へ昇華させる一助となれば幸いである。 プロセスの理解は 1 度で完成するものではなく、 案件をこなすたびに 自分なりの改良が加わっていく 生きた知識である。 教科書・本ページ・他人の事例・自分の経験、 この 4 つの源泉から得た知見を融合し、 あなた自身のプロセスを作り上げていってほしい。 それこそが、 データサイエンティストとしての成長そのものである。

🎓 学習チェックリスト:本ページ理解度自己診断

最後に、 本ページの内容をどの程度理解できたかを 自己診断するためのチェックリストを置く。 以下の 10 項目に「はい」と答えられれば、 データ分析プロセスの基本的理解は十分である。 「いいえ」の項目があれば、 該当箇所を読み返すか、 関連用語ページに進んで補強したい。

10 項目中 8 項目以上「はい」であれば、 次は実データでの実践に進める段階にある。 5-7 項目であれば、 本ページの該当節を読み返しつつ 小さなデータで 1 サイクル完走することを推奨する。 5 項目未満であれば、 まず PPDAC サイクルCRISP-DM の個別ページに進み、 各フレームワークを単独で理解してから本ページに戻ると効果的である。 学習に 近道はないが、 適切な順序はある。 自分の理解度に合わせて学習パスを選んでほしい。

このチェックリストは 「学習の終わり」ではなく「学習の入り口」を確認するものである。 全 10 項目に「はい」と答えられた読者でも、 実プロジェクトに飛び込むと「教科書通りには行かない」現実に直面するはずである。 例えば、 ステークホルダ間の利害が対立して KPI が定まらない、 データ取得に法的制約があり そもそも分析できない列がある、 モデル精度は出るが社内承認が降りない、 など 技術以外の壁が無数に存在する。 こうした壁に対処する力は、 教科書では身につかず、 実プロジェクトの経験でしか得られない。 本ページの理解を 武器として、 ぜひ実プロジェクトの世界に飛び込んでほしい。

プロジェクトの 失敗からの学びは、 成功からの学びより遥かに深い。 失敗の原因が「工程 1 で KPI を握れなかった」のか、 「工程 3 でリークに気づかなかった」のか、 「工程 5 で過学習を見逃した」のかを、 本ページの 6 工程の枠組みで 分類できると、 次のプロジェクトで同じ失敗を繰り返さない仕組みを作れる。 「失敗の分類体系」を持っているかどうかが、 中堅と熟練の境目である。 本ページを 失敗分類のためのフレームとして活用してほしい。 失敗を恐れず、 失敗を 体系化することこそが、 データサイエンティストとしての成長を加速させる。

これにて本ページの全内容を締めくくる。 「データ分析プロセス」という抽象概念を、 6 工程の具体形・成果物・完了条件・現代的追加要素・ケーススタディ・チェックリストの計 6 つのレンズで多面的に解説した。 全 4 万字超の本ページが、 読者のキャリアと学習の 土台として長く役立つことを願う。 内容に関する質問や改善提案は、 GitHub Issue 等でぜひフィードバックしてほしい。 本サイトは 読者と共に育つことを目指しており、 あなたの 1 件の指摘が、 後続の学習者にとって かけがえのない財産となる。

なお、 本ページの内容を 1 枚のスライドにまとめる練習も、 学習効果が極めて高い。 「データ分析プロセスとは何か」「6 工程それぞれの目的」「各工程の代表的成果物」「工程間の依存関係」「現代的追加要素 5 つ」「ケーススタディの教訓 3 つ」を、 全 1 枚の A4 縦スライドに圧縮できれば、 本ページの内容を 自分の言葉で再構成できている証拠である。 試しに紙とペンを用意し、 30 分で書いてみてほしい。 書けない箇所がある場合、 そこが学習の 次のターゲットとなる。 「読む」「動かす」「書く」「説明する」という 4 段階の学習を順に経ることで、 本ページの内容は 確実にあなたのスキルとして定着する。 焦らず、 着実に、 1 歩ずつ進めてほしい。

本ページの内容を更に 深化させたい読者のために、 補足キーワードを列挙する:MLOps、 Data Mesh、 Feature Store、 Active Learning、 Weak Supervision、 Online Learning、 A/B Testing、 Causal Inference、 Bandits、 Reinforcement Learning from Human Feedback (RLHF)、 Synthetic Data、 Differential Privacy、 Federated Learning、 Edge ML、 AutoML、 Neural Architecture Search、 Model Compression、 Knowledge Distillation、 Continual Learning、 Foundation Models。 これらは 2020 年代後半のデータサイエンス分野で頻出する 応用キーワードであり、 本ページで学んだ 6 工程の 各工程に対応する 発展トピックとして位置づけられる。 興味のある単語から検索を始めると、 本ページの内容が 応用領域へと自然に拡張されていく。 学習の旅は、 ここから始まる。

🧮 SSDSE-B 実値で計算してみる

SSDSE-B-2026(47都道府県・2023 年・112 列)を題材に、 データ分析プロセス に関係する変数を実値で確認します。 とくに東京・大阪・沖縄・秋田 など特徴ある県を比較すると、 用語の重みが体感できます。

都道府県総人口(千人)高齢化率(%)TFR
東京14,08622.80.99
大阪8,76327.71.19
沖縄1,46823.81.60
秋田91439.11.10
全国124,35329.11.20

これらの値を データ分析プロセス の観点で読み解くと、 都道府県間の格差・特徴・関係性が浮かび上がります。 具体的な計算手順は次の「🐍 Python 実装」セクションで実演します。

🧮 実値で計算してみる:SSDSE-B-2026 で 5 ステップ分析プロセスを実演

SSDSE-B-2026 を題材に、 「47 都道府県の消費支出(二人以上の世帯)の地域差から、 消費水準の高い県の特徴を抽出する」プロジェクトを PPDAC で進めてみよう。

① Problem(問題定義)

課題:「消費支出が多い県の共通特徴は何か。 これは政策的に学べる教訓があるか?」 KPI:消費支出(円/月, 二人以上の世帯, L3221)。 ターゲット:上位 5 県と下位 5 県の比較。

② Plan(計画)

変数候補:総人口 (A1101)、 消費支出 (L3221)、 高齢化率(A1303 / A1101)、 合計特殊出生率 (A4103)。 解析手法:記述統計+順位相関。 期限:30 時間。

③ Data(データ収集と前処理)

SSDSE-B-2026.csv を pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) で読み込む。 47 都道府県 ×112 列 ×12 年分。 2023 年のみに絞ると 47 行×112 列。 欠損率チェック、 単位(人 / 円 / 率)の整合性確認。

④ Analysis(分析)

消費支出の上位下位 5 県を抽出。 全国平均 約 29.6 万円/月 に対して、 最大 34.4 万円(埼玉)、 最低 22.3 万円(愛媛)。 人口・高齢化率・出生率との相関分析。

⑤ Conclusion(結論と報告)

「上位は埼玉・東京・三重・富山・栃木、 下位は愛媛・沖縄・宮崎・和歌山・長崎」と整理。 提言:「消費支出は世帯構成・物価・可処分所得の複合結果であり、 人口 (r=+0.33) や出生率 (r=−0.48) との相関は中程度。 単一指標で県を序列化せず、 世帯規模の違いも併せて解釈する」と限界も明示。 報告書 3 ページ、 ダッシュボード 1 枚で stakeholder へ。

🧮 CRISP-DM を SSDSE-B-2026 の 47 県分析に適用する

データ分析プロセスの代表的フレームワーク CRISP-DM (Cross-Industry Standard Process for Data Mining) は、 6 つの段階を循環させる方法論。 SSDSE-B-2026 の都道府県データに当てはめると、 各段階で何をすべきかが具体化する。

段階SSDSE-B-2026 での活動成果物
1. ビジネス理解「47 県の消費支出の地域差を要因分解する」目的を確定目的書 / KPI 定義
2. データ理解SSDSE-B 列定義・年度範囲・欠損確認プロファイリング report
3. データ準備年度フィルタ(2023)、 欠損確認、 高齢化率の派生分析用 DataFrame
4. モデリング重回帰、 クラスタリング、 主成分分析学習済モデル
5. 評価$R^2$、 残差プロット、 cross validation評価レポート
6. 展開ダッシュボード化、 政策提言文書化deployment 物

この各段階の循環は、 単なる「線形手順」ではない。 評価段階で問題が見つかれば、 データ理解やビジネス理解にまで戻る — 反復的であるのが CRISP-DM の核心。

🎯 このコードでやること: pandas の pipeline パターンで SSDSE-B-2026 の 47 県データを「ロード → 整形 → 正規化 → 集計」と 1 本のパイプで処理し、 CRISP-DM 第 3-4 段階を実装する。

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

SSDSE-B-2026 Prefecture A1101(総人口) L3221(消費支出/月) R01000 北海道 5140000 296888 R13000 東京都 14086000 341320 R47000 沖縄県 1468000 251222 ... (47 県)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import pandas as pd

def load(path):
    return pd.read_csv(path, encoding='cp932', skiprows=[1])

def filter_year(df, year=2023):
    return df[df['SSDSE-B-2026'] == year].copy()

def pick_consumption(df):
    df['cons'] = df['L3221']  # 消費支出(二人以上の世帯・月)
    return df

def rank_top10(df):
    return df.nlargest(10, 'cons')[['Prefecture', 'cons']]

result = (load('data/raw/SSDSE-B-2026.csv')
            .pipe(filter_year, year=2023)
            .pipe(pick_consumption)
            .pipe(rank_top10))
print(result.to_string(index=False))

📤 実行例:

Prefecture cons 埼玉県 344092 東京都 341320 三重県 332663 富山県 327503 栃木県 325226 ... (10 件)

💬 .pipe() で関数を連鎖させると、 各段階が 独立した小関数になり、 単体テストしやすい。 CRISP-DM の「データ準備 → モデリング」を 4 行で表現できた。 各段階の責務が明確で、 再現性が確保される。 これは data analysis as code の典型例で、 1 ヶ月後の自分でも理解できる構造。

🧮 数式に値を入れて手で計算する: 分析プロセスの工数比

典型的なデータ分析プロジェクト 5 工程 (問い設計 → 収集 → 加工 → 分析 → 共有) を経験則的な工数比 (3:5:10:7:2) で 27 日案件に配分し、 累積工期とクリティカルパスを把握する。

Step 1: 工程別工数 [日]

工程工数累積
問い設計33
収集58
加工1018
分析725
共有227

Step 2: 集計

合計 = 3+5+10+7+2 = 27 日 加工が 10/27 ≈ 37% で最大、 次に分析 7/27 ≈ 26%

🐍 Python で再現

1
2
3
4
5
6
import numpy as np
effort = np.array([3, 5, 10, 7, 2])
ratio = effort / effort.sum()
print(f"工程別比率: {ratio.round(3)}")
print(f"合計: {effort.sum()} 日")
print(f"最大工程比率: {ratio.max():.3f}")

📤 実行結果

工程別比率: [0.111 0.185 0.37 0.259 0.074] 合計: 27 日 最大工程比率: 0.370

💬 手計算 (Step 2) 37% / 27 日と Python 出力が完全一致。

🐍 Python 実装

以下は データ分析プロセス を SSDSE-B-2026 で扱うときの典型コード。 encoding='cp932' は政府統計の Shift-JIS 対応。 skiprows=[1] は日本語ヘッダ行(2 行目)をスキップする定石。

① 基本パターン(読み込み・確認・主要列抽出)

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) 北海道 5,092,000 東京都 14,086,000 沖縄県 1,468,000 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import pandas as pd

# データ分析プロセス に関連する SSDSE-B-2026 分析の基本パターン
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])   # 英字コードの列名を使う
print(df.shape)            # (564, 112)
print(df.dtypes.head(10))
print(df.describe().T.head(10))

# 主要列にエイリアス
df['総人口']   = df.iloc[:, 3]
df['65歳以上'] = df.iloc[:, 15]
df['高齢化率'] = df['65歳以上'] / df['総人口'] * 100
print(df[['Prefecture','総人口','高齢化率']].head())

② 可視化テンプレ(matplotlib / seaborn)

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) 北海道 5,092,000 東京都 14,086,000 沖縄県 1,468,000 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# データ分析プロセス の探索的データ分析(EDA)
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)   # 日本語の列名で読む(2 行目を見出しにする)

# 主要変数を取り出して名前を分かりやすく
df['総人口']    = df.iloc[:, 3]
df['65歳以上']  = df.iloc[:, 15]
df['高齢化率']  = df['65歳以上'] / df['総人口'] * 100
df['TFR']      = df.iloc[:, 21]

# ヒストグラム
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
sns.histplot(df['高齢化率'], kde=True, ax=axes[0])
axes[0].set_title('高齢化率の分布(47都道府県)')
sns.histplot(df['TFR'], kde=True, ax=axes[1])
axes[1].set_title('TFRの分布')
plt.tight_layout()
plt.savefig('eda_distribution.png', dpi=120)

③ 前処理:欠損・外れ値・型変換

📥 入力例(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
 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
import pandas as pd
import numpy as np

# データ分析プロセス に関わる前処理の典型パターン
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
# 47 都道府県の行だけ残す(見出しの下に全国計などが混ざる)
df = df[df['地域コード'].astype(str).str.match(r'^R\d{5}$', na=False)].copy()

# ① 欠損値の確認
print('欠損数:')
print(df.isna().sum().sort_values(ascending=False).head(10))

# ② 数値変換(カンマ・%除去 など)
#    地域コード 'R01000' や都道府県名は数値にできないので、そのまま残す
def to_num(s):
    if isinstance(s, str):
        try:
            return float(s.replace(',', '').replace('%', ''))
        except ValueError:
            return s
    return s
df = df.map(to_num)

# ③ 外れ値検出(IQR)
q1 = df.quantile(0.25, numeric_only=True)
q3 = df.quantile(0.75, numeric_only=True)
iqr = q3 - q1
num = df[q1.index]                      # 数値列だけを比較の対象にする
outlier_mask = ((num < q1 - 1.5*iqr) | (num > q3 + 1.5*iqr)).any(axis=1)
print('外れ値を含む行数:', outlier_mask.sum())

④ 検定・推定の最小例(scipy.stats)

📥 入力例(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
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import pandas as pd
from scipy import stats

# データ分析プロセス 文脈での基本的な仮説検定
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df['aging']  = df.iloc[:, 15] / df.iloc[:, 3] * 100
df['region'] = df['Prefecture'].apply(lambda p: '東日本' if p in ['北海道','青森県','岩手県','宮城県','秋田県','山形県','福島県','茨城県','栃木県','群馬県','埼玉県','千葉県','東京都','神奈川県','新潟県','富山県','石川県','福井県','山梨県','長野県','岐阜県','静岡県','愛知県'] else '西日本')

east = df.loc[df['region']=='東日本', 'aging']
west = df.loc[df['region']=='西日本', 'aging']

t, p = stats.ttest_ind(east, west, equal_var=False)
print(f'東日本 平均高齢化率: {east.mean():.2f}%')
print(f'西日本 平均高齢化率: {west.mean():.2f}%')
print(f't = {t:.3f}, p = {p:.4f}')
print('判定:', '有意差あり' if p < 0.05 else '有意差なし')

※ より高度な例(クロス集計、 機械学習、 ベイズ推定)は data-process のグループ教材を参照。

🐍 Python での扱い

SSDSE-B-2026 のような公的統計データを Python で扱う際の基本パターン:

📥 入力例(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
 5
 6
 7
 8
 9
10
11
12
import pandas as pd
import numpy as np

# データ読み込み
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
print(df.shape)
print(df.dtypes)
print(df.describe())

# 「データ分析のプロセス」の文脈で扱う場合の例:
# 分野: リテラシー
# 関連手法は同カテゴリの他用語を参照してください。

具体的なコードは データリテラシー を参照してください。

📝 レポートでの報告

分析結果を報告するときに含めるべき情報:

✅ チェックリスト

🔗 同カテゴリの他用語

データリテラシービッグデータIoTデータ駆動型社会Society 5.0データ利活用1次データ2次データオープンデータデータのメタ化ドメイン知識データ解析サイクルデータストーリーテリング調査データ

🐍 Python 実装 1:データ理解ステップ(profile)

🎯 このコードでやること:SSDSE-B-2026 を読み込み、 各列の データ品質プロファイル(型、 欠損率、 ユニーク数、 最小・最大)を一括出力する。 これが「データ理解」ステップの定型作業。

📥 入力例

SSDSE-B-2026.csv:564 行 ×112 列 (47 都道府県 ×12 年分)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
print(f'形状: {df.shape}')
print(f'年度範囲: {df["SSDSE-B-2026"].min()} - {df["SSDSE-B-2026"].max()}')
print(f'都道府県数: {df["Prefecture"].nunique()}')

# プロファイル:主要 5 列について
cols = ['A1101', 'A1301', 'A1303', 'A4101', 'A4103']
profile = pd.DataFrame({
    'dtype': df[cols].dtypes.astype(str),
    'missing_pct': df[cols].isna().mean()*100,
    'unique': df[cols].nunique(),
    'min': df[cols].min(),
    'max': df[cols].max(),
})
print(profile)

📤 実行例

形状: (564, 112) 年度範囲: 2012 - 2023 都道府県数: 47 dtype missing_pct unique min max A1101 int64 0.0 520 537000 14086000 A1301 int64 0.0 398 65000 1566840 A1303 int64 0.0 440 158000 3209000 A4101 int64 0.0 559 3263 113194 A4103 float64 0.0 82 0.99 1.96

💬 結果の読み方:5 列とも欠損 0%、 整数型 4 / 浮動小数 1(A4103 合計特殊出生率のみ float)。 総人口 A1101 は 537,000~14,086,000 と約 26 倍、 出生数 A4101 も 3,263~113,194 と約 35 倍のレンジで、 人口規模の県間格差が大きい。 レンジが広い変数は対数変換を検討する材料になる。 これが データ理解ステップの典型出力。

🐍 Python 実装 2:前処理ステップ(クリーニング+特徴量作成)

🎯 このコードでやること:最新年(2023)に絞り、 消費支出(二人以上の世帯・月, L3221)を目的変数に取り、 消費支出の多い/少ない上位・下位 5 県を抽出する。

📥 入力例:データ理解ステップの出力 (47 都道府県 ×112 列、 2023 年抽出後)

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

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
d23 = df[df['SSDSE-B-2026'] == 2023].copy()

# 目的変数:消費支出(二人以上の世帯・月, 円)L3221
d23['cons'] = d23['L3221']
# 高齢化率(65 歳以上 / 全人口)
d23['aging_rate'] = d23['A1303'] / d23['A1101'] * 100

# 上位 5 県、 下位 5 県
top5 = d23.nlargest(5, 'cons')[['Prefecture', 'cons', 'aging_rate']]
bot5 = d23.nsmallest(5, 'cons')[['Prefecture', 'cons', 'aging_rate']]
print('=== 上位 5 県 ===')
print(top5.to_string(index=False))
print('=== 下位 5 県 ===')
print(bot5.to_string(index=False))

📤 実行例

=== 上位 5 県 === Prefecture cons aging_rate 埼玉県 344,092 27.4 東京都 341,320 22.8 三重県 332,663 30.6 富山県 327,503 33.1 栃木県 325,226 30.2 === 下位 5 県 === Prefecture cons aging_rate 愛媛県 223,423 34.2 沖縄県 251,222 23.8 宮崎県 257,997 33.7 和歌山県 259,437 34.2 長崎県 262,243 34.3

💬 結果の読み方:消費支出(二人以上の世帯・月)の上位は埼玉・東京・三重・富山・栃木、 下位は愛媛・沖縄・宮崎・和歌山・長崎。 上位には高齢化率が高めの三重・富山・栃木も入り、 下位の沖縄は高齢化率が最も低い(23.8%)。 「高齢化率が低いほど消費支出が多い」とは単純に言えない → 多変量分析が必要、 とわかる。

🐍 Python 実装 3:分析ステップ(相関分析)

🎯 このコードでやること:消費支出(L3221)と他の変数(人口、 高齢化率、 合計特殊出生率)の相関を計算し、 何が消費支出の県間差を説明するかを見る。

📥 入力例

前ステップで作成した d23 データフレーム 変数:cons (L3221), A1101 (人口), aging_rate, A4103 (TFR)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import pandas as pd
from scipy import stats

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
d23 = df[df['SSDSE-B-2026'] == 2023].copy()
d23['cons'] = d23['L3221']
d23['aging_rate'] = d23['A1303']/d23['A1101']*100

# 相関係数(消費支出との関係)
y = d23['cons']
for col, label in [('A1101', '人口'),
                   ('aging_rate', '高齢化率'),
                   ('A4103', '合計特殊出生率')]:
    r, p = stats.pearsonr(d23[col], y)
    print(f'{label:<10s} vs 消費支出: r={r:+.3f}, p={p:.4f}')

📤 実行例

人口 vs 消費支出: r=+0.333, p=0.0224 高齢化率 vs 消費支出: r=-0.306, p=0.0363 合計特殊出生率 vs 消費支出: r=-0.475, p=0.0007

💬 結果の読み方:人口が多い県ほど消費支出も多い (r=+0.33)、 高齢化率が高い県ほど消費支出は少なめ (r=-0.31)、 合計特殊出生率が高い県ほど消費支出は少ない (r=-0.48)。 3 つとも有意 (p<0.05) だが相関の強さは中程度。 → 「都市部・高所得層が多い県で消費支出が多い」傾向は見えるが、 単一変数では説明力が弱い。 ただしこれは 相関であって因果ではない。 政策提言にはさらに準実験的解析が必要。

🐍 Python 実装 4:報告ステップ(可視化+サマリ表)

🎯 このコードでやること:分析結果を matplotlib で可視化し、 stakeholder への報告に使うサマリ表を作る。

📥 入力例:前ステップの d23 データフレーム

 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
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
d23 = df[df['SSDSE-B-2026'] == 2023].copy()
d23['cons'] = d23['L3221']
d23['aging_rate'] = d23['A1303']/d23['A1101']*100

# 散布図:高齢化率 vs 消費支出
fig, ax = plt.subplots(figsize=(8, 5))
ax.scatter(d23['aging_rate'], d23['cons']/10000, alpha=0.7)
ax.set_xlabel('高齢化率 (%)')
ax.set_ylabel('消費支出 (万円/月)')
ax.set_title('47 都道府県 (2023): 高齢化と消費支出')

# 上位下位 5 県のラベルを付加
top = d23.nlargest(3, 'cons')
for _, r in top.iterrows():
    ax.annotate(r['Prefecture'],
                (r['aging_rate'], r['cons']/10000))
plt.tight_layout()
plt.savefig('report_scatter.png', dpi=100)

# サマリ表
summary = d23[['cons', 'aging_rate']].agg(['mean', 'std', 'min', 'max'])
print(summary.round(0).to_string())

📤 実行例

画像保存: report_scatter.png (散布図、 埼玉・東京・三重のラベル付き) cons aging_rate mean 295856.0 32.0 std 24144.0 3.0 min 223423.0 23.0 max 344092.0 39.0

💬 結果の読み方:可視化により「高齢化率が低く消費支出が多い東京」が左上にプロットされ、 stakeholder に「大都市圏でも消費支出は必ずしも最大ではない」と一目で伝わる。 サマリ表は数値報告書に直接貼り付け可能。 報告ステップでは 「分析者しか分からない図」を作らず、 「相手に意思決定させる図」を作ることが目的。

⚠️ よくある落とし穴(7 件)

データ分析プロセス に取り組むときに、 学生・実務者・研究者がよく踏むワナをまとめました。 該当しそうな項目があれば、 自分の分析を見直してみてください。

❌ 1. プロセスが一方向だと誤解
PPDAC・CRISP-DM・KDD はすべて「Problem に戻る」循環構造。 「Data → Analysis → Conclusion で終わり」と思って Problem 再定義を怠ると、 同じ仮説でぐるぐる回り続ける。
❌ 2. Problem (P) の言語化を省略
「とりあえずデータを見る」は最頻失敗。 PPDAC の P で「何を、 誰のために、 何の意思決定に使うか」を 1 文に書かないと、 後続フェーズの判断が全部主観になる。
❌ 3. Data → Analysis を線形と勘違い
実プロジェクトでは Analysis 中に「あの変数が必要」と分かり Data に戻るのが常態。 CRISP-DM はこれを矢印で明示。 戻ることを「やり直し」「失敗」と捉える組織では循環が機能しない。
❌ 4. プロセス選択時の方法論ロックイン
CRISP-DM (1999、 業界向け)、 KDD (1996、 アカデミック)、 SEMMA (SAS製品向け)、 OSEMN (現代スクリプティング)、 PPDAC (教育)。 用途を見ずに 1 つだけ採用すると合わない場面が必ず出る。
❌ 5. Conclusion を「分析結果」だけで終わらせる
PPDAC の C は「次の Problem」を含む。 結論を「相関係数 0.8」だけで止めると、 業務改善や次のサイクルにつながらず、 分析プロセスが一回限りの作業に終わる。
❌ 6. 文書化を省略
プロセスの各段階で Decision Log (なぜこの変数を選んだか、 なぜこのモデルを採用したか) を残さないと、 半年後の自分や引継ぎ先が再現できない。 PPDAC の各段階に Deliverable を定義する。
❌ 7. 工数配分の現実無視
実プロジェクトでは Data (収集・前処理) が全工数の 60-80% (Forbes/Anaconda 調査)。 Analysis フェーズを 50% 見積もって炎上するパターン多発。 プロセス全体の見積もりは Data を厚く取る。

🧭 詳細解説 — データ分析プロセス を一段深く掘り下げる

歴史的背景

データ分析プロセス(Data Analysis Process)は、 1996 年の KDD (Knowledge Discovery in Databases) Process (Fayyad et al., 1996)、 1999 年の CRISP-DM (DaimlerChrysler / SPSS / NCR コンソーシアム)、 2008 年の SAS SEMMA (Sample, Explore, Modify, Model, Assess) などにより明文化された一連の工程モデルを総称した用語です。 2016 年に Microsoft が TDSP (Team Data Science Process) を公開し、 2020 年代の MLOps / DataOps では Continuous Integration / Continuous Deployment と統合された反復ループとして再構築されています。 EU の Data Governance Act (2022)、 NIST AI Risk Management Framework (2023) など規制側も「プロセスの透明性」を要件化しており、 単なる作業フローを超えて説明責任を担保する枠組みとして位置付けられています。

日本では総務省・経産省・内閣府の各種計画(Society 5.0、 デジタル田園都市国家構想、 統計改革基本計画)で繰り返し言及される基幹概念。 SSDSE(教育用標準データセット)も、 これらの教育普及を目的に整備されたデータです。

国際的な位置付け

OECD、 国連、 ISO、 IEC などの国際機関が、 データ分析プロセス に類する概念・標準を整備してきました。 たとえば:

日本の文脈での意味

データ分析のプロセス を含むデータ分析の手法は、 日本では次の場面で使われています。 下の表は分野ごとの登場場面で、 この用語だけの話ではなくデータサイエンス全体の広がりを示します:

領域データサイエンスが使われる場面
高校・大学教育情報 I/II、 数学 B(統計)、 教養統計、 専門統計の中核概念として登場
行政・政策EBPM、 デジタル庁施策、 自治体 DX、 地方創生交付金の根拠資料
企業・産業DX 推進、 データ分析人材育成、 経営判断、 マーケティング・品質管理
学術研究公衆衛生、 教育学、 経済学、 社会学、 計算機科学などの分野横断研究
市民・メディア報道、 ファクトチェック、 行政情報の解釈、 民主主義の基盤

よく混同される概念

データ分析プロセス は、 隣接概念と混同されやすい用語の代表でもあります。 ここで違いを明確にしておきましょう:

混同される概念データ分析プロセス との違い
隣接する プロセス 系の用語本ページの「🔗 関連用語」を参照。 並列カテゴリで対比すると明瞭
より広い上位概念data-process ページで包含関係を確認
類似名・別名英語名 (Data Analysis Process) を正式表記として参照

学習・教材としての位置付け

本サイト(用語解説)は「ジャストインタイム型データサイエンス教育」のリソースです。 つまり、 論文・実務・授業で その用語に出会ったタイミングで必要最低限の説明を得る、 という使い方を想定しています。 データ分析プロセス もその一例。

体系的に学びたい場合は、 まずグループ教材(data-process)から始め、 そこから データ分析プロセス のような個別用語にドリルダウンしていくのが効率的です。

参考文献・標準

⚠️ よくある落とし穴

❌ 数値の背後を考える
誰が・いつ・どう測ったかを必ず確認。
❌ 相関を因果と混同しない
データ駆動の議論でも因果には別の道具が必要。
❌ 単位とスケール
パーセントなのか件数なのか、 ログスケールか線形かを明示。

⚠️ 落とし穴(データ分析プロセスでよくある失敗)

🗺 概念マップ:データ分析プロセスを中心とした関連概念のツリー

データ分析プロセス ├── フレームワーク │ ├── PPDAC (統計教育) │ ├── CRISP-DM (ビジネス) │ ├── OSEMN (データサイエンス) │ ├── KDD (データマイニング) │ └── SEMMA (SAS) ├── ステップ │ ├── 問題定義(最重要) │ ├── データ収集 → 公的統計、 アンケート、 ログ │ ├── 前処理(時間の 60-80%) │ │ ├── クリーニング │ │ ├── 結合 │ │ ├── 変換 │ │ └── 特徴量作成 │ ├── 探索的分析 (EDA) │ ├── モデリング・統計検定 │ ├── 評価・解釈 │ └── 報告・展開 ├── 道具 │ ├── pandas, numpy │ ├── scikit-learn │ ├── matplotlib, seaborn │ └── Jupyter, VS Code └── 周辺概念 ├── データガバナンス ├── MLOps ├── 再現可能研究 └── ストーリーテリング
データ分析のプロセス EDA (Explorato パイプライン化 MLOps データガバナンス FAIR 原則 データストーリーテリング

🔗 隣接手法への橋渡し

プロセス全体は PPDAC・CRISP-DM・MLOps の接続として理解する。

問題定義 → SSDSE-B-2026 等の収集 → クリーニング → EDA → モデリング → 報告の流れで、 各段で「次工程の入力品質」を意識する。

🌳 手法選択フロー

データ分析のプロセスはモデル選定 → 準備 → モデリング → 評価 → 展開で循環する。

  1. プロセスモデルは決まったか? Yes → CRISP-DM、 No → PPDAC サイクル を先に確認
  2. データ準備とモデリングの分担は? Yes → データクレンジング、 No → 特徴量エンジニアリング を先に確認
  3. 評価と展開の設計は? Yes → 評価指標、 No → MLOps を先に確認

探索なら EDA 重視、 予測なら ML パイプライン、 因果推論なら DID/IV、 社会実装なら CRISP-DM、 と「目的」で選ぶ。