ホームラン

ゆうき( @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 namePlayer nameBatsHomeruns
0Central Leagueソト58443
1Central League坂本 勇人63940
2Central League村上 宗隆59336
3Central League山田 哲人64135
4Central Leagueバレンティン46833

今回は『Central League』のデータを使って,分析してみたいと思います.

まずは, 『Central League 』のデータを取り出したいと思います.

#central_dataを定義
central_data = batter_data[batter_data["Team name"]=="Central League"]

#実行
central_data

すると,このように, 『Central League』 のデータのみが表示されます.

Team namePlayer nameBatsHomeruns
0Central Leagueソト58443
1Central League坂本 勇人63940
2Central League村上 宗隆59336
3Central League山田 哲人64135
4Central Leagueバレンティン46833

次に,二項分布に必要なデータをまとめていきます.

二項分布は,以下の式で表されます.

二項分布の式
(式をクリックすると,引用元を確認できます.)

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打席当たりで,最もホームランが出やすいということが分かります.

終わりに

今回は,二項分布を使って,ホームランが出る確率を求めてみました.

結果を見ると,ホームランを打つことが本当に難しいということが分かりました.

今後も,身近な出来事を分析し,ブログに投稿していこうと思います^^

それでは・・・

Q &A

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA