どうしてこうなった
現職でPython3データ分析試験の資格手当が魅力的だったため、基礎試験合格後に勢いで申し込みました。
しかし、体調不良により十分なモチベと勉強時間を確保できないまま試験当日を迎えることに。勉強に使える時間は4時間しかありません。
そこで、なるべく効率的に、短期集中作戦で勉強した結果合格ラインの700点ギリギリで合格できたため、自分の今後の勉強の指針として残すためにこの体験記を執筆します。
前提知識
- Python3 エンジニア認定基礎試験に合格済み(得点率70%程度)
- scikit-learnの基本的な使用経験あり(上司に言われるがままXGBoostにデータを流し込んだ程度)
使用教材・ツール
1. 認定テキスト
公認テキストであり、微分積分、ベクトル、統計学の基礎概念を非常に分かりやすく解説しています。数学が苦手な私でも理解できるよう、丁寧に説明されている良書です。
2. Claude3.7(有料プラン)
生成AIを活用して問題を生成し、繰り返し解くことで理解を深めました。無料版ではタイムリミットがすぐに来てしまうため、有料プランにアップグレードしました。
3. 学習ノート
中村印刷所 水平開きノート B5を使用。ページ間の盛り上がりがなく水平に開くため、素早い書き込みが可能です。
試験対策戦略
OdysseyCBTの公式HPの出題範囲を分析しました。
章 | 節 | 問題数 | 出題率 |
---|---|---|---|
1 データエンジニアの役割 | - | 2 | 5.0% |
2 Pythonと環境 | 1 実行環境構築 | 1 | 2.5% |
2 Pythonの基礎 | 3 | 7.5% | |
3 Jupyter Notebook | 1 | 2.5% | |
3 数学の基礎 | 1 数式を読むための基礎知識 | 1 | 2.5% |
2 線形代数 | 2 | 5.0% | |
3 基礎解析 | 1 | 2.5% | |
4 確率と統計 | 2 | 5.0% | |
4 ライブラリによる分析実践 | 1 NumPy | 6 | 15.0% |
2 pandas | 7 | 17.5% | |
3 Matplotlib | 6 | 15.0% | |
4 scikit-learn | 8 | 20.0% | |
5 応用: データ収集と加工 | - | 0 | 0.0% |
分析の結果、以下の戦略を立てました:
- 第1章は「データサイエンティスト 仕事」などの検索結果を参考に
- 第2章はPython3基礎試験の知識を信じる
- 第3章は第4章の理解に必要なので重点的に学習(ただし2時間まで)
- 第4章は問題演習を中心に反復練習
学習の流れ
試験当日(18:00)までの学習スケジュールを振り返ります。
【14:00】数学の基礎(第3章)
残り4時間
この章では、数式の記号の読み方から確率、統計、微分、積分、ベクトルなどの高校数学の基礎を学びました。特に確率の章では、確率と確率分布の違い、確率分布の意義など、基礎的な概念を丁寧に解説しており、数学が苦手な私でも理解を深めることができました。
個人的にはこのテキストで数学を振り返れたのが資格以上の収穫でした。
学習方法としては、テキストの内容をマークダウン記法で紙のノートにまとめました。マークダウン記法は素早く構造化できると評判ですが、紙のノートでも効果を実感しています。
【15:30】ライブラリによる分析実践(第4章)
残り2時間30分
同じく紙のノートにマークダウン記法で書きました。
ここでは時間も気にしていたので、全体像の把握→一つ一つの掘り下げの順で内容を頭に詰め込む戦略を取りました。
例えば、ノートに「一次元配列」「参照とコピー」「連結」のような内容を十行飛ばし程度で箇条書きにして、後で内容を埋めていくような写し方です。
15:30
NumPy
NumPyは配列(ndarray)の操作が中心となるため、まずは公式ドキュメントの「クイックスタート」部分をざっと読み、配列の生成・shape・reshape・スライス・ブロードキャストなど、よく出る操作をノートにまとめました。
特に「リストとの違い」「配列同士の演算」「スカラーとの演算」など、Pythonのリストと混同しやすい部分を重点的に整理。
また、np.arangeやnp.linspace、np.meanなど、試験で出やすい関数をピックアップし、使い方と出力例を手書きでまとめました。
時間が限られていたので、実際にコードは書かず、ノート上で「このコードを書いたらどうなるか?」を自分で考えて答え合わせする形式で進めました。
16:00
pandas
pandasは「データの選択・抽出」「集計」「欠損値処理」「データ型変換」など、実務でよく使う操作を中心に学習。
まずはSeriesとDataFrameの違いを明確にし、df['col']とdf[['col']]の違い、locとilocの使い分けなど、混乱しやすいポイントをノートに図解しました。
また、groupbyやpivot_table、dropna、fillnaなど、よく出るメソッドの使い方を箇条書きで整理。
特に「型(SeriesかDataFrameか)」の違いは試験でも頻出と聞いていたので、ノートにまとめて何度も見返しました。
16:30
生成AIを活用した問題演習
Claude3.7を使用して、以下のような問題を10問ずつ生成し、解きながら理解を深めました:
#問題1 次のPandasコードの出力として正しいものはどれですか?
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
result = df[['A']].shape
# A) (3,)
# B) (3, 1)
# C) (1, 3)
# D) 3
Claudeは各問題に対して詳細な解説を提供してくれました。例えば
- データフレームの構造
- 選択操作の結果の型(Series/DataFrame)
- shape属性の返り値の意味
- 選択肢の検討過程
みたいな部分を壁打ちしながら徹底的に深掘りすることができ、非常に有用でした。
また、モバイル版Claudeを使用することで移動時間も有効活用できました。
17:25
matplotlib
メソッド名がグラフの種類を表しているため、基本的な理解に留めました。
17:30
scikit-learn
試験会場への移動時間を利用して、基本的な概念の確認を行いました。
ただ椅子に座ってテキストを読んでいたに過ぎないので、正直ちゃんと頭に入っていなかったような気がします。
【18:00】試験開始
残り0分
「データエンジニアの役割」「Pythonと環境」についてはそこまで悩みませんでした。
pandasやNumPyの問題についてはClaudeで生成した練習問題がかなり役に立ちました。曖昧な理解を許さないような意地悪な選択肢ばかり提供されるので、練習問題がなければかなり狼狽えたと思います。
一方、scikit-learnはテキストをしっかり読めていなかったため、選択肢を見ても分からない問題が多く、プログラミング経験を頼りに消去法で回答する場面が目立ちました。
サンプルコードを実際に動かしていればもっと自信を持って答えられかもしれません。
分からない問題は飛ばしつつ、最後まで諦めずに全問解答。
終了後は不安もありましたが、Claudeでの演習が本番で役立ったと実感しました。
結果
700点/1000点で合格(合格ライン700点)
学びと反省
良かったこと(Keep)
- 技術系の科目のノートの取り方を自分なりに体系化し、マークダウン記法で効率よく整理できたことで、短時間でも知識を構造的にまとめられた。
- 生成AI(特にClaude)を使った問題集の再現度が非常に高く、実際の試験に近い形で演習できた。学習用アプリとしての完成度の高さを実感した。
- まず全体像(出題分布や章ごとの比重)を把握し、そこから優先順位をつけて一つずつ絞り込んで学習したことで、無駄なく対策できた。
改善すべきこと(Problem)
- 学習時間が圧倒的に足りなかった。とはいえストレス社会の現代人にとって「急に体調崩した」「直前まで仕事が立て込んだ」みたいな言い訳はつきもの。もう少し早めに準備を始めていれば、理解の浅い部分や手を動かせていない単元もカバーできたはず。
- scikit-learnについては、テキストを読むだけで終わってしまい、実際にコードを動かして確認する余裕がなかった。結果として、選択肢の違いを感覚で選ぶしかない場面が多かった。
次の資格に向けて(Try)
- 今後は「読む」だけでなく、必ずサンプルコードを実行しながら学習し、知識の定着を図る。内容をノートに写経する派の筆者はおそらくコードの写経も有効なので実施する。とにかく自分にあった勉強法として生涯まで定着させる。
- 生成AIをさらに活用し、苦手分野や応用問題も積極的に演習する。
- 直前詰め込み型ではなく、計画的に学習時間を確保し、余裕を持って準備を進める。
最後に
時間がない人でも、戦略とツール次第で合格は狙えます。この試験に興味がある人や、生成AIでの勉強に興味がある人はぜひ参考にしてみてください。
付録. Claudeで生成させた問題集
よかったらシステムプロンプトなどにご活用ください。
問題1
次のPythonコードの出力として正しいものはどれですか?
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
result = df.iloc[1, 1:3]
print(result)
A) 5
B) [5, 8]
C) Series([5, 8], index=['B', 'C'])
D) DataFrame([[5, 8]], columns=['B', 'C'])
問題2
NumPyで乱数のシードを設定するための正しいコードはどれですか?
A) np.set_seed(42)
B) np.random.set_seed(42)
C) np.random.seed(42)
D) np.seed(42)
問題3
Pandasデータフレームの列の型を確認するために使うメソッドは?
A) df.type()
B) df.dtypes
C) df.column_types
D) df.info()
問題4
次のMatplotlibコードで生成されるグラフはどのようなものですか?
import matplotlib.pyplot as plt
plt.figure()
plt.bar(['A', 'B', 'C', 'D'], [10, 20, 15, 25])
plt.show()
A) 折れ線グラフ
B) 散布図
C) 棒グラフ
D) 円グラフ
問題5
NumPyの次のコードの出力として正しいものはどれですか?
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape)
A) (3, 2)
B) (2, 3)
C) [2, 3]
D) 6
問題6
scikit-learnでデータを標準化するために使うクラスはどれですか?
A) StandardScaler
B) Normalizer
C) DataStandardizer
D) ScaleTransformer
問題7
PandasでCSVファイルを読み込むための正しい関数はどれですか?
A) pd.load_csv()
B) pd.import_csv()
C) pd.read_csv()
D) pd.open_csv()
問題8
次のSciPyコードで実行されている統計的検定は何ですか?
from scipy import stats
stats.pearsonr(x, y)
A) t検定
B) カイ二乗検定
C) ピアソン相関係数
D) ANOVA
問題9
次のPandasコードの出力として正しいものはどれですか?
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, None]})
print(df.isnull().sum())
A) False
B) Series([0, 1], index=['A', 'B'])
C) 1
D) Series([3, 2], index=['A', 'B'])
問題10
機械学習のモデル評価で「精度(accuracy)」を表す式として正しいものはどれですか?
A) (TP + TN) / (TP + TN + FP + FN)
B) TP / (TP + FP)
C) TP / (TP + FN)
D) (TP + FP) / (TP + TN + FP + FN)
解答を教えてください。頑張ってください!