0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

StatcastでMLBのデータ解析をしてみた

Last updated at Posted at 2024-08-13

はじめに

Pythonのライブラリでpybaseballというのがあり、これはMLBが公開しているStatcastのデータらしいので、このデータを使ってデータ解析してみました。

使用ライブラリ

pip install pybaseball pandas matplotlib seaborn

データ解析の目的

今回はヒットになりやすい打球速度と打球角度があるかどうかを調べてみました。

データ解析スクリプト

import pybaseball as pb
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Statcastからデータを取得する期間を設定します(例: 2023年4月1日から2023年4月30日まで)
start_date = '2023-04-01'
end_date = '2023-07-30'

# Statcastデータを取得します
statcast_data = pb.statcast(start_date, end_date)

# 安打かどうかを示す列を作成します
# 安打(シングル、ダブル、トリプル、ホームラン)に該当する場合は1、その他は0
statcast_data['is_hit'] = statcast_data['events'].apply(lambda x: 1 if x in ['single', 'double', 'triple', 'home_run'] else 0)

# 必要な列を抽出し、欠損値を削除します
data = statcast_data[['launch_speed', 'launch_angle', 'is_hit']].dropna()

# データをビン(区間)に分けて、打球速度と角度の組み合わせごとにヒット率を計算します
data['speed_bin'] = pd.cut(data['launch_speed'], bins=10)
data['angle_bin'] = pd.cut(data['launch_angle'], bins=10)

# 各ビンごとのヒット率を計算します(observed=Falseを明示的に指定)
hit_rate = data.groupby(['speed_bin', 'angle_bin'], observed=False).mean().reset_index()

# 最適な打球速度と角度を特定します
best_combination = hit_rate.loc[hit_rate['is_hit'].idxmax()]
print(f"最適な打球速度範囲: {best_combination['speed_bin']}")
print(f"最適な打球角度範囲: {best_combination['angle_bin']}")

# データを可視化します
plt.figure(figsize=(12, 8))
pivot_table = hit_rate.pivot(index='angle_bin', columns='speed_bin', values='is_hit')
sns.heatmap(pivot_table, cmap="YlGnBu", annot=True, cbar=True)
plt.title("Hit Probability by Launch Speed and Launch Angle")
plt.xlabel("Launch Speed (mph)")
plt.ylabel("Launch Angle (degrees)")
plt.show()

結果

すごく当たり前かもしれませんが、打球速度が100mph前後で打球角度が-18°〜54°だとヒットになりやすいことがわかりました。打球速度が85mphを切ると、打球角度によらずヒットになる確率が低くなるので、日本からMLBへ行く打者は100mphの打球速度が出せないと厳しいということなのかも。
data.png

感想

APIでアクセスするのかと思いましたが、Pythonのライブラリが提供されていて簡単にデータ解析が始められました。データはダウンロードする必要があり、1ヶ月分くらいは適度な時間でダウンロードできますが、2ヶ月くらいになるとワーニングがでます。長期間のデータ解析をする場合は、1ヶ月単位くらいで細切れにダウンロードしたほうがよいかもしれません。いろいろがんばってたらMLBからデータアナリストとしてのジョブオファーがくるのかもしれない。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?