本文へスキップ
統計ロードマップ
Textbook

Python 3 エンジニア認定 データ分析試験 教科書

**Python 3 エンジニア認定 データ分析試験** は、一般社団法人 **Python エンジニア育成推進協会(PythonED)** が主催する、Python によるデータ分析の **基礎力** を測る CBT 試験です。主教材『Python によるあたらしいデータ分析の教科書』(翔泳社)に準拠し、**Python 文法・NumPy・pandas・Matplotlib・scikit-learn・統計と機械学習の基礎** が出題範囲です。本教科書は、その全範囲を 10 章で体系的にカバーします。

目次

  1. 1 章 · 試験の全体像と学習プラン
    試験形式・出題範囲・推奨学習プランを整理し、効率の良い対策の設計図を作ります。
  2. 2 章 · Python 文法と環境の復習
    本試験で前提となる Python の基本文法・データ構造・標準ライブラリを最小限のポイントで整理します。
  3. 3 章 · NumPy ─ 数値計算の基礎
    ndarray の基本・ブロードキャスト・主要関数を整理します。
  4. 4 章 · pandas ─ 表形式データの操作
    Series / DataFrame・読込・選択・集計・結合・欠測処理を整理します。
  5. 5 章 · Matplotlib ─ 可視化の基礎
    Pyplot 風 API・Object 指向 API・主要グラフ・スタイルを整理します。
  6. 6 章 · scikit-learn の基礎
    Estimator API・前処理・Pipeline・GridSearchCV を整理します。
  7. 7 章 · 教師あり学習 ─ 回帰と分類
    回帰 / 分類の主要モデルと、scikit-learn での代表的な使い方を整理します。
  8. 8 章 · 教師なし学習とモデル評価
    クラスタリング・次元削減と、評価指標 / 交差検証を整理します。
  9. 9 章 · 数学の基礎(行列・微分・確率)
    出題範囲に含まれる『数学の基礎』の最低限を、機械学習との接続を意識して整理します。
  10. 10 章 · 応用と試験対策の総まとめ
    scikit-image / 自然言語処理の入口と、試験当日のチェックリストを整理します。
Chapter 1

1 章 · 試験の全体像と学習プラン


§1.1

Python データ分析試験の位置付け

Python 3 エンジニア認定 データ分析試験 は、Python の文法を一通り押さえた上で、NumPy / pandas / Matplotlib / scikit-learn の基本的な使い方統計 / 機械学習の基礎 を測る試験です。データサイエンティスト未経験者・初学者の登竜門として位置付けられます。

  • 主催: 一般社団法人 Python エンジニア育成推進協会(PythonED)
  • 形式: CBT(全国の試験会場で随時受験可)
  • 問題数 / 時間: 40 問 / 60 分(4 択選択式)
  • 合格基準: 正答率 70%(28 問以上)
  • 受験料: 一般 11,000 円 / 学割 5,500 円(税込・参考)
  • 主教材: 『Python によるあたらしいデータ分析の教科書』第 2 版(翔泳社)

他の Python 系資格との位置付け

  • Python 3 エンジニア認定 基礎試験: 文法のみ(本試験の前段)
  • Python 3 エンジニア認定 データ分析試験(本試験): 分析ライブラリ + 統計 / ML 基礎
  • Python 3 エンジニア認定 実践試験: 実務寄りの応用
  • 統計検定 DS 基礎 / DS 発展 / DS エキスパート: 統計理論寄り(同社サイト[/certs/ds-expert](/certs/ds-expert)参照)
§1.2

出題比重と推奨学習プラン

出題比重(目安)

  1. Python と環境(約 10%): 基本文法 / 環境構築 / 仮想環境 / Jupyter
  2. 数学の基礎(約 15%): 行列・微分・確率の入門
  3. ライブラリの基礎(約 30%): NumPy + pandas + Matplotlib
  4. 機械学習の基礎(約 35%): scikit-learn + 回帰 / 分類 / クラスタリング / 評価
  5. 応用 / 環境(約 10%): scikit-image・自然言語処理など軽い応用

60 〜 80 時間プラン

  1. Week 1: Python 文法の復習 + 環境構築 → 第 2 章
  2. Week 2 〜 3: NumPy / pandas / Matplotlib の手を動かす演習 → 第 3 〜 5 章
  3. Week 4: scikit-learn の基本(fit / predict)→ 第 6 章
  4. Week 5: 機械学習の主要モデル + 評価 → 第 7 〜 8 章
  5. Week 6: 応用 + 演習 + 過去問 → 第 9 〜 10 章
「読む」より「動かす」が圧倒的に効く

選択式とはいえ、コードの 戻り値の shape(NumPy)・インデックスの違い(pandas)・fit/transform の使い分け(sklearn)など、実際に動かさないと選択肢の細かな違いが見えません。Jupyter で 1 日 30 分でも触ると合格率が大きく変わります。

Chapter 2

2 章 · Python 文法と環境の復習


§2.1

型・データ構造・制御フロー

  • 基本型: int, float, str, bool, None
  • コレクション: list, tuple, dict, set
  • list と tuple: list は可変、tuple は不変。tuple は dict のキーになれる
  • 内包表記: `[x*2 for x in xs if x > 0]` ─ 高速 + Pythonic
  • 条件式: `a if cond else b`(三項演算子)
  • 例外処理: try / except / finally / raise
リスト内包表記とジェネレータ
# リスト内包表記(全要素をメモリに展開)
squares = [x**2 for x in range(1_000_000) if x % 2 == 0]

# ジェネレータ式(遅延評価、メモリ効率良)
squares_gen = (x**2 for x in range(1_000_000) if x % 2 == 0)

# sum はジェネレータも受け付ける
total = sum(x**2 for x in range(1_000_000) if x % 2 == 0)
print(total)
§2.2

関数・スコープ・ラムダ

  • デフォルト引数: `def f(x, y=10):` 可変オブジェクトをデフォルトにすると共有される罠
  • 可変長引数: `*args`(タプル) / `**kwargs`(辞書)
  • ラムダ式: `lambda x: x * 2`。`map / filter / sorted` の key で頻出
  • スコープ: LEGB(Local → Enclosing → Global → Built-in)
  • デコレータ: `@functools.lru_cache` などをよく使う
可変デフォルト引数の罠

`def append(x, lst=[]):` のように list をデフォルト引数にする と、関数オブジェクト生成時に 1 度だけ list が作られ、呼び出し間で共有されます。これは試験でも実務でも頻出のバグの種。デフォルトは None にして関数内で作る のが定石です。

§2.3

環境 ・ パッケージ管理

  • venv: 標準仮想環境(`python -m venv .venv`)
  • pip: パッケージインストーラ(`pip install pandas`)
  • conda: Anaconda の環境管理。バイナリ依存のあるパッケージで強い
  • Jupyter Notebook / JupyterLab: 対話的分析の標準
  • requirements.txt / pyproject.toml: 依存固定

代表的なマジックコマンド

  • `%timeit`: コードの計測
  • `%matplotlib inline`: ノートブック内に図を埋め込む
  • `!pip install ...`: シェルコマンド実行
  • `?obj` / `??obj`: ドキュメント / ソースコード参照
Chapter 3

3 章 · NumPy ─ 数値計算の基礎


§3.1

ndarray の作成と属性

ndarray の基本操作
初回のみ Pyodide(~10MB)を CDN から読み込みます
§3.2

インデキシング ・ スライシング ・ ブロードキャスト

高度なインデキシング
初回のみ Pyodide(~10MB)を CDN から読み込みます
ブロードキャストの規則

(1) 形状を 末尾から比較、(2) 各次元のサイズが 同じ or 1 or 一方が存在しない なら適合、(3) サイズ 1 の次元は他方の長さに 複製 されたかのように振る舞う。これにより明示的なループなしで高速にベクトル演算が書けます。

§3.3

主要関数と統計量

  • 集約: `sum, mean, std, var, min, max`(`axis=` で軸指定)
  • 線形代数: `np.dot, np.linalg.inv, np.linalg.solve, np.linalg.eig, np.linalg.svd`
  • 乱数: `np.random.default_rng()` ─ 新しい標準
  • ユニバーサル関数(ufunc): `np.exp, np.log, np.sin` ─ 要素ごとに高速
  • ソート / 検索: `np.sort, np.argsort, np.where`
axis 指定の例
初回のみ Pyodide(~10MB)を CDN から読み込みます
Chapter 4

4 章 · pandas ─ 表形式データの操作


§4.1

Series と DataFrame

pandas の中心は Series(1 次元)DataFrame(2 次元)。NumPy の ndarray にラベル(インデックス)を付けたもの、というのが第一近似のメンタルモデルです。

DataFrame 基礎
初回のみ Pyodide(~10MB)を CDN から読み込みます
§4.2

選択 ・ フィルタ ・ 集計

  • 列選択: `df['col']`(Series) / `df[['c1','c2']]`(DataFrame)
  • 行選択: `df.loc[label, col]`(ラベル) / `df.iloc[idx, col]`(整数位置)
  • ブール索引: `df[df['age'] > 30]`
  • 条件 + 列: `df.loc[df['city']=='Tokyo', 'name']`
  • ソート: `df.sort_values('age', ascending=False)`
groupby + agg
初回のみ Pyodide(~10MB)を CDN から読み込みます
§4.3

結合 ・ 欠測処理 ・ ピボット

  • merge: SQL の JOIN 相当(`how='inner' / 'left' / 'right' / 'outer'`)
  • concat: 縦 / 横方向の結合
  • join: index を使った merge
  • isna / fillna / dropna: 欠測検出 / 埋め / 削除
  • pivot_table: クロス集計
  • melt: 横長 → 縦長(tidy data 形式へ)
tidy data の原則

1 行 = 1 観測、1 列 = 1 変数、1 セル = 1 値。多くの分析ライブラリ(seaborn / scikit-learn 等)はこの形式を前提にしているため、`melt` で縦長に変換することがしばしば最初の作業になります。

Chapter 5

5 章 · Matplotlib ─ 可視化の基礎


§5.1

Figure と Axes

Matplotlib の図は Figure(キャンバス) の上に Axes(グラフ枠) が 1 つ以上配置されています。Object 指向 API(`fig, ax = plt.subplots()`)を使うほうが拡張性 / 明確さの面で推奨されます。

subplots を使った標準パターン
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)

fig, ax = plt.subplots(figsize=(6, 4))
ax.plot(x, np.sin(x), label='sin')
ax.plot(x, np.cos(x), label='cos')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_title('sin / cos')
ax.legend()
ax.grid(True)
plt.show()
§5.2

主要グラフ種別

  • plot: 折れ線(時系列・関数)
  • scatter: 散布図(2 変数関係)
  • bar / barh: 棒グラフ(カテゴリ)
  • hist: ヒストグラム(分布)
  • boxplot: 箱ひげ図
  • imshow: 行列を画像として可視化

subplot で複数グラフ

1 行 2 列の subplot
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 100)
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
axes[0].plot(x, x**2)
axes[0].set_title('x^2')
axes[1].plot(x, np.exp(x))
axes[1].set_title('exp(x)')
fig.tight_layout()
plt.show()
Chapter 6

6 章 · scikit-learn の基礎


§6.1

Estimator API ─ fit / predict / transform

scikit-learn のすべてのモデルは 共通インターフェース を持ちます: `fit(X, y)` で学習、`predict(X)` で予測、`transform(X)` で前処理結果を取得。これにより モデルを差し替えてもコードがほぼ同じ で済む設計です。

代表パターン
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, random_state=0)

# 前処理(訓練でfit、両方にtransform)
scaler = StandardScaler()
X_tr_s = scaler.fit_transform(X_tr)
X_te_s = scaler.transform(X_te)

# モデル
clf = LogisticRegression(max_iter=1000)
clf.fit(X_tr_s, y_tr)
print(clf.score(X_te_s, y_te))
§6.2

Pipeline と GridSearchCV

Pipeline は前処理とモデルを 1 つのオブジェクトにまとめる仕組み。`Pipeline + GridSearchCV` の組み合わせは scikit-learn のハイパーパラメータ探索の標準パターンで、データリークを構造的に防ぎつつ最適化 できます。

Pipeline + GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)

pipe = Pipeline([
    ('scaler', StandardScaler()),
    ('clf', LogisticRegression(max_iter=1000)),
])

param_grid = {'clf__C': [0.1, 1, 10]}
grid = GridSearchCV(pipe, param_grid, cv=5)
grid.fit(X, y)
print(grid.best_params_, grid.best_score_)
Pipeline は『前処理 + モデル』を 1 つのモデル扱いにする

Pipeline で包むと、CV のフォールドごとに 訓練側だけで前処理を fit してくれます。これがないと『全データでスケーリング → CV』というデータリークを起こしがちです。`pipe.fit(X, y)` のように モデル単体と同じインターフェース で使える設計が秀逸です。

Chapter 7

7 章 · 教師あり学習 ─ 回帰と分類


§7.1

回帰の主要モデル

  • LinearRegression: 通常最小二乗
  • Ridge / Lasso / ElasticNet: 正則化付き線形
  • DecisionTreeRegressor: 決定木回帰
  • RandomForestRegressor: 決定木のバギング
  • GradientBoostingRegressor / XGBoost / LightGBM: 勾配ブースティング
  • SVR: サポートベクター回帰(カーネル)
  • KNeighborsRegressor: k-NN 回帰
§7.2

分類の主要モデル

  • LogisticRegression: 線形分類器
  • KNeighborsClassifier: k-NN
  • DecisionTreeClassifier: 決定木
  • RandomForestClassifier: ランダムフォレスト
  • SVC: サポートベクターマシン
  • GaussianNB / MultinomialNB: ナイーブベイズ
  • MLPClassifier: 多層パーセプトロン
マージン● Class +1■ Class -1決定境界 (w·x + b = 0)
図: SVM のマージン最大化
Chapter 8

8 章 · 教師なし学習とモデル評価


§8.1

クラスタリング

  • KMeans: 凸クラスタ前提、k を事前に指定
  • AgglomerativeClustering: 階層的クラスタリング
  • DBSCAN: 密度ベース。任意形状 + 外れ値検出
  • GaussianMixture: 混合ガウス分布
k=3 クラスタ✕ = 重心(centroid)
図: k-means の収束。3 クラスタの中心更新
§8.2

次元削減 ・ 多様体学習

  • PCA: 主成分分析(分散最大化)
  • TruncatedSVD: スパース行列向け SVD
  • TSNE: 非線形次元削減(可視化)
  • UMAP: TSNE 後継。大規模で高速
§8.3

評価指標

分類

  • accuracy_score
  • precision_score / recall_score / f1_score
  • roc_auc_score / roc_curve
  • confusion_matrix
  • classification_report(まとめて出力)

回帰

  • mean_squared_error / mean_absolute_error
  • r2_score
cross_val_score でモデル評価
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)
clf = RandomForestClassifier(random_state=0)
scores = cross_val_score(clf, X, y, cv=5, scoring='f1_macro')
print(scores)
print('mean:', scores.mean())
Chapter 9

9 章 · 数学の基礎(行列・微分・確率)


§9.1

ベクトルと行列

  • ベクトル: 1 次元配列。長さ(ノルム)・内積
  • 行列: 2 次元配列。積・転置・逆行列
  • ノルム: ノルム = ノルム =
  • 内積:
  • 固有値 / 固有ベクトル:
-202-101xyvAvwAw = 3wA = [[2,1],[1,2]] / 固有値 λ = 1, 3固有ベクトル: 方向不変・長さ λ 倍
図: 固有ベクトルは線形変換で方向が変わらない方向
§9.2

微分と勾配降下法

  • 微分: 関数の傾き
  • 偏微分: 多変数で 1 つの変数だけ動かしたときの傾き
  • 勾配: 偏微分のベクトル
  • 勾配降下法:
  • 連鎖律(Chain Rule):
開始SGD(振動)MomentumAdam
図: 勾配降下法: 学習率と経路
§9.3

確率と分布の最低限

  • 期待値 / 分散: /
  • 正規分布:
  • 条件付き確率 / ベイズの定理
  • 独立性:
-3-2-10123z±1σ ≒ 68%±2σ ≒ 95%
図: 正規分布の標準形
Chapter 10

10 章 · 応用と試験対策の総まとめ


§10.1

scikit-image による画像処理の入口

  • 読込 / 保存: `io.imread, io.imsave`
  • カラースペース: `color.rgb2gray, color.rgb2hsv`
  • フィルタ: `filters.gaussian, filters.sobel`(エッジ)
  • 閾値処理: `filters.threshold_otsu`
  • 特徴抽出: `feature.canny`(エッジ検出)
§10.2

自然言語処理の入口

  • 前処理: トークン化、ストップワード除去、ステミング / 見出し語化
  • Bag of Words / TF-IDF: 古典的な特徴量化
  • `CountVectorizer / TfidfVectorizer`: scikit-learn の標準
  • Word Embedding: word2vec / GloVe / fastText
  • 最近の主流: BERT / GPT などの Transformer 系(本試験の範囲外だが概念は把握を)
§10.3

試験対策の最終チェックと当日のコツ

範囲別チェックリスト

  1. 第 2 章: 内包表記 / lambda / 可変デフォルト引数の罠
  2. 第 3 章: ndarray の shape / axis / ブロードキャストの 3 規則
  3. 第 4 章: loc vs iloc / merge の how / groupby + agg
  4. 第 5 章: subplots と Axes ベース API
  5. 第 6 章: fit / predict / transform の使い分け、Pipeline + GridSearchCV
  6. 第 7-8 章: 主要モデルの種類と評価指標(分類 / 回帰)
  7. 第 9 章: 内積・偏微分・勾配・正規分布
  8. 第 10 章: scikit-image / NLP の最低限

試験当日のコツ

  • 40 問 / 60 分 = 1 問 1.5 分。コード片の読解は速さが命
  • 選択肢のシグネチャを見比べる: `fit_transform vs transform`、`loc vs iloc` などは混同しやすい
  • 極端な選択肢に警戒: 『常に』『必ず』は誤答が多い
  • 前日に Jupyter で 30 分復習: 主要 API のシグネチャを実機で確認
合格後のステップアップ

本資格 → 統計検定 DS 発展 / DS エキスパート(統計理論寄り)、G 検定(AI 全般)、E 資格(深層学習実装)へ進むのが王道。本サイトの[/textbook](/textbook)から各検定の教科書にアクセスできます。