無機野

ここはお前の日記帳

matplotlibで二項分布を表示する(だけ)

先の記事で書いたコードだけどnumpy.random.binomial()で実際にサンプリングした数字からなるリストを作ってそっからヒストグラムつくるみたいなよく考えたら(よく考えなくても)頭悪いことしてたの今更気づいて、自分で単純なベルヌーイ試行だっつってんだからそのまま二項分布のグラフ書けばいいじゃねえかと思って書いた
range(x)が0から始まるリストを返すのにだけ気をつけて書くとこんな感じ

import matplotlib.pyplot as plt
import scipy.misc as scm #組合せ計算用

p = 1.5/100 #レジェンド
pack = 50
time = pack*8

def unko():
    aaa = []
    for j in range(time-1):
        elm = scm.comb(time,j) * (p**(j)) * ((1-p)**(time-j))
        aaa.append(elm)
    print(aaa,sum(aaa)) #表示される数は*100すると%表示になる。そっちのが見やすいか?
    plt.plot(aaa)

unko()

[0.014428036055035228, 0.043833398877860821, 0.088556816007048775, 0.13384665972638971, (以下略)
1.0
f:id:moppii:20161130115543p:plain

オッ

import matplotlib.pyplot as plt
import scipy.misc as scm #組合せ計算用

p = 1.5/100 #レジェンド
pack = 50
time = pack*8

def unko():
    aaa = []
    for j in range(time-1):
        elm = scm.comb(time,j) * (p**(j)) * ((1-p)**(time-j))
        aaa.append(elm)
    print(aaa,sum(aaa)) #表示される数は*100すると%表示になる。そっちのが見やすいか?
    plt.plot(aaa)
    plt.xlim([0,20]) #x軸を0から20までに絞る

unko()

<f:id:moppii:20161130115706p:plain

ちなみにこの50パックという数字は9800円課金してそのままガチャ回した時の確率である
この分布の平均と標準偏差はそれぞれ

m = time*p
s = (time*p*(1-p))**(1/2)
print(m-s,m+s)

3.5689508437713564 8.431049156228644

なので諭吉放りこむとおよそ3回に2回は3~8枚引ける計算になる
これやっぱリセマラすべきなんじゃ…