データ分析・上級問題チェック
問題 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)
