Python3エンジニア認定データ分析試験 自作問題集

概要

2020年11月に受験したPython3エンジニア認定データ分析試験で、勉強方法の1つとして作っていた自作問題集です。これから受験される方の一助になれば嬉しいです。

体験記はこちらの記事でまとめています↓

Python3エンジニア認定データ分析試験 合格体験記
はじめに2020年10月の転職に伴ってデータ分析に入門したのもあり、体系的に学びたいと思い、Python3エンジニア認定データ分析試験に取り組みました。比較的新しい試験で、Web上にあった情報と少し違うこともあったので、体験を共有させて...

注意点

  • この問題集は、隙間時間で手軽に解けるよう、一問一答や穴埋めといった出題形式で作っています。
  • 実際の試験は四者択一形式のため(2020/11/15時点)、ご注意下さい。
    • 実際の試験よりやや難易度が高くなっています。
  • 個人用としてざっくりと作成したものなので、問題文として至らないところもあるかもしれません。ご容赦下さい。
  • 以前ご指摘頂いた通り、メソッドと関数について表現が混同してしまっております。これを問うような問題は、模試含め出題されなかったと記憶しております。適宜読み替えて頂けると助かります。

問題集

1. データ分析エンジニアの役割

機械学習は大きく分けて3つ。( ) 学習と、( ) 学習、 ( ) 学習の3である。

答え

– 教師あり学習
– 教師なし学習
– 強化学習


正解ラベルとも呼ばれる、 ( ) 変数は、 ( ) 学習にのみ使用される。

答え

– 目的変数
– 教師あり学習


この正解ラベルが連続値である場合に使われる手法は ( )、その他の値である場合に使われる手法は ( )。

答え

連続値 : 回帰
その他の値 : 分類


教師なし学習の手法で、主な2つは何か。

答え

– クラスタリング
– 次元削減


2. Pythonと環境

venvは、Pythonのバージョンを使い分けることができるツールである。 (Yes / No)

答え

No
venvはPythonの下に組み込むので、Python自体のバージョン管理はできない。


Pythonでファイル名をワイルドカードで指定することができる関数。

答え

glob関数


3. 数学の基礎

sinとcos、tanの日本語読み。

答え

sin : 正弦
con : 余弦
tan : 正接


ネイピア数はいくつか。

答え

2.7182…


1の対数は。

答え

0


1の階乗は。

答え

1


6面体のサイコロを1回振った場合、その出目の数自体は不明なものの、奇数が出ていることを教えられたとする。この場合の確率を ( ) 確率と呼び、これは ( ) の定理の基本となっている。

答え

– 条件付き確率
– ベイズの定理


4. ライブラリによる分析の実践

4.1. NumPy

4.1.1. NumPyの概要

NumPyには配列用の型である ( ) と、行列用の型である ( ) がある。

答え

配列用 : ndarray
行列用 : matrix
※ データ分析試験では、ndarrayが主役


↑の特徴として、型を ( 複数使える or 一種類にしなければならない ) ことが挙げられる。

答え

一種類にしなければならない。
ここが、DataFrameと違うところ。


4.1.2. NumPyでデータを扱う

配列でサイズを確認する関数

答え

shape関数


ravel関数は ( ) を返すのに対して、flatten関数は ( ) を返す。

答え

ravel関数 : 参照 (または浅いコピー) を返す
flatten関数 : (深い) コピーを返す


配列の型を確認する関数

答え

dtype関数


配列の型を変換する関数

答え

astype関数


整数の一様乱数を生成する関数

答え

np.random.randint関数
※ {{第1引数}}以上、{{第2引数}}未満の範囲で生成
※ 第3引数にタプルを渡すと、その行列サイズで生成してくれる


小数の一様乱数を生成する関数

答え

np.random.uniform関数
※ 引数はnp.random.randint関数と同じ


整数の標準正規分布からの乱数を作成する関数

答え

np.random.randn関数


標準正規分布とは、平均 ( ) 、分散 ( )の分布か。

答え

平均0、分散1の分布


正規分布乱数の生成で、平均や標準偏差を指定して生成する関数は何か。

答え

np.random.normal関数


指定した対角要素を持つ単位行列を作る関数

答え

np.eye関数
np.eye(3)とすると、↓こんなのができる
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])


要素全てが指定の値の配列を作る関数

答え

np.full関数
例 : np.full((2, 4), np.pi)


指定範囲で均等割りの配列をつくる関数

答え

np.linspace関数
例 : np.linspace(0, 1, 5) // → array([0., 0.25, 0.5, 0.75, 1.0])


配列の要素間の差分を見れる関数

答え

np.diff関数


a = [1, 2, 3]
b = [4, 5, 6]
np.concatnate([a, b])

とすると、以下のどれになるか。

  1. [1, 2, 3, 4, 5, 6]
  2. [[1, 2, 3],[4, 5, 6]]
  3. [1, 2, 3, [4, 5, 6]]
答え

1. [1, 2, 3, 4, 5, 6]


np.concatnate関数は、一次元配列同士の連結の場合は、( 行 or 列 )方向連結となる。

答え

列方向に連結される。 (hstack関数と同じ挙動)


np.concatnate関数は、二次元配列同士の連結の場合は、デフォルトで ( 行 or 列 ) 方向に連結される。

答え

行方向に連結される。 (vstack関数と同じ挙動)


この関数に引数axis=1を指定すると ()方向連結となる。

答え

列方向に連結される。 (hstack関数と同じ挙動)


二次元配列を列方向に分割する関数。

答え

np.hsplit関数
例) first, second = np.hsplit(hoge_array, [2]) # → 3列目で分割


二次元配列を行方向に分裂する関数

答え

np.vsplit関数
例) first, second = np.vsplit(hoge_array, [2]) # → 3行目で分割


二次元配列の転置とはどういう意味か。

答え

行と列を入れ替えること


aという二次元配列があった場合に、転置するにはどうするか。

答え

a.T


要素数を指定せずに、一次元配列の次元を増やす関数は何か。

答え

np.newaxis関数
※ 要素数を指定して良ければ、reshape関数を使う方法もある。


a = np.array([1, 5, 4])
# array([[1, 5, 4]])

先の関数を使って、上記のように次元を増やすにはどうすればよいか。

答え

a[np.newaxis, :]


a = np.array([1, 5, 4])
# array([[1],
         [5],
         [4]])

先の関数を使って、上記のように次元を増やすにはどうすればよいか。

答え

a[:, np.newaxis]


グリッドデータを生成する関数は何か。

答え

np.meshgrid関数


np.arange(1, 10, 3)

この結果はどうなるか。

答え

array([1, 4, 7])
1以上、10未満(つまり9まで)で、3等分される。


4.1.3. NumPyの各機能

sin()やlog()など、配列要素を一括で変換してくれる、NumPyの便利関数群のことを何というか。

答え

ユニバーサルファンクション


配列要素の絶対値を返す関数

答え

np.abs関数


a = np.array([0, 1, 2])
b = np.array([[-3, -2, -1],
              [0, 1, 2]])
a + b

上記の通り、二次元配列と一次元配列の和はどうなるか。

答え

array([[-3, -1, 1],
[0, 2, 4]])
aが2行になったような形で、bに加算される。


配列にスカラーを演算できることを何というか。

答え

ブロードキャスト


@演算子は何を意味するか。

答え

行列の乗算のための中置演算子


A_matrix @ B_matrix

を別の書き方に。

答え

np.dot(A_matrix, B_matrix)
または、A_matrix.dot(B_matrix)


真偽の配列で、Trueの数を求められる関数。

答え

np.count_nonzero関数
または、np.sum関数

– np.count_nonzeroメソット
– 0でない要素数を出力する関数。
– PythonではFalseを0として扱うので、Trueの数を数えてくれる。
– np.sum関数
– 要素内を足し算する関数
– PythonではTrueを1として扱うので、結果的にTrueの数が求められる。


真偽の配列で、Trueが含まれているか求める関数。

答え

np.any関数


真偽の配列で、全ての要素がTrueであるか求める関数。

答え

np.all関数


4.2. pandas

4.2.1. pandasの概要

df.head()とdf.tail()で、でDataFrameの先頭および末尾を、それぞれ ( ) 行のみ出力する。

答え

5行


dfのサイズを知る関数

答え

df.shape


dfから、AカラムとBカラムの2つの情報を取得する方法

答え
df[“A“, “B“]
または、
df.loc[:, [“A“, “B“]]など

4.2.2. データの読み込み・書き込み
4.2.3. データの整形

歩数と摂取カロリーのDataFrameであるdfがあったとして、歩数が10000歩以上のレコードだけを抽出する方法

答え

df[df[“歩数“] >= 10000]

または
df[df.loc[:, “歩数“] >= 10000]
df.query('歩数 >= 10000')など


歩数と摂取カロリーのDataFrameであるdfがあったとして、歩数の降順にソートする方法

答え

df.sort_values(by=”歩数”, ascending=False)


High, Mid, Lowの3つの値が入った運動指数カラムを、接頭語に「運動」と加えてつつ、One-hotエンコーディングする。

答え

df.get_dummies(df.loc[:, “運動指数“], prefix=”運動”)


4.2.4. 時系列データ

2020-01-01〜2020-10-01の日付の配列を作成する方法。

答え

pd.date_range(start=”2020-01-01”, end=”2020-10-01”)


2020-01-01から100日間の日付の配列を作成する。

答え

pd.date_range(start=”2020-01-01”, period=100)


2020-01-01〜2020-10-01の日付のうち、土曜日だけの配列を作成する。

答え

pd.date_range(start=”2020-01-01”, end=”2020-10-01”, freq=”W-SAT”)


時系列データdfに対して、月ごとのデータにグルーピングして、値を平均値にする。

答え

df.groupby(pd.Grouper(freq='M')).mean()

または、
df.resample('M'),mean()など


4.2.5. 欠損値処理

fillna関数でNanを前の値で埋めたいときに使う引数。

答え

df.fillna(method='ffill')

DataFrameだと、一行上の値で埋める。
bfillだと、逆に一行下の値で埋める。


fillna関数の引数に中央値を与えたい場合どうするか。

答え

df.fillna(df.median())
method='median'ではないので注意


4.2.6. データ連結

df_1とdf_2を列方向にデータ連結して、df_mergeを作成する。

答え

df_merge = pd.concat([df_1, df_2], axis=1)


4.2.7. 統計データの扱い

最頻値を確認する関数

答え

mode関数


中央値を出す関数

答え

median関数


標準偏差 (標本標準偏差) を出す関数

答え

std関数


標準偏差 (母集団) を出す関数と引数

答え

std関数に、ddof=0引数を渡す


4.3. Matplotlib

円グラフはどこから配置されるか。

答え

3時方向から配置される


円グラフは ( 時計 or 反時計 ) 周りに配置される。

答え

反時計回り


円グラフで、時計回りに実装するには ( ) メソッドに ( ) 引数を渡す。

答え

pieメソッドで、counterclock=Falseを渡す。
なんか、世のWebサイトには逆に書いてる。なんで。笑
デフォルトはcounterclock=True


円グラフで、グラフの描画を始める場所を指定するには、 ( ) メソッドに ( ) 引数を渡す。

答え

startangle={{出力を開始したい角度}}
デフォルト値はNoneで、3時の位置から描画される。
90度指定で12時からになる。


4.4. scikit-learn

4.4.1. 前処理
欠損値

欠損値があった場合、データを補完する場合に使うクラスは何か。

答え

Imputerクラス


上記のクラスでstrategy引数に渡す値について。

mean = ①、median = ②、most_frequent = ③

答え

1. 平均
2. 中央値
3. 最頻値


カテゴリ変数のエンコーディング

カテゴリ変数のエンコーディングを行うクラスは何か。

答え

LabelEncoderクラス


エンコーディング後、元の値を確認する属性は何か。

答え

.classes_属性


カテゴリ変数のエンコーディングとともに、メジャーな処理方法と言えば何エンコーディングか。

答え

One-hotエンコーディング
血液型4種類だったら、4カラム追加してフラグにする感じのやつ。


このエンコーディングの別の呼び方は。

答え

ダミー変数化


行列のうち、多くの成分が0である行列と、多くの成分が0でない行列をそれぞれ何というか。

答え

疎行列と密行列


特徴量の正規化

分散正規化とは、特徴量の平均が ( ) 、標準偏差が ( ) になるように、特徴量を変換する処理。

答え

特徴量の平均が0標準偏差が1


分散正規化を行うクラスは何か。

答え

StanderdScalerクラス


最小最大正規化とは、特徴量の最小値が ( ) 、最大値が ( ) になるように、特徴量を変換する処理。

答え

特徴量の最小値が0最大値が1


最小最大正規化を行うクラスは何か。

答え

MinMaxScalerクラス


4.4.2. 分類

分類は教師 ( ) 学習の典型的なタスク。

答え

教師あり学習
分類は、既知のデータを教師として利用し、各データをクラスに振り分けるモデルを学習する。


上記は、正解となるラベルを用いるが、そのラベルを ( ) 変数という。

答え

目的変数


分類の代表的なアルゴリズム3つ

答え

– サポートベクタマシン
– 決定木 (けっていぎ)
– ランダムフォレスト


分類モデル構築の流れ

分類モデルの構築には、手元のデータを ( ) する。

答え

学習データセットとテストデータセットに分割する。


分類のおける「学習」とは、( ) データセットを用いて分類モデルを構築することを指す。

答え

学習データセット


構築したモデルのテストデータセットに対する予測から算出した、未知のデータに対する対応能力を何と言うか。

答え

汎化能力


各データセットを分ける関数はなにか。

答え

model_selection.train_test_split関数


scikit-learnでは、学習を ( ) 関数、予測を ( ) 関数を使用する。

答え

学習 : fit関数
予測 : predict関数


サポートベクタマシン

サポートベクタマシンは、分類や回帰だけでなく、( )にも使えるアルゴリズム。

答え

外れ値検出


2つのクラスに属する2次元データを考えたとき、各クラスのデータのうち境界に最も近いデータを何というか。

答え

サポートベクタ


2つのクラスに属する2次元データを考えたとき、サポートベクタ間の距離が最も ( ) くなるように ( ) の直線を引く。

答え

– 大きく (遠く)
– 決定境界


この直線と、サポートベクタの距離を ( ) と呼ぶ。

答え

マージン


ランダムフォレスト

ランダムフォレストで使う、ランダムに選択されたサンプルと特徴量 (説明変数) のデータを何というか。

答え

ブートストラップデータ


ランダムフォレストは決定木の集合であり、このように複数の学習機を用いた学習を何というか。

答え

アンサンブル学習


4.4.3. 回帰

回帰とは、 ( ) 変数を、特徴量で代表される ( ) 変数で説明するタスク。

答え

– 目的変数
– 説明変数


線形回帰は、説明変数が1変数のときを ( ) 、2変数以上のときを ( ) と呼ぶ。

答え

– 単回帰
– 重回帰


4.4.4. 次元削減

データが持っている情報をなるべく損ねずに、データを ( ) するタスク。

答え

圧縮


主成分分析

scikit-learnでは、主成分分析はどのモジュールのどのクラスを使うか。

答え

decompositon.PCAクラス


4.4.5. モデルの評価
カテゴリの分類精度

データのカテゴリをどの程度当てられたかを定量化する指標4つ。

( ) 率、 ( ) 率、 ( ) 率、 ( ) 値

答え

– 適合率
– 再現率
– F値
– 正解率


また、これらの指標は ( ) 行列から計算する。

答え

混同行列


( ) 率と ( ) 率は、トレードオフ関係にある。

答え

– 適合率
– 再現率


予測確率の正確さ

データに対する予測確率の正確さを定量化する指標として、 ( ) 曲線とそこから算出する ( )が用いられる。

答え

– ROC曲線
– AUC


4.4.6. ハイパーパラメータの最適化

ハイパーパラメータは、学習のときに値が ( 決定される or 決定されない )。

答え

決定されない。
学習とは別に、ユーザが値を指定する必要がある。


ハイパーパラメータを最適化する代表的な方法2つ。

答え

– グリッドサーチ
– ランダムサーチ


さいごに

拙い問題ですが、誰かの役に立てば嬉しいです。
誤り等があらば、是非コメントでツッコミ頂けると嬉しいです。
最後までありがとうございました。

PON

PON

30代で、完全未経験から独学でWeb系エンジニアになった人。 前職では、超絶ブラック企業にはまり込んでしまい、年間1200時間の残業をしていたが、娘が生まれたことで我に返って転職を決意。 現在は、大阪にあるベンチャー企業の自社開発プロジェクトで、リードエンジニアとして奮闘中。 主戦場はバックエンドで、Pythonでのデータ分析が武器。 とは言いつつ、SPAのフロントエンドを実装したり、インフラ設計したり、スクラム開発でプロジェクト運営したりするなんでも屋。 いつも、ググってきては誰かが書いてくれた記事を見て開発していたが、もらってばかりでなく世の中に返すこともしたいと思い、技術ブログをはじめる。 妻と1歳になる娘の3人暮らし。 最近は一日一食。 何かご用件がある方は、TwitterのDMからどうぞ。