No.072 左投左打の平均打率は高いのか?


一元配置配置分散分析では、複数の母集団平均に差があるかどうかを検定し、3 つ以上のグループの平均を同時に比較することができます。

今回は2022年セリーグの打撃成績データから、右投右打 と 右投左打 と 左投左打の打率の平均に違いがあるのか分散分析で検証してみたいと思います。

帰無仮説は、3つの群の平均に違いはない
対立仮説は、少なくともどれかの群の平均に違いがある
有意水準は 5%とします。

ということで、早速ライブラリを読み込み、公式戦データの打撃上位選手の打率を読み込みfloatに変換します。

# 数値計算に使うライブラリ
import pandas as pd
import numpy as np
import scipy as sp
from scipy import stats as st

# グラフを描画するライブラリ
from matplotlib import pyplot as plt
import seaborn as sns
import japanize_matplotlib
sns.set()

# 統計モデルを推定するライブラリ
import statsmodels.formula.api as smf
import statsmodels.api as sm
import statsmodels.stats.anova as anova # 分散分析するライブラリ
from statsmodels.stats.multicomp import pairwise_tukeyhsd # Tukeyの多重比較するライブラリ

# 表示桁数の指定
%precision 3

# グラフをjupyter notebook内に表示させるための指定
%matplotlib inline


url = 'https://baseball.yahoo.co.jp/npb/stats/batter?gameKindId=1&type=avg'
df = pd.io.html.read_html(url,encoding='utf-8')

df=df[0]

df2=df.iloc[0:27,[1,2]]

df2["打 率"] = df2["打 率"].astype(float)

次に27名の利き腕を確認し、変数に格納しdf2に追加しました。

kikiude = [
    '右投左打','左投左打','右投左打','右投右打','右投右打','左投左打','右投左打','右投右打','右投左打','右投左打','右投左打','右投左打','右投左打','左投右打','右投右打','右投右打','右投右打','右投左打','右投左打','右投右打','右投右打','右投右打','右投左打','右投右打','右投右打','右投左打','左投左打'
]

df2.insert(2,"利き腕",kikiude,True)

ではグループごとの打率を見てみます。

df2.groupby('利き腕').describe()

なんと左投右打の選手もいるんですね。サンプル数1つなのでこのデータでの分析は難しそう。今回は除外しようと思います。左投左打も3件と微妙ですが、今回は内容はともかく分散分析を実施することが主目的なので突き進みます。
一応右投右打が.269, 右投左打が.277, 左投左打が.282となりました。
左打の方が打率が高くなる、特にもともと左利き(*右投左打の人はもともと右利きだけど、左打を習得したという想定)の人の方が打率が高くなるという仮説ができました。

一応テーブル形式を作成して各グループ毎の一覧を見てみましょう。

group1=pd.DataFrame({'右投左打':right_left})
group2=pd.DataFrame({'左投左打':left_left})
group3=pd.DataFrame({'右投右打':right_right})
group4=pd.DataFrame({'左投右打':left_right})

groups=pd.concat([group1, group2, group3, group4], axis=1)

なんと右投左打11名で 右投右打10名よりも多いのです。野球をやってない一般人で右投左打の人なんてほとんどいないと思いますが、野球の才能がある人達は右投左打がマジョリティのようです。


次にそれぞれのグループごとに配列をつくります。

right_left=np.array(df2[df2['利き腕'].str.contains('右投左打')]['打 率'])#右投げ左打ち
left_left=np.array(df2[df2['利き腕'].str.contains('左投左打')]['打 率'])#左投げ左打ち
right_right=np.array(df2[df2['利き腕'].str.contains('右投右打')]['打 率'])#右投げ右打ち

そして分散分析をやってみます。

f, p = st.f_oneway(right_left,left_left,right_right)
print("F=%f, p-value = %f"%(f,p))

意外なことにP値はかなり高く帰無仮説を棄却できません。

ということで、本日のところは、右投右打、右投左打、左投左打で打率に違いはないという結論で。(間違ってるかも)。

以上です。

この記事が気に入ったらサポートをしてみませんか?