今回はMLB2023の大谷投手の
全投球データを見てみることとしました。
解説動画はこちら
データの入手先
今回取り扱っているデータは
Baseball Savantというサイトから入手できます。
Baseball Savant
画面の「Pitchers」に名前を入力して「Search」
結果画面の右側にある
「Download Data as Comma Separated Values File」を
クリックするとCSVがダウンロードできます。
全投球データを見てみることとしました。
解説動画はこちら
データの入手先
今回取り扱っているデータは
Baseball Savantというサイトから入手できます。
Baseball Savant
画面の「Pitchers」に名前を入力して「Search」
結果画面の右側にある
「Download Data as Comma Separated Values File」を
クリックするとCSVがダウンロードできます。
データの読み込み
Google Colabでデータを見る際は
事前にダウンロードしたデータを
ファイル置き場にアップロードしておいて下さい。
ピッチャー大谷選手のスタッツ
全球種
投球結果
ストライクの投球
球種による変化量
この様な感じで
投球データを色々な角度から
分析する事ができるデータになっています。
今回紹介した以外にも
たくさんのデータが存在するので
色々遊ぶ事ができると思います。
あそびたい方は
是非データをダウンロードして
こねくりまわしてみて下さい。
それでは。
Google Colabでデータを見る際は
事前にダウンロードしたデータを
ファイル置き場にアップロードしておいて下さい。
import numpy as np import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv('savant_data.csv') print(df.shape) df.head()
ピッチャー大谷選手のスタッツ
全球種
name_data=[ ['Sweeper','スィーパー','スライダーよりも横曲がりの大きいボール'], ['4-Seam Fastball','直球','直線的な豪速球(縫い目:シームが4回見える)'], ['Cutter','カット・ファスト・ボール','直球とほぼ同じ球速で小さく鋭く変化するボール'], ['Split-Finger','フォーク','打者の近くで落下する変化球'], ['Sinker','シンカー','投手の利き腕方向に曲がりながら落ちる球種'], ['Curveball','カーブ','比較的遅い球速で大きく曲がる球'], ['Slider','スライダー','ブレーキがかかった大きく曲がる球'], ] name_df = pd.DataFrame(name_data,columns=["pitch_name","球種名","説明"]) pitch_df = pd.DataFrame(df.pitch_name.value_counts()).reset_index() pd.merge(pitch_df,name_df,on='pitch_name', how='left')
投球結果
stats_df = pd.DataFrame(df.description.value_counts()).reset_index() stats_df
ストライクの投球
plt.figure(figsize=(10, 6)) x = df['plate_x'] z = df['plate_z'] d = df['description'] cs = ['blue' if 'strike' in c else 'grey' for c in d] plt.scatter(x, z, c=cs) plt.xlim(-10,10) plt.ylim(-2, 6) plt.show()
球種による変化量
plt.figure(figsize=(10, 6)) pitchtypes = ['Sweeper', '4-Seam Fastball', 'Cutter',
'Split-Finger', 'Sinker', 'Curveball', 'Slider'] colors = ['red', 'brown', 'orange', 'aqua', 'olive', 'magenta', 'lime'] s = set() for index, row in df.iterrows(): x = row['pfx_x'] * (-30.48) # センチ換算(逆方向) z = row['pfx_z'] * ( 30.48) # センチ換算 n = pitchtypes.index(row['pitch_name']) if n not in s: s.add(n) plt.scatter(x, z, color=colors[n], label=row['pitch_name']) else: plt.scatter(x, z, color=colors[n]) plt.legend(loc="upper left", fontsize=12) plt.xlim(-100,100) plt.ylim(-60, 60) plt.show()
この様な感じで
投球データを色々な角度から
分析する事ができるデータになっています。
今回紹介した以外にも
たくさんのデータが存在するので
色々遊ぶ事ができると思います。
あそびたい方は
是非データをダウンロードして
こねくりまわしてみて下さい。
それでは。
コメントする