はじめに
2023年のレギュラーシーズンが終了し、クライマックスシリーズの真っただ中です。この機会に、セイバーメトリクスを使ってチームのデータを比較してみたくなり、この連載を始めました。セリーグ編もアップしていますので、興味のある方は以下のリンクからご覧ください。CS1stでは広島カープが勝利し、Finalは阪神と広島の対決となりました。
セリーグ編の記事はコチラ
引用したサイト
得点圏打率はこちらから引用させていただきます
得点との相関係数のランキング
順位 | 項目 | 相関係数 |
---|---|---|
1位 | 出塁率 | 0.93 |
2位 | 安打 | 0.85 |
3位 | 打率 | 0.85 |
4位 | 長打率 | 0.84 |
5位 | 塁打 | 0.83 |
6位 | 本塁打 | 0.82 |
7位 | 四球 | 0.63 |
※相関係数は小数点第3位で四捨五入しています。
相関係数の絶対数が大きい順に並べています。
打点、打席、打数、勝利、敗北は除外しています。
上記の表は、各指標と得点との相関係数をランキング形式で示しています。
セリーグとの違いや、その原因を分析すると、セリーグの試合の特性やDH制の有無、投手の打席への出場などが影響していることが考えられます。
また、セリーグは四球との相関係数が0.78でしたが、パリーグでは0.63となっています。
各項目と得点数とのグラフ
・打率と得点圏打率
オリックスは両方の指標でリーグトップの成績を記録しています。
楽天や西武などは打率や得点圏打率に明らかな差があり、この差がチームの得点能力や勝敗に影響していることが読み取れます。
環境構築
pip install pandas numpy seaborn matplotlib japanize-matplotlib
コード
データ分析に必要なライブラリをインポートします。
import pandas as pd
import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt
import japanize_matplotlib
pd.set_option('display.max_columns', None)
# パリーグのチーム打率のCSVを読み込む
df = pd.read_csv('baseball/data/npb_2023_pacific_batter.csv')
# グラフの凡例のチームカラー
team_colors = {
'オリックス': 'navy',
'ソフトバンク': 'yellow',
'楽天': 'red',
'ロッテ': 'black',
'西武': 'blue',
'日本ハム': 'cyan'
}
# チーム順位を追加
df['順位'] = ['1', '2', '4', '3', '5', '6']
df = df.sort_values(by='順位')
# 得点圏打率を追加
df['得点圏'] = [0.266, 0.250, 0.254, 0.239, 0.220, 0.252]
出塁率と得点の分析のコードです。
column = '出塁率'
plt.figure(figsize=(10, 5))
sns.scatterplot(data=df, x=column, y='得点', hue='チーム', palette=team_colors, s=100)
plt.title(f'{column}と得点の関係')
plt.xlabel(column)
plt.ylabel('得点')
plt.grid(True)
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
plt.tight_layout()
for i, row in df.iterrows():
plt.text(
row[column], row['得点'], str(row['順位']), color='black',
fontsize=10, ha='right', va='bottom'
)
# 出塁率と得点の平均値を示す線を追加
plt.axvline(df[column].mean(), color='red', linestyle='--', label=f'{column}の平均')
plt.axhline(df['得点'].mean(), color='blue', linestyle='--', label='得点の平均')
# 相関係数
correlation_coefficient = np.corrcoef(df[column], df['得点'])[0, 1]
plt.text(0.1, 0.9, f'r: {correlation_coefficient:.2f}', transform=plt.gca().transAxes)
# 回帰直線
slope, intercept = np.polyfit(df[column], df['得点'], 1)
x = np.linspace(min(df[column]), max(df[column]), 100)
y = slope * x + intercept
plt.plot(x, y, color='black', label=f'回帰直線: y = {slope:.2f}x + {intercept:.2f}', alpha=0.2)
plt.show()
セイバーメトリクスの指標を用いて、より詳しく分析していきます。
・OPS
チームの得点に貢献する指標(出塁率+長打率)
オリックス、ソフトバンク、楽天が上位で、3位のロッテがリーグ平均近くの値を記録しました。
相関係数が0.94で強い相関を示しているので、今季のパリーグではOPSが得点に直結する傾向があります。
・ISO(IsoP)
安打数から単打を引いた打者の長打力を測る指数(長打率-打率)
優勝したオリックスはOPSに続きISOもリーグ上位。このことから、オリックスの長打力がパリーグ1位であることが確認できます。
OPSで高い値を示していたソフトバンクと楽天はリーグ平均程度の数値でした。
最下位の日本ハムはOPSとISO、両方でリーグ平均近くの値を持っています。
5位の西武はOPSとともにISOでもリーグ最下位。来季の挑戦としては選球眼の向上や、長打力の強化が期待されます。
相関係数は0.60であり、長打が増えると得点も増える傾向があることが分かります。
・BABIP
打者の運や守備の影響を除いた打撃能力を示す指標(安打-本塁打)/(打数-三振-本塁打+犠飛)
ホークスがリーグ1位、続いて優勝したオリックスが2位となっています。これは両チームの打者の打球の質が高い可能性があります。
その他のチームは打球の質が平均以下であるか、守備シフト等の対策を受けている可能性が考えられます。
相関係数は0.74で、質の高い打球が得点に大きく影響していることが示されています。
・RC
打者がどれだけ得点を生み出したかの指標(安打+四球)x塁打/打席
パリーグ1位と2位のオリックスとソフトバンクがリーグ上位のRCを持っています。
相関係数は0.95で、RCが高ければ高いほど得点が増加する強い関係が確認できます。
・BB/K
打者の選球眼の指標(四球/三振)
楽天がリーグ1位のBB/Kを持っており、特に浅村選手の選球眼が際立っています。
優勝したオリックスはリーグ平均をやや下回るBB/Kで、この点では5位の西武と近い数値です。しかし、他の指標での高いパフォーマンスでその差を補っていると考えられます。
相関係数は0.64であり、選球眼が得点にも影響していることが分かります。
おまけ
盗塁数とその成功率を示すグラフです。
「走魂」の西武はリーグ平均以上の盗塁数を持ちながら、成功率は平均を下回っています。
効果が思ったより無さそうなので来年のスローガンは「激走魂」「爆走魂」なのでしょうか?(X旧Twitterで「爆走死魂」とか書き込まれそうです)
また、盗塁規画数と成功率でグラフを作成しました。
優勝したオリックスは盗塁規画が少なく、成功率も低くなっています。
横軸に盗塁を試みた数で、縦軸に盗塁の成功率です。
楽天はリーグ平均よりも多くの盗塁を試みており、成功率も高くなっています。
ロッテは少ない盗塁規画数ですが、成功率はリーグ1位となっており、選手の盗塁の上手さなのか、ベンチワークの良さなのか。
ただ、盗塁と得点の関係は-0.07で弱い相関を示しており、今季のパリーグで見ると盗塁が増加しても得点が増えにくいというデータになっています。
気になった人は様々なデータを見て盗塁の有効性を調べると面白いと思います。Data⚪︎tadium🔥さん🙇
関連するデータを可視化する時は
Seabornで見やすいグラフを作った方が良さそうです。とほほ
Dear 野球をしている人達
フライボール革命、バレルゾーン、打ち方など気になったら👇