問1
データエンジニアに求められる能力として必須ではないものを選べ
論文の読解能力
SQLなどのデータベース言語を扱う能力
前処理や特徴量エンジニアリングのための扱っているデータの専門知識
データ分析の要件を理解すること
解説
データエンジニアは情報を分析するという業務を担います。分析に伴い幅広い知識を要します。それに伴い論文を読む場合もあると思いますが、必須スキルではありません。必須なのは技術の進歩が速い分野なので、論文などを読んで最新技術をキャッチアップする必要がデータサイエンティストです。
問2
以下の関数f(x, y)のxに関する偏微分として正しいものを選べ
解説
数学の問題です。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”]
解説
データフレームからデータを抽出する問題です。大きな流れはデータフレームからデータを抽出して再度データフレームに入れるイメージです。後、演算子に注意しましょう。
問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 に変換して機械学習をしやすいデータに変換するためです。補足としてカテゴリー変数とは性別等のように順番などに意味を持たないデータのことです。
問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()
①
②
③
④
解説
コードからグラフをイメージ出来るかの問題です。まず 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()
①
②
③
④
解説
コードからグラフをイメージ出来るかの問題です。注目したいのは 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
解説
引数のfreqにはオフセットエイリアスと呼ばれる文字列をセットできます。(Mだと毎月の頻度Wだと毎週の頻度)
対象のdfはindexが日付になっているので月ごとにでグルーピングし平均を取得するmeanメソッドを使い月毎の平均データを出力できます。
問26
解説
データフレームを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
解説
以下のコードを実行すると
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
解説
autopctで円グラフ内部に表示する値の桁数の設定をし, labelsで円グラフの各要素のエッジにlabelを付与します。
問33
解説
棒グラフの特徴の問題です。正解のグラフは一見ヒストグラムにも見えますが、ヒストグラムと棒グラフの違いは棒の間ある間隔です。間隔が無いのがヒストグラムになり、棒グラフは間隔のあるグラフが正解です。
問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 datetie型に変換するメソッドは to_datetime()メソッドです。
問36
A = (1,2,3) B = (4,5,6)の2つの座標がある。座標AB間のユークリッド距離として正しいものを選べ
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