データ分析・上級問題チェック

問題 29 /40

Matplotlibのhistメソッドに関する説明で、誤っているものはどれか。 次のコードが実行されているものとする。 mu = 100 sigma = 15 np.random.seed(0) x = np.random.normal(mu, sigma, 1000) fig, ax = plt.subplots() n, bins, patches = ax.hist(x) for i, num in enumerate(n): print('{:.2f} - {:.2f}: {}'.format(bins[i], bins[i + 1], num))

選択 1

問題文のコードは何回実行してもデータの値は変わらず、グラフの形状も変わらない。

選択 2

nには各ビンの度数(要素数)、binsにはビンの境界値、patchesには描画情報が格納される。

選択 3

ビン(棒)の数を指定しなかった場合、最適な数が自動で決められる。

選択 4

for文で度数分布表の値を出力することができる。

解説

選択肢3が正解です。 問題文のコードです。 ------------------------------- mu = 100 sigma = 15 np.random.seed(0) x = np.random.normal(mu, sigma, 1000) fig, ax = plt.subplots() n, bins, patches = ax.hist(x) for i, num in enumerate(n): print('{:.2f} - {:.2f}: {}'.format(bins[i], bins[i + 1], num)) ------------------------------- 次のヒストグラムが表示されます。
ヒストグラムは度数分布表を棒グラフにしたものです。度数分布表は、データを等間隔に区切り、各区間ごとの要素数を表にしたものです。 問題文のデータの度数分布表 ------------------------------- 54.31 - 63.02: 9.0 63.02 - 71.72: 20.0 71.72 - 80.43: 70.0 80.43 - 89.14: 146.0 89.14 - 97.85: 217.0 97.85 - 106.56: 239.0 106.56 - 115.27: 160.0 115.27 - 123.97: 86.0 123.97 - 132.68: 38.0 132.68 - 141.39: 15.0 ------------------------------- グラフはx軸が各区間で、y軸が各区間の要素数になります。上の度数分布表では、「54.31 - 63.02」や「63.02 - 71.72」が各区間で、「9.0」や「20.0」が要素数となります。 【選択肢1】 問題文のコードは何回実行してもデータの値は変わらず、グラフの形状も変わらない。 正しい説明です。 Numpyのrandom.normal関数で、平均:100(mu)、標準偏差:15(sigma)の正規分布に従う乱数を1000個生成していますが、random.seed関数でシード値を固定しているため、何回実行しても同じ値が生成されます。従って、グラフも同じ形状で描画されます。 【選択肢2】 nには各ビンの度数(要素数)、binsにはビンの境界値、patchesには描画情報が格納される。 正しい説明です。 「n, bins, patches = ax.hist(x)」で、各変数に値が代入されます。問題文の場合、nとbinsは以下の情報が格納されます。 n ▶︎ array([ 9., 20., 70., 146., 217., 239., 160., 86., 38., 15.]) bins ▶︎ array([ 54.30785418, 63.01610143, 71.72434868, 80.43259594, 89.14084319, 97.84909044, 106.5573377 , 115.26558495, 123.9738322 , 132.68207946, 141.39032671]) 【選択肢3】 ビン(棒)の数を指定しなかった場合、最適な数が自動で決められる。 誤った説明です。 Matplotlibのhistメソッドでビン(棒)の数を指定しなかった場合は、デフォルトの10になります。最適な数が自動で決められることはありません。ビンの数を指定する場合は、「ax.hist(x, bins=25)」のようにhistメソッドの引数で設定します。 【選択肢4】 for文で度数分布表の値を出力することができる。 正しい説明です。 enumerate関数で各ビンの要素数をインデックス番号と共に抽出し、フォーマット文字列で出力しています。 formatメソッドの各引数には以下の情報が格納されています。 bins[i] → 境界値 bins[i + 1] → bins[i]の次の境界値 num → 各ビンの要素数 これがformatメソッドの前の中括弧に出力されます。 bins[i] → 先頭の{:.2f} bins[i + 1] → 2番目の{:.2f} num → 最後の{} 「:.2f」は、小数点以下を第2位まで表示する指定です。 なお、各ビンの要素数と境界値は、NumPyのhistogram関数を使っても抽出できます。 np.histogram(x, bins=10) ▶︎ array([ 9, 20, 70, 146, 217, 239, 160, 86, 38, 15]), array([ 54.30785418, 63.01610143, 71.72434868, 80.43259594, 89.14084319, 97.84909044, 106.5573377 , 115.26558495, 123.9738322 , 132.68207946, 141.39032671]) (公式書籍 p.193-197)