AI資格ドリル
資格を選ぶ

Python3エンジニア認定データ分析試験 第2章 数学の基礎 予想問題と解説

Python3エンジニア認定データ分析試験「第2章 数学の基礎」の予想問題を12問収録しています。各問を解説つきで掲載し、全問は演習画面で解けます。出題は公式シラバスの範囲内です。

この章の要点

確率と統計(代表値・ばらつき)、線形代数(行列積・逆行列・行列式・連立方程式・固有値)などを扱う分野です。全12問(基礎7問・標準3問・応用2問)を収録しています。

  • 確率と統計(代表値・ばらつき)
  • 線形代数(行列積・逆行列・行列式・連立方程式・固有値)

情報源と編集区分

公式範囲を確認し、問題数・難易度・確認点は当サイトが集計・編集。

試験概要(公式)

確認しておきたいポイント

当サイトの作問時に観察した、取り違えやすい論点です(公式の統計ではありません)。

  • statistics.median の偶数個データでの結果。[1, 3, 5, 7] では中央の2値の算術平均で 4.0 になる。小さい方を返す median_low は 3、大きい方を返す median_high は 5 で、この2つは平均を取らないため結果は必ずデータに含まれる値になる。
  • mode で最頻値が複数あるときの挙動。Python 3.8 以降は最初に現れた最頻値を返し、以前の StatisticsError にはならない。すべての最頻値をリストで得たいときは multimode を使う。
  • 母分散と標本分散の関数の取り違え。statistics では pvariance が母分散、variance が標本分散(Bessel 補正済みで N-1 で割る)を返す。pstdev と stdev は分散ではなく標準偏差である。
  • np.var の除数。np.var は N - ddof を除数にし、ddof の既定値は 0 なので既定では N で割る。N-1 で割る標本(不偏)分散にしたいときは ddof=1 を指定する。statistics.variance とは既定の割り方が違う。
  • 行列積と要素ごとの積の取り違え。NumPy の * は要素ごとの積で、行列積は @ 演算子か dot で行う。同じ A と B でも A * B は [[2, 0], [0, 4]]、A @ B は [[5, 4], [3, 4]] と結果が異なる。
  • 線形代数関数の返り値と例外。np.linalg.det([[1, 2], [3, 4]]) は ad - bc で -2.0 となり、LU 分解で計算されるため整数ではなく浮動小数点数で返る。逆行列を持たない行列に np.linalg.inv を使うと LinAlgError になり、零配列や nan 配列は返らない。
  • np.dot の次元による結果の違い。ともに1次元配列なら内積でスカラーを返し、[1, 2, 3] と [4, 5, 6] では 32 になる。[4, 10, 18] は x * y の結果である。np.linalg.eig の固有ベクトルは長さ1に正規化されて列に格納され、eigenvectors[:, i] が eigenvalues[i] に対応する。

この章に関連する比較記事

混同しやすい2つの概念を並べて整理した記事です。

よくある質問

Q第2章 数学の基礎は何問収録されていますか?

A

現在12問を収録しています。内訳は基礎7問・標準3問・応用2問です。

Q第2章 数学の基礎の頻出論点は何ですか?

A

確率と統計(代表値・ばらつき)、線形代数(行列積・逆行列・行列式・連立方程式・固有値)などが出題対象です(当サイト収録問題に基づく編集部集計)。

Q間違えた問題はどう復習すればいいですか?

A

誤答した選択肢のどこがずれていたかを解説で確認し、関連用語がある場合は用語集で定義に戻ってから再演習することをおすすめします。

第1問 ・ 確率と統計(代表値・ばらつき)

statistics.median([1, 3, 5, 7]) の結果はどれか。

  • ア3
  • イ4.0
  • ウ5
  • エ2
答えと解説を見る
イ4.0正解
解説

正解は 4.0 である。公式ドキュメントは、データ数が偶数のときの median は中央の2値の算術平均を返すと説明しており、[1, 3, 5, 7] では (3 + 5) / 2 で 4.0 になる。データ数が奇数なら中央の値がそのまま返る。3 は偶数個のとき小さい方の中央値を返す median_low の結果で、5 は大きい方を返す median_high の結果である。2 は中央の値ではなく、平均を取る対象にも含まれない。median は平均を取るので結果が小数になる点が、この2関数との違いである。

Python公式ドキュメント日本語版 statistics(https://docs.python.org/ja/3/library/statistics.html) の median の項

問題番号: pyda-067
問題番号 pyda-067 の誤りを報告する
第2問 ・ 確率と統計(代表値・ばらつき)

データ [1, 3, 5, 7] に対する statistics.median_low と statistics.median_high の結果の組み合わせとして正しいものはどれか(順に median_low, median_high)。

  • ア4.0, 4.0
  • イ5, 3
  • ウ3, 5
  • エ1, 7
答えと解説を見る
ウ3, 5正解
解説

正解は 3, 5 である。公式ドキュメントでは、データ数が偶数のとき median_low は中央の2値の小さい方、median_high は大きい方を返す。[1, 3, 5, 7] の中央の2値は 3 と 5 なので、median_low は 3、median_high は 5 になる。この2つの関数は平均を取らないため、返す値は必ずデータに含まれる値である。4.0 は median が返す平均値であり、組み合わせが逆の 5, 3 は low と high を取り違えたものである。

Python公式ドキュメント日本語版 statistics(https://docs.python.org/ja/3/library/statistics.html) の median_low・median_high の項

問題番号: pyda-068
問題番号 pyda-068 の誤りを報告する
第3問 ・ 確率と統計(代表値・ばらつき)

statistics.mode([1, 1, 2, 3, 3, 3, 3, 4]) の結果はどれか。

  • ア1
  • イ2
  • ウ3
  • エStatisticsError が発生する
答えと解説を見る
ウ3正解
解説

正解は 3 である。公式ドキュメントは、mode は離散データや名義尺度データの最頻値を1つ返すと述べ、この例で結果が 3 になることを示している。3 は4回現れ、1 の2回より多い。最頻値が同数で複数ある場合、Python 3.8 以降は最初に現れたものを返す。以前のバージョンでは StatisticsError になっていたが、現在はそうならない。すべての最頻値を得たいときは multimode を使う。まず出現回数を数えることが判定の出発点になる。

Python公式ドキュメント日本語版 statistics(https://docs.python.org/ja/3/library/statistics.html) の mode の項

問題番号: pyda-069
問題番号 pyda-069 の誤りを報告する
第4問 ・ 確率と統計(代表値・ばらつき)

statistics.mode で最頻値が複数あるデータ(同じ回数で現れる値が複数ある)を扱ったとき、Python 3.8 以降の挙動と、すべての最頻値を得る方法の記述として正しいものはどれか。

  • アStatisticsError が発生するので、multimode を使えばすべての最頻値がリストで得られる
  • イ最初に現れた最頻値が返り、multimode を使えばすべての最頻値がリストで得られる
  • ウ最も大きい最頻値が返り、multimode を使えば最小の最頻値が得られる
  • エ最頻値は常に平均値に最も近い値が返る
答えと解説を見る
イ最初に現れた最頻値が返り、multimode を使えばすべての最頻値がリストで得られる正解
解説

正解は、最初に現れた最頻値が返り、multimode ならすべてがリストで得られるという記述である。公式ドキュメントは、同数の最頻値が複数あるとき mode は最初に現れたものを返し、この挙動は Python 3.8 で変わったと述べる。以前は StatisticsError だった。multimode は最頻値のリストを返す。値の大小や平均値との近さで選ぶ仕様ではないので、大きい方や小さい方、平均値に近い方を選ぶという記述は誤りである。

Python公式ドキュメント日本語版 statistics(https://docs.python.org/ja/3/library/statistics.html) の mode・multimode の項

問題番号: pyda-070
問題番号 pyda-070 の誤りを報告する
第5問 ・ 確率と統計(代表値・ばらつき)

データ全体が母集団であるとき母分散を求める関数と、標本から不偏推定量としての分散を求める関数の組み合わせとして正しいものはどれか(順に母分散, 標本分散)。

  • アstatistics.variance, statistics.pvariance
  • イstatistics.pstdev, statistics.stdev
  • ウstatistics.stdev, statistics.pstdev
  • エstatistics.pvariance, statistics.variance
答えと解説を見る
エstatistics.pvariance, statistics.variance正解
解説

正解は statistics.pvariance と statistics.variance である。公式ドキュメントは、pvariance が母分散、variance が標本分散を返すと説明している。variance は Bessel 補正済み(自由度 N-1)の分散で、データ点が代表的であれば母分散の不偏推定量になる。pstdev と stdev は分散ではなく標準偏差(分散の平方根)を返す関数なので、分散を求める組み合わせではない。

Python公式ドキュメント日本語版 statistics(https://docs.python.org/ja/3/library/statistics.html) の pvariance・variance の項

問題番号: pyda-071
問題番号 pyda-071 の誤りを報告する
第6問 ・ 確率と統計(代表値・ばらつき)

NumPy の np.var について、分散の計算に使う除数と ddof の説明として正しいものはどれか。

  • ア除数は N - ddof で、ddof の既定値は 0 のため既定では N で割る
  • イ除数は N - ddof で、ddof の既定値は 1 のため既定では N-1 で割る
  • ウ除数は常に N-1 で固定され、ddof は出力の型だけを変える
  • エddof=1 を指定すると母分散になり、既定の ddof=0 が標本分散(不偏分散)になる
答えと解説を見る
ア除数は N - ddof で、ddof の既定値は 0 のため既定では N で割る正解
解説

正解は、除数が N - ddof で、ddof の既定値が 0 のため既定では N で割るという説明である。公式リファレンスは、np.var が N - ddof を除数として分散を計算し、ddof の既定値は 0 だと述べる。標本分散(不偏分散)として N-1 で割りたいときは ddof=1 を指定する。N-1 は Bessel の補正と呼ばれる。statistics.variance が N-1 で割るのとは既定が異なるため、混同しないことが大切である。

NumPy公式リファレンス numpy.var(https://numpy.org/doc/stable/reference/generated/numpy.var.html)

問題番号: pyda-072
問題番号 pyda-072 の誤りを報告する
第7問 ・ 線形代数(行列積・逆行列・行列式・連立方程式・固有値)

NumPy で A = np.array([[1, 2], [3, 4]]) のとき、np.linalg.det(A) の結果はどれか。

  • ア-2.0
  • イ2.0
  • ウ10.0
  • エ-5.0
答えと解説を見る
ア-2.0正解
解説

正解は -2.0 である。公式ドキュメントでは、2次元配列 [[a, b], [c, d]] の行列式は ad - bc とされ、この配列の例では -2.0 になる。1×4 - 2×3 = -2 と計算できる。2.0 は符号を逆にした値、10.0 は成分の和、-5.0 は成分の差の取り違えである。なお行列式は LU 分解で計算されるため、結果は整数ではなく浮動小数点数で返る。式の順序(対角の積から反対角の積を引く)を押さえておけば暗算で判定できる。

NumPy公式リファレンス numpy.linalg.det(https://numpy.org/doc/stable/reference/generated/numpy.linalg.det.html) の記述

問題番号: pyda-073
問題番号 pyda-073 の誤りを報告する
第8問 ・ 線形代数(行列積・逆行列・行列式・連立方程式・固有値)

NumPy で、逆行列を持たない(特異な)正方行列 a に対して np.linalg.inv(a) を実行したときの動作として正しいものはどれか。

  • ア要素がすべて 0 の配列が返る
  • イLinAlgError が発生する
  • ウ要素がすべて nan の配列が返る
  • エ警告なしで単位行列が返る
答えと解説を見る
イLinAlgError が発生する正解
解説

正解は LinAlgError が発生する、である。公式ドキュメントによれば、np.linalg.inv は a が正方でない場合、または逆行列の計算に失敗した場合に LinAlgError を出す。特異と検出された場合も同様である。零配列や nan 配列を返す仕様はない。なお条件数が悪い(ill-conditioned)行列では LinAlgError が出るとは限らず、浮動小数点の誤差で不正確な結果になることがある点は別に押さえておく。

NumPy公式リファレンス numpy.linalg.inv(https://numpy.org/doc/stable/reference/generated/numpy.linalg.inv.html) の記述

問題番号: pyda-074
問題番号 pyda-074 の誤りを報告する
第9問 ・ 線形代数(行列積・逆行列・行列式・連立方程式・固有値)

NumPy で a が正方行列で逆行列を持つとき、ainv = np.linalg.inv(a) について公式ドキュメントが示す関係として正しいものはどれか。

  • アa * ainv が単位行列になる(要素ごとの積)
  • イa @ ainv と ainv @ a がどちらも np.eye(a.shape[0]) になる
  • ウa @ ainv だけが単位行列になり、ainv @ a は一般に異なる
  • エa + ainv が単位行列になる
答えと解説を見る
イa @ ainv と ainv @ a がどちらも np.eye(a.shape[0]) になる正解
解説

正解は、a @ ainv と ainv @ a がどちらも np.eye(a.shape[0]) になる、である。公式ドキュメントは a @ ainv = ainv @ a = eye(a.shape[0]) と記している。* は要素ごとの積であり、行列積ではないため、単位行列にはならない。逆行列は左から掛けても右から掛けても単位行列になる点が定義の要である。和では単位行列にならず、片側だけで成り立つという記述も公式の内容と合わない。判定では、演算が行列積の @ であることと、左右両方で成り立つことの2点を確認する。

NumPy公式リファレンス numpy.linalg.inv(https://numpy.org/doc/stable/reference/generated/numpy.linalg.inv.html) の記述

問題番号: pyda-075
問題番号 pyda-075 の誤りを報告する
第10問 ・ 線形代数(行列積・逆行列・行列式・連立方程式・固有値)

NumPy で x = np.array([1, 2, 3]) と y = np.array([4, 5, 6]) がともに1次元配列のとき、np.dot(x, y) の結果はどれか。

  • ア32
  • イ[4, 10, 18]
  • ウ[[4, 5, 6], [8, 10, 12], [12, 15, 18]]
  • エValueError が発生する
答えと解説を見る
ア32正解
解説

正解は 32 である。公式ドキュメントでは、np.dot はともに1次元配列ならベクトルの内積になり、戻り値はスカラーとされている。1×4 + 2×5 + 3×6 = 32 と計算できる。[4, 10, 18] は x * y の要素ごとの積であり、np.dot の結果ではない。ValueError は a の最後の次元と b の最後から2番目の次元の大きさが合わない場合に出るもので、この例は該当しない。まず次元数を確認し、次に積を足し合わせる手順で判定する。

NumPy公式リファレンス numpy.dot(https://numpy.org/doc/stable/reference/generated/numpy.dot.html) の記述

問題番号: pyda-076
問題番号 pyda-076 の誤りを報告する
第11問 ・ 線形代数(行列積・逆行列・行列式・連立方程式・固有値)

A = np.array([[1, 1], [0, 1]])、B = np.array([[2, 0], [3, 4]]) のとき、A @ B の結果はどれか。

  • ア[[2, 0], [0, 4]]
  • イ[[5, 4], [3, 4]]
  • ウ[[2, 3], [0, 4]]
  • エ[[3, 1], [3, 5]]
答えと解説を見る
イ[[5, 4], [3, 4]]正解
解説

正解は [[5, 4], [3, 4]] である。NumPy 公式チュートリアルでは、この A と B について、A * B は要素ごとの積で [[2, 0], [0, 4]]、行列積は @ 演算子(Python 3.5 以上)か dot で行い [[5, 4], [3, 4]] になると示されている。行列積の第1行は 1×2+1×3=5 と 1×0+1×4=4 である。[[2, 0], [0, 4]] は * の結果で、行列積ではない。

NumPy公式チュートリアル Quickstart(https://numpy.org/doc/stable/user/quickstart.html) の基本操作の項

問題番号: pyda-077
問題番号 pyda-077 の誤りを報告する
第12問 ・ 線形代数(行列積・逆行列・行列式・連立方程式・固有値)

np.linalg.eig(a) の戻り値の説明として公式ドキュメントの記述に合うものはどれか。

  • ア固有値は必ず昇順に並べられて返る
  • イ固有ベクトルは行ごとに格納され、eigenvectors[i, :] が eigenvalues[i] に対応する
  • ウ固有ベクトルは正規化されており、列 eigenvectors[:, i] が固有値 eigenvalues[i] に対応する
  • エ実行列の固有値は必ず実数になる
答えと解説を見る
ウ固有ベクトルは正規化されており、列 eigenvectors[:, i] が固有値 eigenvalues[i] に対応する正解
解説

正解は、固有ベクトルは正規化されており列 eigenvectors[:, i] が固有値 eigenvalues[i] に対応する、である。公式ドキュメントは、固有値は必ずしも順序づけられていないこと、固有ベクトルは長さ1に正規化され列で格納されることを記している。また実行列の固有値は実数か共役複素数のペアで現れ、np.array([[1, -1], [1, 1]]) の固有値は 1+1j と 1-1j である。したがって昇順、行格納、常に実数という記述はいずれも誤りになる。

NumPy公式リファレンス numpy.linalg.eig(https://numpy.org/doc/stable/reference/generated/numpy.linalg.eig.html) の記述

問題番号: pyda-078
問題番号 pyda-078 の誤りを報告する

執筆: AI資格ドリル編集部(運営者情報を見る)