難易度は Level 1(やさしめ)〜Level 5(難関) の5段階です。
Python 3 エンジニア認定データ分析実践試験のサンプル問題(本番形式・解説付き)
Python 3 エンジニア認定データ分析実践試験(Pythonエンジニア育成推進協会・Python 3 エンジニア認定データ分析実践試験(主教材『Pythonデータ分析 実践ハンドブック』準拠))の出題形式を、実際の問題で確かめられます。ここに掲載する5問は、無料の会員登録で解ける模試 第1回(40問)の冒頭から抜粋したオリジナル問題です。当サイトは全160問を本番CBT準拠の形式で収録しており、この5問はそのごく一部にあたります。
設問1
ある小売企業の店舗別売上を DataFrame `df` に入れた。次のコードを実行した結果として表示されるものはどれか。 ```python import pandas as pd df = pd.DataFrame({'shop': ['A', 'B', 'A', 'C'], 'price': [100, 200, 150, 250]}) print(list(df.describe().columns)) ```
- `['count', 'mean', 'std']`
- `['shop']`
- `['shop', 'price']`
- `['price']`(正解)
解説
`describe()` は既定で数値の列だけを要約するので、数値の `price` だけが残り `['price']` になります。文字列の `shop` は既定の対象外なので、`['shop']` や `['shop', 'price']` にはなりません。`count` や `mean` は結果の列ではなく行の名前(インデックス)に並ぶ項目です。
設問2
ある研究チームが、タブ区切りのデータを、区切り文字の指定なしで `read_csv` に渡した。次のコードを実行したとき、表示される結果はどれか。 ```python import pandas as pd from io import StringIO text = 'a\tb\n1\t2' print(pd.read_csv(StringIO(text)).shape) ```
- `(1, 1)`(正解)
- `(2, 1)`
- `(1, 2)`
- `(2, 2)`
解説
`read_csv` の既定の区切りはコンマなので、タブ区切りの行は分かれず、1 列として読まれます。1 行目が列名になり、データは 1 行で `(1, 1)` です。`(1, 2)` はタブで 2 列に分かれた場合で、`sep='\t'` を指定したときの形です。`(2, 2)` と `(2, 1)` は、1 行目を列名にせずデータとして数えた形で、`header` の既定と合いません。
設問3
ある研究チームが、列が一部だけ異なる 2 つの表を縦に積み重ねたい。次のコードを実行した結果として表示されるものはどれか。 ```python import pandas as pd a = pd.DataFrame({'x': [1, 2], 'y': [3, 4]}) b = pd.DataFrame({'y': [5, 6], 'z': [7, 8]}) print(pd.concat([a, b]).shape) ```
- `(2, 3)`
- `(4, 3)`(正解)
- `(4, 2)`
- `(2, 4)`
解説
`concat` の既定は `axis=0` で行方向に積み重ね、列は両方の表の和集合になります。行は 2 + 2 で 4、列は `x`・`y`・`z` の 3 で `(4, 3)` です。`(2, 4)` は横に並べたときの形、`(4, 2)` は共通の列 `y` を含む 2 列だけを残した形、`(2, 3)` は行が増えない見立てで、どれも既定の動きと合いません。
設問4
ある研究チームが、3 行 4 列の配列を作って属性を確かめた。次のコードを実行した結果として表示されるものはどれか。 ```python import numpy as np a = np.arange(12).reshape(3, 4) print(a.shape, a.ndim, a.size) ```
- `(4, 3) 2 12`
- `(3, 4) 1 12`
- `(3, 4) 2 12`(正解)
- `(3, 4) 2 3`
解説
`shape` は各軸の長さで `(3, 4)`、`ndim` は軸の数で 2、`size` は要素の総数で 3 × 4 の 12 です。`(4, 3)` は行と列を取り違えた形です。`ndim` を 1 とするのは、2 次元に直したことを無視した数え方です。`size` を 3 とするのは、行の数だけを答えた値です。
設問5
ある小売企業の注文日の列に、日付として読めない文字列が 1 件混ざっている。変換できない値は欠損値にして処理を続けたい。次のコードを実行した結果として表示されるものはどれか。 ```python import pandas as pd s = pd.Series(['2024-03-01', 'abc']) r = pd.to_datetime(s, errors='coerce') print(r.isna().tolist()) ```
- `[False, True]`(正解)
- `[True, False]`
- `[False, False]`
- `[True, True]`
解説
`errors='coerce'` を指定すると、変換できない値は例外にならず `NaT`(日時の欠損値)になります。日付として読める先頭は欠損にならず、`'abc'` だけが欠損なので `[False, True]` です。`[False, False]` は欠損が出ないという考えで、既定の `errors='raise'` なら例外になります。`[True, False]` は欠損の位置が逆です。`[True, True]` は全件が変換に失敗するという考えです。
続きは、会員登録なしでそのまま50問解けます。採点と解説つきで、上と同じ本物の問題です。
登録なしで50問解く