ノーヒッターはどれくらいの頻度で起きる?
メジャーリーグベースボールの近代(1901–2015)における、各ノーヒッターの間に行われた試合数は配列 nohitter_times に保存されています。
ノーヒッターがポアソン過程に従うと仮定すると、ノーヒッター間の時間は指数分布に従います。ご覧のとおり、指数分布には 1 つのパラメータがあり、ここでは典型的な間隔時間を表す \(\tau\) と呼びます。指数分布がデータに最もうまく一致する \(\tau\) の値は、ノーヒッター間の平均間隔時間(単位は試合数)です。
このパラメータの値をデータから計算してください。次に、見つけた \(\tau\) をもつ指数分布からノーヒッター間隔をサンプリングすることで、np.random.exponential() を使ってメジャーリーグの「歴史を再現」し、得られたヒストグラムを PDF の近似としてプロットしましょう。
NumPy、pandas、matplotlib.pyplot、seaborn はそれぞれ np、pd、plt、sns としてインポート済みです。
この演習はコースの一部です
Pythonで学ぶ統計思考(パート2)
演習の手順
- 乱数生成器を
42でシードします。 - ノーヒッター間の平均時間(単位は試合数)を計算します。
- ノーヒッター間隔の平均から得たパラメータを使い、指数分布から 100,000 サンプルを生成します。
plt.hist()を使って理論的な PDF をプロットします。キーワード引数bins=50、normed=True、histtype='step'を必ず指定し、軸ラベルも付けてください。- プロットを表示します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Seed random number generator
____
# Compute mean no-hitter time: tau
tau = ____
# Draw out of an exponential distribution with parameter tau: inter_nohitter_time
inter_nohitter_time = ____(____, 100000)
# Plot the PDF and label axes
_ = ____(inter_nohitter_time,
____, ____, ____)
_ = plt.xlabel('Games between no-hitters')
_ = plt.ylabel('PDF')
# Show the plot
plt.show()