Python3エンジニア認定データ分析試験 模試 解説あり

問1

データエンジニアに求められる能力として必須ではないものを選べ

正解

論文の読解能力

あなたの答え

SQLなどのデータベース言語を扱う能力

前処理や特徴量エンジニアリングのための扱っているデータの専門知識

データ分析の要件を理解すること

解説

データエンジニアは情報を分析するという業務を担います。分析に伴い幅広い知識を要します。それに伴い論文を読む場合もあると思いますが、必須スキルではありません。必須なのは技術の進歩が速い分野なので、論文などを読んで最新技術をキャッチアップする必要がデータサイエンティストです。

フィードバックを送信

問2

以下の関数f(x, y)のxに関する偏微分として正しいものを選べ

f(x,y)=x2y2

正解

2xy2

あなたの答え

2x2y

y2

4xy

解説

数学の問題です。xについての偏微分という問題ですが、微分を行うと累乗の数値が乗算として前にだされ、累乗の数値は-1されます。yは微分対象ではありませんのでそのまま残ります。ちなみに微分対象の式に定数の加算や減算があった場合、偏微分の過程で消されますので他の問題の場合は留意しておきましょう。

フィードバックを送信

問3

matplotlibについて説明している以下の文章のうち、間違っているものを選べ

正解

plotメソッドではedgecolor引数を指定することで、グラフの枠線の色を指定することができる

color引数では、文字列の他に、HTMLやCSS3で定義された色名を指定することができる

散布図で指定することができるマーカーの種類は30種以上ある

plot()メソッドでは線の太さを変更することはできない

あなたの答え

解説

グラフの枠線の色を指定することができるのfigure()メソッドです。

1
plt.figure(edgecolor="red")

このように設定すると枠線の色を指定することができます。

フィードバックを送信

問4

以下のようなデータフレームdfがある。このデータフレームから、B列の値が3000以上のデータフレームを抽出するコードとして正しいものを選べ。

import pandas as pd

df = pd.DataFrame({"A":[10,200,3000,40000],
                   "B":[1000,2000,3000,4000]})

df[[“B”]>=3000]

df[“B”]>=3000

正解

df[df[“B”]>=3000]

あなたの答え

df[df[“B”]>=3000][“B”]

解説

データフレームからデータを抽出する問題です。大きな流れはデータフレームからデータを抽出して再度データフレームに入れるイメージです。後、演算子に注意しましょう。

フィードバックを送信

問5

以下のような日付、日経平均株価の始値、終値が格納されたpandasデータフレームdfがある。このデータフレームにその日の株価の増減値(終値-始値)を算出したカラムを追加するコードとして間違っているものを選べ

Image from Gyazo

df.loc[:,”増減値”] = df.loc[:,”終値”] – df.loc[:,”始値”]

df.loc[:,”増減値”] = df.iloc[:,2] – df.iloc[:,1]

df[“増減値”] = df[“終値”] – df[“始値”]

正解

df.loc[:,”増減値”] = df.loc[[“終値”]-[“始値”]]

あなたの答え

問6

以下の説明のうち、最頻値の説明として正しいものを選べ。

データの中でもっとも大きい値のこと。

データを小さい順に並べて、ちょうど真ん中にくる値である。データの個数が偶数と奇数の場合で算出方法が異なる

正解

もっとも多く出現するデータ・値であり、アンケートなどの最多回答者などがこれに相当する。

あなたの答え

データ全体がどの程度ばらついているかを示す値。

解説

最頻値の説明は漢字からも判断出来ますが、もっとも頻繁に出現するといった説明が正解です。

フィードバックを送信

問7

以下のコードの後に、np.dot(a, b)を実行した場合の出力と同じにならないものを選べ

import numpy as np

a = np.array([[0,1,10],[0,1,10]])
b = a.copy()
a = a.reshape(3,2)

a.dot(b)

a @ b

np.matmul(a,b)

正解

np.multiply(a,b)

あなたの答え

解説

NumPyの行列積メソッドの問題です。dot、@、matmulは全て行列積のメソッドですが、multiplyはスカラー倍のメソッドになります。

フィードバックを送信

問8

欠損値の対処方法として、間違っているものを選べ

正解

One-hotエンコーディングを行う

あなたの答え

その特徴量の統計的な代表値などで埋める

欠損値があるデータを用いない

欠損がある場合でも動作する機械学習アルゴリズムを選定する

解説

One-hotエンコーディングとは1つだけ1でそれ以外はゼロのベクトルに変換することです。ダミー変数とも呼ばれます。利用する場面はカテゴリー変数を0, 1 に変換して機械学習をしやすいデータに変換するためです。補足としてカテゴリー変数とは性別等のように順番などに意味を持たないデータのことです。

フィードバックを送信

問9

以下のグラフのxに関して微分した際の値として正しいものを選べ。グラフのCは任意定数を意味する
Image from Gyazo

発散

正解

0

あなたの答え

x

解説

Cは任意の定数をとるため微分をすると0になります。

フィードバックを送信

問10

以下のコードを実行した際に出力されるグラフとして正しいものを選べ

import pandas as pd
import matplotlib.pyplot as plt 

df = pd.DataFrame({"国名":["日本","アメリカ","イタリア","フランス", "ロシア", "ブラジル", "イギリス"], "人口/万人":[12700, 32800, 6000, 6700, 14500, 20900, 6600]})

plt.rcParams["font.family"] = "AppleGothic"
plt.barh(df["国名"], df["人口/万人"])
plt.xlabel("人口(万人)")
plt.show()


Image from Gyazo

Image from Gyazo

Image from Gyazo

Image from Gyazo

正解

あなたの答え

解説

コードからグラフをイメージ出来るかの問題です。まず barh メソッドは横の棒グラフです。h はhorizontal(水平)のhと考えて下さい。データの並びはソート等をしていないのでデータフレームを定義した通りに表示されているグラフが正解です。

フィードバックを送信

問11

matplotlibで散布図を表示させるためのメソッドとして正しいものを選べ。

正解

scatter()

あなたの答え

plot()

hist()

vilolinplot()

解説

散布図はscatterメソッドを使用することで描画できます。

フィードバックを送信

問12

データサイエンティストに求められる能力として必須ではないものを選べ

プログラミング能力

正解

案件を獲得するための営業能力

あなたの答え

アルゴリズム構築に必要な数理的能力

顧客へわかりやすく分析結果を伝えるためのレポーティング能力

解説

データサイエンティストは企業をサポートするために、アルゴリズムや統計等を活用して有益な知見を見出す業務を担います。案件を獲得するための営業力は不要です。

フィードバックを送信

問13

以下のような2つの集合がある
A = {1,2,3,4}, B = {3,4,5,6}
A∪Bとして正しいものを選べ

{3,4}

{1,2,3,4,3,4,5,6}

{ }(空集合)

正解

{1,2,3,4,5,6}

あなたの答え

解説

∪の記号は和集合と呼ばれるものです。両方とも含むものを返します。重複は含みません。

フィードバックを送信

問14

以下のコードを実行した場合の出力として正しいものを選べ。

import numpy as np

A = np.array([[1,2,3],[4,5,6]])
B = A[0,:]
A[0,:]=0
B

array([1, 2, 3])

正解

array([0, 0, 0])

あなたの答え

array([[1], [4]])

array([[0], [0]])

解説

浅いコピーと深いコピーの問題です。この問題では浅いコピーである通常の格納をしているのでAの変更はBにも影響します。

フィードバックを送信

問15

Pythonのコーディング規約の名称として正しいものを選べ

Coding8

正解

PEP8

あなたの答え

PIP8

Flake8

解説

Pythonには共通のコーディング規約があります。名前はPEP8(ペップエイト)です。

出典元 「pep8-ja」(2021年12月23日11時00分 UTC版) 『はじめに — pep8-ja 1.0 ドキュメント』

フィードバックを送信

問16

交差検証の欠点として、各検証における予測ラベルの割合が不均一になる問題がある。この問題を解決する場合に使用される交差検証の名称として正しいものを選べ

正解

層化k分割交差検証

あなたの答え

均一k分割交差検証

ブートストラップ法

Leave-One-Out法

解説

データセットを任意の個数に分割し、1個をテストデータセットとして使用し、残りを学習用データセットとして使用します。
この分割範囲をずらしながらモデルの構築と評価を繰り返し実行するのがk分割交差検証です。

各検証における予測ラベルの割合を一定にするために層化k分割交差検証が用いられます。

フィードバックを送信

問17

三角関数でないものを以下の選択肢から選べ

cosx

正解

sinhx

あなたの答え

tanx

sinx

解説

三角関数ではないのは解答のsinhxです。

フィードバックを送信

問18

以下のコードを実行した際に出力されるグラフとして正しいものを選べ

import matplotlib.pyplot as plt 
import math

x_list = [i for i in range(10)]
y_list = list(map(lambda x: x**2, x_list))
y_list2 = list(map(lambda x: x**3+x**2, x_list))
y_list3 = list(map(lambda x: (math.e)**x, x_list))

plt.plot(x_list, y_list, label="x**2")
plt.plot(x_list, y_list2, label="x**3+x**2")
plt.plot(x_list, y_list3, label="exp(x)")
plt.legend()
plt.show()

Image from Gyazo

Image from Gyazo

Image from Gyazo

Image from Gyazo

正解

あなたの答え

解説

コードからグラフをイメージ出来るかの問題です。注目したいのは label パラメータと legend メソッドを使っている所です。yの値を3つ用意しており、これらを全てplotメソッドのlabelパラメータを使っています。legend メソッドはこのlabelパラメータで定義したデータを表示させます。legendでラベルが3つ出ているグラフが正解です。

フィードバックを送信

問19

pip freeze コマンドの説明として正しいものを選べ

正解

インストールされているパッケージの一覧を出力する

あなたの答え

pipのバージョンを最新にする

実行中のpipコマンドを強制終了するコマンド

現在のpipのバージョンを出力するコマンド

解説

インストールされたパッケージを要件形式で出力します。結果をオプションでファイルに出力することも出来ます。

出典元 「pip」(2021年12月23日11時00分 UTC版) 『pip freeze — pip 9.1.0.dev0 ドキュメント』

フィードバックを送信

問20

データサイエンティストやデータエンジニアが使用するツールについて説明している以下の文章のうち、正しいものを選べ

scikit-learnやNumPy、pandasの役割について理解しておく必要はない

たとえデータが小さくても、自分のPCでデータ分析を実施してはならない

anacondaなどの環境構築を行うためのツールは、分析の再現性という観点から実務では使ってはならない

正解

Pythonを用いて前処理や集計をする必然性はなく、Excelを用いて実施してもよい

あなたの答え

解説

前処理は欠損値を消したりする処理のことです。集計は特定の値の和ということです。これらをする場合はPythonで実施する必要はありません。Excelに限らず実現出来るのであれば他の方法でも実施して良いです。

フィードバックを送信

問21

以下のコードを実行した場合の出力として、正しいものを選べ。

import numpy as np

A = np.array([0, 1, 2, 3, 4, 5])
B = np.array([6, 7, 8])
A2 = A.reshape(2, 3)
B2 = B[np.newaxis,:]
np.vstack([A2,B2])

array([[0, 1, 6], [2, 3, 7], [4, 5, 8]])

正解

array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])

あなたの答え

array([[0, 3, 6], [1, 4, 7], [2, 5, 8]])

array([[0, 2, 4], [1, 3, 5], [6, 7, 8]])

解説

vstackで列方向で結合しています。ただ、その前にAはreshapeで2行3列の2次元配列に変換されているので、Bもnewaxisを使って2次元の配列に変換している流れになります。

フィードバックを送信

問22

モデルが選択した行動に対してどの程度よかったかを評価するために「価値」という概念を導入した、自律的に最適な行動選択を学習する枠組みをなんと呼ぶか

正解

強化学習

あなたの答え

教師なし学習

半教師あり学習

GAN(Generative Adversarial Network)

解説

強化学習の学習方策は2種類あります。価値ベース(Value-Based Method)と方策ベース(Policy-Based Method)です。問題文には価値の概念の取り入れた学習方策を聞かれているので解答は強化学習になります。

フィードバックを送信

問23

以下のコードを実行した場合の出力として正しいものを選べ。

import numpy as np

A = np.array([[1,2,3],[4,5,6]])
B = A.flatten()
A[1,:]=0
B = B.reshape(6,1)
B[-1]

0

正解

array([6])

あなたの答え

array([0])

6

解説

浅いコピーと深いコピーの問題です。この問題では深いコピーである flattenメソッドを使用しているのでAの変更はBに影響しません。

フィードバックを送信

問24

線形回帰について説明している以下の文章のうち正しいものを選べ

特徴量が5個以上あるデータには用いることができない

過学習することがないので、検証データを用意する必要はない。

分類する予測モデルを構築する際に使用するアルゴリズムである

正解

L1正則化やL2正則化を用いることで過学習を抑えることができる

あなたの答え

解説

線形回帰を用いて機械学習をする場合、学習や推定においてデータの上限はありません。過学習は起きるので扱う場合は検証データを用意したほうが良いと言えます。分類以外の予測モデルも構築が出来ます。線形回帰は過学習を抑えるために正則化を用いれます。L1正則化(Lasso回帰)とL2正則化(Ridge回帰)には違いがあります。前者は重みの合計を足したもので、後者は重みの二乗の合計を足したものです。

フィードバックを送信

問25

以下のような、日付に対して番号が格納されているデータフレームdfがある。このデータフレームの月ごとの番号の平均を出力するコードとして正しいものを選べ

Image from Gyazo

df.groupby(pd.Grouper(freq=”W”)).mean()

正解

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

あなたの答え

df.groupby(pd.Grouper(freq=”Y”)).mean()

df.groupby(freq=”M”).mean()

解説

引数のfreqにはオフセットエイリアスと呼ばれる文字列をセットできます。(Mだと毎月の頻度Wだと毎週の頻度)
対象のdfはindexが日付になっているので月ごとにでグルーピングし平均を取得するmeanメソッドを使い月毎の平均データを出力できます。

フィードバックを送信

問26

添付写真のようなpandasデータフレームから、以下のデータが格納されたcsvファイル(example.csv)を出力するためのコードとして正しいものを選べ

name of country,area
日本,380000
アメリカ,9834000
中国,959700
イタリア,301300

Image from Gyazo

df.to_csv(“example.csv”)

df.output_csv(“example.csv”, index=False)

df.to_excel(“example.csv”, index=True)

正解

df.to_csv(“example.csv”, index=False)

あなたの答え

解説

データフレームをcsvに変換するメソッドは to_csv() を用います。index のパラメータを使うと行数を表示できます。今回の出力イメージには name of country の左側に行数の表示がありませんで、 index=False を用いています。

フィードバックを送信

問27

機械学習モデルの精度改善をする場合の措置として間違っているものを選べ

正解

評価指標を変更する

あなたの答え

学習データ量を増やす

ハイパーパラメーターのチューニング

特徴量の選定

解説

評価指標を変更してしまうといままでの評価も変わってしまうため精度改善する措置としては間違いです。

フィードバックを送信

問28

Matplotlibを用いて、1つの描画オブジェクト中に表示された2つのグラフに対して、タイトルを指定するコードとして正しいものを選べ


import matplotlib.pyplot as plt

fig, axes = plt.subplots(ncols=2)

axes[0].set_title("graph left")
axes[1].set_title("graph right")
fig.suptitle("fig title")
plt.show()
①

import matplotlib.pyplot as plt

fig, axes = plt.subplots(ncols=2)

axes[0].title("graph left")
axes[1].title("graph right")
fig.title("fig title")
plt.show()
②

import matplotlib.pyplot as plt

fig, axes = plt.subplots(ncols=2)

axes.title(["graph left", "graph right"] )
fig.title("fig title")
plt.show()
③

import matplotlib.pyplot as plt

fig, axes = plt.subplots(ncols=2)

axes.subtitle(["graph left", "graph right"])
fig.title("fig title")
plt.show()
④
正解

あなたの答え

解説

サブプロット領域(Aexs)に対してタイトルを付ける set_title メソッドを使用している選択肢が正解です。

フィードバックを送信

問29

以下のような日付ごとの利用回数と利用料金が格納されたpandasデータフレームdfがある。このデータフレームdfの中から利用回数が最大のレコードを抽出するコードとして正しいものを選べ
Image from Gyazo

df[df[“利用回数”].max()]

あなたの答え

df[df[“利用回数”]==df[“利用回数”].min()]

df[“利用回数”].max()

正解

df[df[“利用回数”]==df[“利用回数”].max()]

解説

以下のコードを実行すると

1
df["利用回数"] == df["利用回数"].max()
0     True
1    False
2    False

利用回数が最大のものと一致しているかどうかの真偽値のSeriesを返します。

その結果をもとのデータフレームを絞り込むために使うとTrueの箇所に対応したデータを取得できます。今回の場合は最大値に一致するデータです。

フィードバックを送信

問30

以下のコードは、欠損値をカラムごとの平均値で埋めるために書かれたコードである。以下のコードのXXXの部分に記述されるコードとして正しいものを選べ
※dfは欠損を含むデータが格納されているpandasデータフレームである, versionは0.20以上

from sklearn.impute import SimpleImputer

XXX
imp.fit(df)
imp.transform(df)
正解

imp = SimpleImputer(strategy=”mean”)

あなたの答え

imp = SimpleImputer(strategy=”median”)

imp = SimpleImputer(strategy=”mean”, axis=1)

imp = SimpleImputer(strategy=”median”, axis=0)

解説

strategyで欠損値を何で埋めるか設定できます。
古いバージョンではsklearn.preprocessing.Imputerが使われていましたが0.20以降はSimpleImputerに置き換わっています。

フィードバックを送信

問31

matplotlibのpieメソッドを用いて円グラフのある要素だけずらして表示する場合に指定する引数として正しいものを選べ

正解

explode

あなたの答え

startangle

radius

counterclock

解説

explode引数にどのくらいの比率で切り出すかを示したリストを渡すことでグラフの表示を変更できます。

1
ax.pie(rate, explode=[0.4, 0, 0, 0, 0, 0])

フィードバックを送信

問32

以下のコードの出力として正しいものを選べ

fig, ax = plt.subplots()

x = [10, 20, 30]
label=[1 ,2, 3]
ax.pie(x, autopct="%1.1f%%", labels=label)
plt.show()

Image from Gyazo

Image from Gyazo

Image from Gyazo

Image from Gyazo

正解

あなたの答え

解説

autopctで円グラフ内部に表示する値の桁数の設定をし, labelsで円グラフの各要素のエッジにlabelを付与します。

フィードバックを送信

問33

以下のコードを実行した際に描画されるグラフとして正しいものを選べ

import matplotlib.pyplot as plt 

x_list = [i for i in range(10)]
y_list = list(map(lambda x: x**2, x_list))
plt.bar(x_list, y_list)
plt.show()

Image from Gyazo

Image from Gyazo

Image from Gyazo

Image from Gyazo

正解

あなたの答え

解説

棒グラフの特徴の問題です。正解のグラフは一見ヒストグラムにも見えますが、ヒストグラムと棒グラフの違いは棒の間ある間隔です。間隔が無いのがヒストグラムになり、棒グラフは間隔のあるグラフが正解です。

フィードバックを送信

問34

以下のコードを実行した場合の出力として、正しいものを選べ。

import numpy as np

A = np.linspace(0, 2, 5)
B = np.diff(A)*2
B == np.ones(4)

True

array([ 1, 1, 1, 1])

正解

array([ True, True, True, True])

あなたの答え

FALSE

解説

NumPyのメソッドの問題です。linespace()メソッドは要素数を指定する等差数列を生成するメソッドです。Aは1行5列となり、0, 0.5, 1, 1.5, 2.0 となります。diffメソッドは要素間の差を計算します。Bにはこの差分を2倍した値がはいりますので、全て1が格納されます。np.onesで全てが1の配列と同値になります。

フィードバックを送信

問35

以下のpandasデータフレームdfのDateカラムはオブジェクト型である。このDateカラムをdatetime型に変換するコードとして正しいものを以下の中から選べ

Image from Gyazo

df[“Date”] = pd.datetime(df[“Date”])

あなたの答え
正解

df[“Date”] = pd.to_datetime(df[“Date”])

df[“Date”] = pd.to_date(df[“Date”])

df[“Date”] = df[“Date”].astype(datetime)

解説

pandas datetie型に変換するメソッドは to_datetime()メソッドです。

フィードバックを送信

問36

A = (1,2,3) B = (4,5,6)の2つの座標がある。座標AB間のユークリッド距離として正しいものを選べ

正解

27

あなたの答え

27

9

3

解説

フィードバックを送信

問37

決定木の不純度の指標として、間違っているものを以下の中から選べ

正解

情報利得

あなたの答え

ジニ不純度

エントロピー

分類誤差

解説

不純度とは分類されたクラスに余計なものが含まれる割合のことです。
その割合を求める指標として

  • ジニ不純度
  • エントロピー
  • 分類誤差
    などがあります。

フィードバックを送信

問38

matplitlibのpieメソッドを用いて円グラフを影をつけて表示させる場合の、pieメソッド内で指定する引数として正しいものを選べ

正解

shadow=True

あなたの答え

counterclock=True

explode=True

frame=True

解説

引数shadowにTrueをセットすることで影をつけれます。defaultではFalseが設定されています。

フィードバックを送信

問39

Matplotlibの記述について間違っているものを選べ

正解

1つの描画オブジェクトの中に、複数のグラフを表示させることはできない

あなたの答え

グラフの判例を描画するだけでなく、その表示位置やフォント、文字サイズも変更することができる。

描画したグラフをpngファイルなどで保存することができる。

Matplotlibのコードには2種類あり、MATLABのように書くスタイルとオブジェクト指向に則ったスタイルがあるM

解説

subplotメソッドの引数に個数をセットしたり, add_subplotメソッドを使うことで1つの描画オブジェクトの中に、複数のグラフを表示させることができます。

フィードバックを送信

問40

以下のコードの出力として正しいものを選べ

import pandas as pd

df_1 = pd.DataFrame({'a': [10, 100], 'b': [10, 20], 'c': [10, 1]})
df_2 = pd.DataFrame({'a': [10, 100], 'b': [10, 20], 'c': [10, 1]})
pd.concat([df_1, df_2], axis=0).reset_index(drop = True)

Image from Gyazo

Image from Gyazo

Image from Gyazo

Image from Gyazo

正解

あなたの答え

解説

pandasのconcatの使い方の問題です。concatはデータフレームを結合します。データフレームを結合する場合には結合する方向に気をつけましょう。ここではaxis=0を指定していますので行方向(垂直方向)に結合します。
Image from Gyazo
reset_index(drop = True)はindexを振り直しをします。dropオプションは結合前のindexを捨てるかを制御します。付けない場合旧indexを保持します。
Image from Gyazo

フィードバックを送信

シェアする

  • このエントリーをはてなブックマークに追加

フォローする