Python
statistics
Python3
Poisson分布

pythonでポアソン関数の実装

ポアソン分布とは

CVなど一定の時間内(1週間や1ヶ月)に起こるイベントについての分布です!
ごく稀に起こる事象の確率分布を示します

pythonによるポアソン分布を作る関数の実装

ある一定の時間で平均avg回起こる事象があって、それがevent回起こる可能性を調べる関数を書きます!

#自然対数の底eをmathライブラリから呼ぶため、importします!
import math

#使いやすいように、どういった関数か表記します。
print("このファイルはポアソン関数を使って特定のイベントが起こる可能性をパーセントで示します。")

#標準入力を使います。
avg, event = map(float, input().split())

def poisson(avg, event):

    # ポアソン関数の実装と、パーセント表記にするために100を書けます
    x = ((avg ** event)*(math.e ** -(avg))) / math.factorial(event)*100

    #パーセントを文字列に直して、小数点以下2桁まで表示します。
    #x自体をstringにすると、"怒らない確率"を計算できないので、それはやめました!
    # math.factorialは階乗を求める関数です!
    print( str("{0:.2f}".format(x)) + "パーセントの確率で起こります!")

    #怒らない確率
    print("おこらない確率も表示しますか? y/n")

    ans = input()
    if ans == 'y':
        x = 100 - x
        print(str("{0:.2f}".format(x)) + "パーセントの確率で起こりません!")

poisson(avg, event)


早速計算してみます!

震度7以上の自身は21年間で5回起きています。(一年で平均5/21回 = 0.2380...)1年間で起こる確率は?

yossyMBP:Python yossy$ python poisson.py
このファイルはポアソン関数を使って特定のイベントが起こる可能性をパーセントで示します。
0.2380 1
18.76パーセントの確率で起こります!
おこらない確率も表示しますか? y/n
n

明日震度7以上の地震が起こる確率は?

#21年に365を掛けることで日にち換算にする
>>>5/(21*365)
0.00065231...
yossyMBP:Python yossy$ python poisson.py
このファイルはポアソン関数を使って特定のイベントが起こる可能性を示します。
0.00065231 1
0.07パーセントの確率で起こります!
おこらない確率も表示しますか? y/n
y
99.93パーセントの確率で起こりません!

10年間で7回雷が落ちた地域で明日雷が落ちる確率

365を掛けることで日にち換算にする
>>> 7/(10*356)
0.001966...
yossyMBP:Python yossy$ python poisson.py
このファイルはポアソン関数を使って特定のイベントが起こる可能性をパーセントで示します。
0.001966 1
0.20パーセントの確率で起こります!
おこらない確率も表示しますか? y/n
n

おわりに

もっと綺麗に書くことが出来る点があればおしえていただけますと幸いですm(__)m!