このページ内のセクションへ素早く飛べます(クリックで該当箇所へジャンプ):
「データ分析プロセス」は問いの設定からインサイト共有までを工程化した一連の手順。 PPDAC や CRISP-DM が代表例で、 各工程の成果物・完了条件・関係者・反復ループを明確化することで属人化を防ぐ。 本ページでは PPDAC と CRISP-DM の対応、 6 工程の成果物と完了条件、 工程間の依存と逆流、 役割分担、 MLOps 時代の追加要素 (データテスト・XAI 等) を整理する。
これらのキーワードは「問いを立てる → データを集める → 分析する → 結論を共有する → 振り返って改善」というデータ分析プロセスの反復構造を構成する。
🍰 まずはやさしく
分析の地図のようなものです。
正しい順番で作業するために使います。
部活の練習メニューを組む時に似ています。
分析の流れと注意点を読みましょう。
課題抽出→収集→加工→分析→共有の流れ
🍰 まずはやさしく
分析の進め方のルールです。
迷わずに作業を進めるために使います。
スマホのアプリを使い分ける感覚です。
色々な考え方や読み方を解説します。
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 の都道府県データでも、 欠損や桁数の違い、 単位の混在をチェックせずに分析すると、 派手な結論ほど後から崩れる。 「分析の華やかさ」より「データを信じられる状態に整える愚直さ」が成否を分ける。
| フレーム | ステップ | 起源 | 特徴 |
|---|---|---|---|
| PPDAC | Problem / Plan / Data / Analysis / Conclusion | 統計教育(Wild & Pfannkuch 1999) | 高校・大学の統計教育で広く採用 |
| CRISP-DM | ビジネス理解 / データ理解 / 準備 / モデリング / 評価 / 展開 | 産業界(1996) | 業務適用が主目的、 反復前提 |
| OSEMN | Obtain / Scrub / Explore / Model / iNterpret | データサイエンス(Mason & Wiggins 2010) | エンジニア寄り、 シェル文化 |
| KDD | 選択 / 前処理 / 変換 / マイニング / 解釈 | 学術(Fayyad 1996) | データマイニング寄り |
| SEMMA | Sample / Explore / Modify / Model / Assess | SAS Institute | SAS ツール前提、 ベンダー色 |
どれも同じ流れを違う名前で呼んでいるだけだが、 業界・教育目的・ツールによって主流が違う。 学部教育では 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 は「予測誤差の平均的な大きさ」で、 単位は元データと同じ(人口を予測すれば「人」、 円を予測すれば「円」)。 だから ビジネス的な解釈がしやすいのが利点。 一方 R² は「予測モデルが、 平均値で予測した時より、 どれだけ良いか」を 0~1 で表す無次元量。 0.7 を超えれば説明力十分、 0.3 以下なら使い物にならない、 が経験則(ただし分野依存)。
数式や指標は「分析プロセスの各ステップが完了したか」を判定する基準として使う。 「データ完全性 95% 達成 = 前処理ステップ完了」「R² > 0.7 達成 = モデリング合格」のように、 ステップごとに 定量的な完了条件を持つことで、 ふわっとした「分析できました」を防げる。
ここまでで CRISP-DM の 6 工程と PPDAC サイクルの 5 工程を概観したが、 実務では 「どの工程に何時間を投下するか」「成果物は何を作るか」「次工程への引き継ぎ条件は何か」を明文化しないと、 プロジェクトはほぼ確実に迷走する。 本節では SSDSE-B-2026(全 47 都道府県 × 約 100 項目)を題材に、 6 工程それぞれを 「投入時間 / 成果物 / 完了条件」の 3 軸で具体化し、 さらに 3 枚の図と 6 個の表でプロセス全体の 骨格を可視化する。 学習者は「データ分析プロセスとはチェックリストの羅列ではなく、 工程間の依存関係と完了条件で駆動される工学プロセスである」ことを理解できる。
経験豊富なデータサイエンティストの調査(Forbes, CrowdFlower 2016 ほか)では、 プロジェクト総時間の 約 60-80% が データ準備に費やされる。 SSDSE-B-2026 はクリーニング済みであるため極端ではないが、 それでも以下の図のような時間配分が現実的である。
| # | 工程 | 代表的な成果物 | 完了条件(次工程に進める条件) | 想定時間 (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%) |
| PPDAC | CRISP-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. 展開 | 「人口集中+大学卒業率の高さが所得を説明」と報告 |
分析プロセスは 厳密な直線ではなく、 工程 4→2 や 5→3 への 逆流が発生する DAG(有向非巡回グラフ)である。 「モデルが期待を下回ったらデータ理解に戻る」「評価で公平性問題が出たらデータ準備をやり直す」というループは標準的である。
| 工程 | よくある失敗 | 兆候 | リカバリ |
|---|---|---|---|
| ビジネス理解 | KPI が曖昧 (「精度を上げる」のみ) | 評価工程で「何を達成すれば成功か」が答えられない | KPI を「Recall ≥ 0.8 かつ運用コスト ≤ X 円」に再定義 |
| データ理解 | EDA 不足で外れ値・欠損を把握せずモデリング | モデル精度が異常に高い/低い、 残差に偏り | pandas-profiling 等で全列を一括プロファイル |
| データ準備 | リーク(目的変数情報が特徴量に紛れる) | 交差検証で異常に高いスコア | 特徴量定義書で「目的変数算出に使う列」を明示・除外 |
| モデリング | 過学習を Train スコアで気づかない | Train 0.99 / Val 0.55 のような大乖離 | 早期停止・正則化・交差検証を必須化 |
| 評価 | 指標のみで判断、 ビジネス影響を見ない | 高精度なのに導入後の売上が変わらない | 指標 → 期待ビジネス効果換算表を必ず作成 |
| 展開 | 監視ゼロでモデルドリフトに気づかない | 数ヶ月後に予測精度が静かに低下 | 入力分布・出力分布・主要 KPI の 3 系統を監視 |
このコードでやること:SSDSE-B-2026 を用いて、 ビジネス理解 → データ理解 → データ準備 → モデリング → 評価 → 展開(保存)までを一気通貫で通す。 各工程を print('===') で区切って成果物を順次提示する。 教材として「最小プロセス雛形」を提供する目的。
📥 入力データ(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 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') |
📤 実行すると次の出力が得られる:
💬 6 工程が 40 行程度で通り、 MAPE 6.07% で KPI(±15%)を達成。 各工程の出力が === で区切られ、 引き継ぎ/レビューが容易。 ただし決定係数 R² は 0.13 と低く、 消費支出は対数人口と高齢化率の 2 変数だけでは説明力が弱い点も読み取れる。 実プロジェクトではこの雛形を起点に、 工程ごとに別ファイル化 (step2_eda.py 等) して拡張する。
プロジェクトを通過した時に 何が手元に積み上がるかを可視化することで、 学習者は「分析プロセスとは中間成果物の連鎖である」ことを理解できる。
| 役割 | 主担当工程 | 必要スキル | 小規模 PJ での兼任 |
|---|---|---|---|
| ドメインエキスパート | 1, 5, 6 | 事業知識・KPI 設計 | 事業部側マネージャが兼任 |
| データエンジニア | 2, 3, 6 | SQL・パイプライン構築 | 分析者が SQL も書いて兼任 |
| データサイエンティスト | 2, 3, 4, 5 | 統計・機械学習・Python | プロジェクトのコア |
| MLOps エンジニア | 6 | CI/CD・監視・コンテナ | クラウド経験のある DS が兼任 |
| プロジェクトマネージャ | 全工程(横串) | 進捗管理・優先度調整 | 事業部リーダが兼任 |
| レベル | 特徴 | 典型的兆候 | 次レベルへの推奨アクション |
|---|---|---|---|
| L0 アドホック | Excel・手作業中心 | 同じ集計を毎月手で実施 | Python スクリプト化・Git 管理 |
| L1 再現可能 | notebook が動く | 「先生のお手本」notebook が個人ローカル | 共通リポジトリへ移管、 関数化 |
| L2 自動化 | CI で定期実行 | cron / Airflow で日次バッチ | 単体テスト追加、 データ品質監視 |
| L3 監視あり | SLO・SLI を計測 | 入出力分布の異常を検知し通知 | 再学習自動化、 オンライン評価 |
| L4 適応的 | フィードバックループ完備 | A/B テストで継続改善 | 他事業領域へ横展開、 標準化 |
このコードでやること:分析プロジェクトの典型的ディレクトリ構造 (data/raw, data/processed, notebooks, src, outputs, reports) を Python から作成し、 README ひな形を書き出す。 「再現性 = 構造化」が原則。
📥 入力データ(任意のプロジェクト名):
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('*'))) |
📤 実行すると次の出力が得られる:
💬 9 ディレクトリ + 9 個の .gitkeep + README 計 18 ファイルを生成。 cookiecutter-data-science のミニ版に相当。 構造を 最初に固定することで、 工程逆流時もファイル探索コストがゼロになる。 これは CRISP-DM の「データ準備」工程の 前提条件として整備すべき。
| 工程 | 関連する本サイト用語 |
|---|---|
| 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 度通せば、 教科書の文字列が 使える技術へと変わる。 データ分析プロセスは、 読むものではなく 動かすものである。
最後に、 ここまでに学んだプロセスを 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 に届かない。 次に RandomForestRegressor と GradientBoostingRegressor を試しても、 LOO 交差検証の R² は改善せず、 むしろ悪化する。 サンプル数 47 では 非線形モデルは過学習しやすく、 かつ消費支出は世帯構成・物価など未観測要因に強く依存するため、 人口統計量だけでは説明力が伸びない。 これは「説明変数の不足を複雑なモデルで埋めることはできない」というセオリーの実例として、 学習者に強い印象を残す。
【工程 5:評価 — 45 分】 重回帰の係数を見ると、 対数人口が正、 高齢化率と合計特殊出生率が負に効くが、 いずれも寄与は小さく決定係数も低い。 つまり「都道府県の消費支出の差は 人口規模や 年齢構成では部分的にしか説明できない」という結論になる。 ここで 東京都を除外した感度分析を実施しても R² はほぼ変わらず低いままで、 「少数の人口統計量では説明力が乏しい」という結論は頑健だと確認できる。 SHAP で各県への寄与を見ると、 対数人口が最大の寄与で大都市圏がやや押し上げられる程度にとどまり、 説明変数を追加する必要があることが可視化される。
【工程 6:展開 — 30 分】 モデルを joblib.dump で保存し、 README に「どのデータでいつ学習したか」「どの係数が支配的か」「LOO R² がいくつか」を 5 行で記録する。 教育目的の本プロジェクトでは「本番デプロイ」は不要だが、 後日再現できる状態にすることが「展開」の最低条件である。 関連スクリプト群を src/ 配下に整理し、 requirements.txt を pip 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-2026(47都道府県・2023 年・112 列)を題材に、 データ分析プロセス に関係する変数を実値で確認します。 とくに東京・大阪・沖縄・秋田 など特徴ある県を比較すると、 用語の重みが体感できます。
| 都道府県 | 総人口(千人) | 高齢化率(%) | TFR |
|---|---|---|---|
| 東京 | 14,086 | 22.8 | 0.99 |
| 大阪 | 8,763 | 27.7 | 1.19 |
| 沖縄 | 1,468 | 23.8 | 1.60 |
| 秋田 | 914 | 39.1 | 1.10 |
| 全国 | 124,353 | 29.1 | 1.20 |
これらの値を データ分析プロセス の観点で読み解くと、 都道府県間の格差・特徴・関係性が浮かび上がります。 具体的な計算手順は次の「🐍 Python 実装」セクションで実演します。
SSDSE-B-2026 を題材に、 「47 都道府県の消費支出(二人以上の世帯)の地域差から、 消費水準の高い県の特徴を抽出する」プロジェクトを PPDAC で進めてみよう。
課題:「消費支出が多い県の共通特徴は何か。 これは政策的に学べる教訓があるか?」 KPI:消費支出(円/月, 二人以上の世帯, L3221)。 ターゲット:上位 5 県と下位 5 県の比較。
変数候補:総人口 (A1101)、 消費支出 (L3221)、 高齢化率(A1303 / A1101)、 合計特殊出生率 (A4103)。 解析手法:記述統計+順位相関。 期限:30 時間。
SSDSE-B-2026.csv を pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) で読み込む。 47 都道府県 ×112 列 ×12 年分。 2023 年のみに絞ると 47 行×112 列。 欠損率チェック、 単位(人 / 円 / 率)の整合性確認。
消費支出の上位下位 5 県を抽出。 全国平均 約 29.6 万円/月 に対して、 最大 34.4 万円(埼玉)、 最低 22.3 万円(愛媛)。 人口・高齢化率・出生率との相関分析。
「上位は埼玉・東京・三重・富山・栃木、 下位は愛媛・沖縄・宮崎・和歌山・長崎」と整理。 提言:「消費支出は世帯構成・物価・可処分所得の複合結果であり、 人口 (r=+0.33) や出生率 (r=−0.48) との相関は中程度。 単一指標で県を序列化せず、 世帯規模の違いも併せて解釈する」と限界も明示。 報告書 3 ページ、 ダッシュボード 1 枚で stakeholder へ。
データ分析プロセスの代表的フレームワーク 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 抜粋):
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)) |
📤 実行例:
💬 .pipe() で関数を連鎖させると、 各段階が 独立した小関数になり、 単体テストしやすい。 CRISP-DM の「データ準備 → モデリング」を 4 行で表現できた。 各段階の責務が明確で、 再現性が確保される。 これは data analysis as code の典型例で、 1 ヶ月後の自分でも理解できる構造。
典型的なデータ分析プロジェクト 5 工程 (問い設計 → 収集 → 加工 → 分析 → 共有) を経験則的な工数比 (3:5:10:7:2) で 27 日案件に配分し、 累積工期とクリティカルパスを把握する。
| 工程 | 工数 | 累積 |
|---|---|---|
| 問い設計 | 3 | 3 |
| 収集 | 5 | 8 |
| 加工 | 10 | 18 |
| 分析 | 7 | 25 |
| 共有 | 2 | 27 |
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}") |
💬 手計算 (Step 2) 37% / 27 日と Python 出力が完全一致。
以下は データ分析プロセス を SSDSE-B-2026 で扱うときの典型コード。 encoding='cp932' は政府統計の Shift-JIS 対応。 skiprows=[1] は日本語ヘッダ行(2 行目)をスキップする定石。
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()) |
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) |
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()) |
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 のグループ教材を参照。
SSDSE-B-2026 のような公的統計データを Python で扱う際の基本パターン:
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()) # 「データ分析のプロセス」の文脈で扱う場合の例: # 分野: リテラシー # 関連手法は同カテゴリの他用語を参照してください。 |
具体的なコードは データリテラシー を参照してください。
分析結果を報告するときに含めるべき情報:
🎯 このコードでやること:SSDSE-B-2026 を読み込み、 各列の データ品質プロファイル(型、 欠損率、 ユニーク数、 最小・最大)を一括出力する。 これが「データ理解」ステップの定型作業。
📥 入力例:
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) |
📤 実行例:
💬 結果の読み方:5 列とも欠損 0%、 整数型 4 / 浮動小数 1(A4103 合計特殊出生率のみ float)。 総人口 A1101 は 537,000~14,086,000 と約 26 倍、 出生数 A4101 も 3,263~113,194 と約 35 倍のレンジで、 人口規模の県間格差が大きい。 レンジが広い変数は対数変換を検討する材料になる。 これが データ理解ステップの典型出力。
🎯 このコードでやること:最新年(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)) |
📤 実行例:
💬 結果の読み方:消費支出(二人以上の世帯・月)の上位は埼玉・東京・三重・富山・栃木、 下位は愛媛・沖縄・宮崎・和歌山・長崎。 上位には高齢化率が高めの三重・富山・栃木も入り、 下位の沖縄は高齢化率が最も低い(23.8%)。 「高齢化率が低いほど消費支出が多い」とは単純に言えない → 多変量分析が必要、 とわかる。
🎯 このコードでやること:消費支出(L3221)と他の変数(人口、 高齢化率、 合計特殊出生率)の相関を計算し、 何が消費支出の県間差を説明するかを見る。
📥 入力例:
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}') |
📤 実行例:
💬 結果の読み方:人口が多い県ほど消費支出も多い (r=+0.33)、 高齢化率が高い県ほど消費支出は少なめ (r=-0.31)、 合計特殊出生率が高い県ほど消費支出は少ない (r=-0.48)。 3 つとも有意 (p<0.05) だが相関の強さは中程度。 → 「都市部・高所得層が多い県で消費支出が多い」傾向は見えるが、 単一変数では説明力が弱い。 ただしこれは 相関であって因果ではない。 政策提言にはさらに準実験的解析が必要。
🎯 このコードでやること:分析結果を 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()) |
📤 実行例:
💬 結果の読み方:可視化により「高齢化率が低く消費支出が多い東京」が左上にプロットされ、 stakeholder に「大都市圏でも消費支出は必ずしも最大ではない」と一目で伝わる。 サマリ表は数値報告書に直接貼り付け可能。 報告ステップでは 「分析者しか分からない図」を作らず、 「相手に意思決定させる図」を作ることが目的。
データ分析プロセス に取り組むときに、 学生・実務者・研究者がよく踏むワナをまとめました。 該当しそうな項目があれば、 自分の分析を見直してみてください。
データ分析プロセス(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・MLOps の接続として理解する。
問題定義 → SSDSE-B-2026 等の収集 → クリーニング → EDA → モデリング → 報告の流れで、 各段で「次工程の入力品質」を意識する。
データ分析のプロセスはモデル選定 → 準備 → モデリング → 評価 → 展開で循環する。
探索なら EDA 重視、 予測なら ML パイプライン、 因果推論なら DID/IV、 社会実装なら CRISP-DM、 と「目的」で選ぶ。