Python3エンジニア認定データ分析試験は、すべて選択式の40問です。コードを自分で書く試験ではないため、問われるのは「書けるか」ではなく「似た機能の違いが分かっているか」です。選択肢には、正解とほとんど同じ形をしていて引数や戻り値だけが違うものが並びます。
そして出題の中心はライブラリの実践で、NumPy・pandas・Matplotlib・scikit-learnだけで40問中27問を占めます。紛らわしいAPIを読み分けられるようになるだけで、合格ラインの正答率70%に近づきます。この記事では、その対比だけに絞って整理します。
NumPy:形が変わるのか、参照が返るのか
取り違えやすいのは、要素数が変わるかどうかと、返るものが元の配列と地続きかどうかの2点です。
- reshapeは要素数を変えずに形だけを変えるため、変換前後で要素数が一致しないとエラーになる。条件が整えばコピーではなくビューを返す
- resizeは要素数そのものを変えられる。np.resizeは足りない分を元の要素の繰り返しで埋め、ndarray.resizeは元の配列を書き換えて不足分を0で埋める
- スライスで取り出した部分配列はビュー。書き換えると元の配列にも反映されるので、独立させたいならcopyを使う
- 同じ抽出でも、ブールインデックスや位置を配列で指定するファンシーインデックスはコピーを返す
- np.arrayは既定でコピーを作る。np.asarrayは対象がすでに同じ型の配列ならコピーせずそのまま返す
- axis=0は行をたどった結果、つまり列ごとの集約。axis=1は行ごとの集約。sumやmeanの選択肢はここで割れる
- ブロードキャストは末尾の次元から順に比較し、大きさが同じか片方が1のときだけ成立する
pandas:ラベルで引くのか、位置で引くのか
節単位ではscikit-learnの8問に次ぐ7問。抽出と結合という2つの場面に、名前の似たAPIが集中しています。
- locは行や列のラベルを指定し、ilocは0から数えた位置を整数で指定する
- スライスの終端の扱いが逆になる。locは終端のラベルを含み、ilocは終端の位置を含まない
- concatはmergeのようなキー結合はしないが、連結しない側の軸はラベルで整列される(既定のjoin="outer"では一致しない列が和集合になりNaNが入る)。既定は縦方向
- mergeは列の値をキーにして横方向に結合する。joinは既定でインデックスを基準に、呼び出し側を残す形で結合する
- mergeのhowは既定がinner。outer・left・rightに変えると、残る行数そのものが変わる
- dropnaは欠損を含む行を落とし、fillnaは欠損を値で埋める。どちらも既定では元を変えず新しいオブジェクトを返す
- applyは行または列という「まとまり」に関数を適用する。Series.mapは要素ごとの置き換えで、辞書を渡す使い方もできる
- DataFrameの要素ごとの適用はapplymapだが、pandas 2.1以降は非推奨でDataFrame.mapが後継。教材のバージョンで表記が異なる
- groupbyは中間的なオブジェクトを返すだけで、meanやsumなどの集約を呼んで初めて結果が出る
Matplotlib:pltの関数か、Axesのメソッドか
書き方が2通りあり、同じことをする命令の名前がわずかに違います。選択肢では2つが混ぜて出されます。
- pltから呼ぶ関数インターフェースは現在の描画対象に働く。plt.plot、plt.title、plt.xlabelのように名詞がそのまま関数名になる
- オブジェクト指向インターフェースはAxesのメソッドを使う。ax.plotは同じだが、ax.set_title、ax.set_xlabelとset_が付くのが目印
- fig, ax = plt.subplots()はFigureとAxesの2つをまとめて返す。行数・列数を指定するとaxは配列になる
- 凡例は、描画時にlabelを指定した要素に対してlegendを呼んだときに表示される
- 画面に出すのはshow、画像ファイルにするのはsavefig。showのあとだと環境によっては白紙になるため、savefigを先に呼ぶ
scikit-learn:fitは何を覚えているのか
前処理から評価まで同じ形のAPIを持つため、どの段階で何を呼ぶかを取り違えた選択肢が作られます。
- fitは学習の段階。平均や標準偏差、モデルのパラメータを推定して推定器自身の中に保持する。返るのは変換結果ではなく推定器そのもの
- transformはfitで覚えた基準に従ってデータを変換する段階。fit_transformはこの2つを続けて行う
- predictは学習済みモデルで予測を返す。分類では予測ラベルが返り、確率が要るならpredict_probaを使う
- StandardScalerは訓練データにだけfitし、テストデータにはtransformだけを行う。テストにもfitすると評価が甘く出るデータリークになる
- train_test_splitはtest_sizeで割合、random_stateで再現性を指定し、stratifyにラベルを渡すとクラス比率を保つ。戻り値は4つで、特徴量の2つ、目的変数の2つの順
- cross_val_scoreは交差検証の各回のスコアを配列として返すだけで、モデルは手元に残らない
- GridSearchCVは候補を総当たりで試し、fitしたあとにbest_params_やbest_estimator_から最良の設定を取り出せる
選択肢で迷ったときの見分け方
完全に思い出せないときも、選択肢の書き方から絞り込めます。次の4点を順に確認すると消去法が効きます。
- 引数名を見る。axisなら方向の話、howなら結合の種類、test_sizeやrandom_stateなら分割の話と、話題を特定できる
- 戻り値の型を見る。fitは推定器自身、transformは変換後のデータ、subplotsは2つの値の組。代入の形が合わない選択肢はその時点で外れる
- 元のデータを変えるかどうかを見る。pandasの多くのメソッドは新しいオブジェクトを返す側
- テストデータにfitやfit_transformを使っている選択肢は、前処理の文脈では原則として誤り
網羅的に覚えるより、ここで挙げたような対になる組み合わせを軸に整理しておくほうが、選択式の40問には効きます。