2017年5月5日金曜日

Python でヒストグラムを作成する

通常の6面ダイスの場合、各面が出る確率は同じであるため、ダイスを投げる行為を乱数を使用して表す。
引数 num はダイスの面数、times で投げる回数を与えることにする。戻り値は、1 から 6 までの numpy.array 型となる。
import numpy as np
import matplotlib.pyplot as plt

def ThrowDice(num, times):
    return np.random.randint(1, num+1, times)
試しに 6面ダイスを 10 回投げてみる。
>> print(ThrowDice(6, 10))

[1 5 4 2 2 5 6 1 1 6]
6面ダイスを100回投げて、各々の面に対して出た回数をグラフ化する。

ヒストグラムを生成する場合は、matplotlib.pyplot.hist 関数を使用する。
このとき、第1引数には表示したいデータリスト、引数 bins には対象となる値(1 ~6)および +1 した値(7)のリストを渡す。
また、引数 rwidth は、棒グラフの幅を示し、align は表示場所を表す。("left" の場合は、棒グラフの中央が bins で指定した値の真上になる。"mid" の場合は bins の中間位置、"right" の場合は棒グラフの中央が次のx値の真上になる。)
def showHistogram(bins, cnt):
    result = ThrowDice(6, cnt)
    print(result)
    plt.hist(result,
             align="left",
             rwidth=0.5,
             bins=bins)
    plt.grid(True)
    plt.show()

showHistogram([1, 2, 3, 4, 5, 6, 7], 100)

ここで bins=[1, 2, 3] としてみる。以下の例の場合、2 の目が出なかったがグラフ上には 2 回出たように表示される。
>>  showHistogram([1, 2, 3], 10)

[3 6 6 4 6 6 3 6 1 6]
一般的に bin にリスト [x_1, x_2, ・・・. x_n] が与えられた場合、半開区間 [x_1, x_2), [x_2, x_3), …, [x_n-2, x_n-1) および 閉区間 [x_n-1, x_n] が各binの区間となる。
この例の場合、半開区間 [1, 2), 閉区間[2, 3]に含まれる要素の数となるため、2つめの区間 [2, 3] には要素 3 が含まれ、その数は 2 となる。

0 件のコメント:

コメントを投稿