
ゆうき( @BASEBALLY15 )です^^
野球でホームランを打つことって,難しいの・・・?
そうですね・・・
実際に検証してみましょうか^^
今回は,プロ野球選手の中で,ホームラン数上位50人のデータを使い,
ホームランの難しさを『二項分布』で分析してみたいと思います.

ホームランとは?
野球では,大きく分けてボールを投げる人と打つ人がいます.その中で,打つ人が打ったボールが,直接客席に入ることを言います.
(※細かく説明すると,上の説明では不十分です.)
下の写真を見てもらうと分かりやすいと思います.
ホームランを打つためには,正確にボールをバットに当てる能力やパワーが必要になるため,
一般的にホームランを打つことは難しいと言われています.
次に,二項分布についてご紹介します.
二項分布とは?
二項分布とは,お互いに独立したベルヌーイの試行をn回行った時に,ある事柄が何回起こるかの確率分布のことを言います.
例えば,『コインを10回投げた時に,4回表が出る確率を求める』といった例題が参考書などで載っています.
それでは,二項分布を使って,ホームラン数を分析していきます^^
学習内容-二項分布-
まずは分析を行うために,ライブラリを用意します.
ライブラリ
import numpy as pd
import pandas as pd
from pandas import Series, DataFrame
import matplotlib.pyplot as plt
import seaborn as sns
#組み合わせCを使うためのライブラリ
from scipy.special import comb
#確率質量関数を求めるためのライブラリ
from scipy.stats import binom
%matplotlib inline
二項分布では,高校で習う『組み合わせ』を使うので,そのためのライブラリも上で用意しておきます.
次に,分析を行うためのコードをご紹介します.
コード
今回は,このサイトのデータを使います.
以下に,csvファイルにまとめたものを載せておきます.
ダウンロードして,使ってください.
それでは,コードを見ていきましょう^^
まずは,さきほどのcsvファイルをダウンロードします.
#csvファイルの読み込み
batter_data = pd.read_csv("Binomial distribution.csv")
#実行
batter_data
このように,データフレームが表示されます.
(※” TEAM NAME “の項目には, 『Central League』と『 Pacific League』の2種類あります.)
Team name | Player name | Bats | Homeruns | |
---|---|---|---|---|
0 | Central League | ソト | 584 | 43 |
1 | Central League | 坂本 勇人 | 639 | 40 |
2 | Central League | 村上 宗隆 | 593 | 36 |
3 | Central League | 山田 哲人 | 641 | 35 |
4 | Central League | バレンティン | 468 | 33 |
今回は『Central League』のデータを使って,分析してみたいと思います.
まずは, 『Central League 』のデータを取り出したいと思います.
#central_dataを定義
central_data = batter_data[batter_data["Team name"]=="Central League"]
#実行
central_data
すると,このように, 『Central League』 のデータのみが表示されます.
Team name | Player name | Bats | Homeruns | |
---|---|---|---|---|
0 | Central League | ソト | 584 | 43 |
1 | Central League | 坂本 勇人 | 639 | 40 |
2 | Central League | 村上 宗隆 | 593 | 36 |
3 | Central League | 山田 哲人 | 641 | 35 |
4 | Central League | バレンティン | 468 | 33 |
次に,二項分布に必要なデータをまとめていきます.
二項分布は,以下の式で表されます.
nCk→組み合わせ(高校数学で習います.)
n→打席数( BATS )
k→ホームラン数( HOMERUNS )
p→ホームランの確率
(1-p)→ホームラン以外の確率
まずは,打席数 n を求めます.(今回は,それぞれのリーグの平均を取っています.)
#打席数の平均
central_bats_mean = central_data["Bats"].mean()
#実行
central_bats_mean
412.92
1年間に約413打席バッターボックスに立っていることになります.
次に,ホームラン数 k を求めます.
#ホームラン数の平均
central_homeruns_mean = central_data["Homeruns"].mean()
#実行
central_homeruns_mean
14.52
約15本,ホームランを打っていることになります.
次に,ホームランの確率 p を求めます.
バッターボックスに立つと,
1シングルヒット,2ツーベスヒット,3スリーベースヒット,4ホームラン,5ファーボール,6三振
の6通りが考えられます.
そこで,以下のようにコードを記述しておきます.
#1ヒット,2ツーベスヒット,3スリーベースヒット,4ホームラン,5ファーボール,6三振
batter_box = ["Single hit", "Two-base hit", "Three base hits", "Home run", "Fur ball", "Strikeout"]
#ホームランの確率(1/6)
p_pacific = batter_box.count("Home run")/len(batter_box)
二項定理を使ってみよう
それでは,二項定理を使って,ホームランが出る確率を求めたいと思います.
#打席数(n)
n_pacific = pacific_bats_mean
#ホームラン数(k)
k_pacific = pacific_homeruns_mean
#ホームランの確率(p)
p_pacific = batter_box.count("Home run")/len(batter_box)
#組み合わせ(nCk)
c_pacific = comb(n_pacific, k_pacific)
#確率を求める
ans_pacific = (c_pacific*(p_pacific**k_pacific)*((1-p_pacific)**(n_pacific-k_pacific)))*100
#実行
ans_pacific
1.6253941627219446e-15
これを,小数で表記してみると,
0.00000000000000162 となります.
つまり,
100兆回打席に立って,1回ホームランが出ることになります!!
すごい確率ですね!
ホームランを打つことが出来る人は,本当にすごいですね^^
最後に,二項分布を可視化したいと思います.
二項分布の可視化
n_central = central_bats_mean
p_central = p_central = batter_box.count("Home run")/len(batter_box)
x = range(int(n_central)+1)
#二項分布の確率質量関数
y = binom.pmf(x, n_central, p_central)
#描写
plt.plot(x, y)
#ラベルを追加
plt.xlabel("Bats")
plt.ylabel("probability")

このグラフを見ると,だいたい80打席当たりで,最もホームランが出やすいということが分かります.
終わりに
今回は,二項分布を使って,ホームランが出る確率を求めてみました.
結果を見ると,ホームランを打つことが本当に難しいということが分かりました.
今後も,身近な出来事を分析し,ブログに投稿していこうと思います^^
それでは・・・