pybaseball / MLBデータ分析ライブラリ
MLBのデータがあるので、触り始めてみた。
https://github.com/jldbc/pybaseball
これから触るにあたり、概要だけ確認しておく。
pybaseball
!pip install pybaseball
statcast
from pybaseball import statcast
カラムは以下。一部だけ記載
- pitch_type: ピッチの種類(ファーストボール、カーブボールなど)
- game_date: 試合の日付
- release_speed: ピッチを投げたときのピッチの速度(mph)
- release_pos_xとrelease_pos_y: ホームベースからのピッチを投げたときのx座標とy座標(フィート)
- player_name: ピッチを投げたプレイヤーの名前
- batter: バッターのID
- events: プレーで何が起こったかを表す(ストライクアウト、シングル、ホームランなど)
- description: プレーの詳細な説明
- zone: ストライクゾーン内のピッチの位置(1〜9)
- stand: バッターの打席スタンス(レフト、ライト、両打)
- p_throws: 投手の投球手(レフト、ライト)
- home_teamとaway_team: ホームチームとアウェイチーム
- ballsとstrikes: 打席内のボール数とストライク数
- launch_speed: バットで打たれたボールの速度(mph)
- launch_angle: バットで打たれたボールの角度(度)
全部は以下
Index(['pitch_type', 'game_date', 'release_speed', 'release_pos_x',
'release_pos_z', 'player_name', 'batter', 'pitcher', 'events',
'description', 'spin_dir', 'spin_rate_deprecated',
'break_angle_deprecated', 'break_length_deprecated', 'zone', 'des',
'game_type', 'stand', 'p_throws', 'home_team', 'away_team', 'type',
'hit_location', 'bb_type', 'balls', 'strikes', 'game_year', 'pfx_x',
'pfx_z', 'plate_x', 'plate_z', 'on_3b', 'on_2b', 'on_1b',
'outs_when_up', 'inning', 'inning_topbot', 'hc_x', 'hc_y',
'tfs_deprecated', 'tfs_zulu_deprecated', 'fielder_2', 'umpire', 'sv_id',
'vx0', 'vy0', 'vz0', 'ax', 'ay', 'az', 'sz_top', 'sz_bot',
'hit_distance_sc', 'launch_speed', 'launch_angle', 'effective_speed',
'release_spin_rate', 'release_extension', 'game_pk', 'pitcher.1',
'fielder_2.1', 'fielder_3', 'fielder_4', 'fielder_5', 'fielder_6',
'fielder_7', 'fielder_8', 'fielder_9', 'release_pos_y',
'estimated_ba_using_speedangle', 'estimated_woba_using_speedangle',
'woba_value', 'woba_denom', 'babip_value', 'iso_value',
'launch_speed_angle', 'at_bat_number', 'pitch_number', 'pitch_name',
'home_score', 'away_score', 'bat_score', 'fld_score', 'post_away_score',
'post_home_score', 'post_bat_score', 'post_fld_score',
'if_fielding_alignment', 'of_fielding_alignment', 'spin_axis',
'delta_home_win_exp', 'delta_run_exp'],
dtype='object')
Pitching Stats
pitching_stats(start_season, end_season)
リーグ全体のシーズン単位の投手データを取得するには、「pitching_stats(start_season, end_season)」関数を使用します。これにより、1シーズンあたり1人のプレーヤーごとに1行が返され、FanGraphsで提供されるすべてのメトリックが提供されます。
pitching_stats_range(start_dt, end_dt)
2番目は、「pitching_stats_range(start_dt, end_dt)」関数です。これにより、特定の期間内の投手データを取得できます。これにより、FanGraphs関数よりもより細かい単位でデータを取得できます(例えば、5月に最も強い投手を見つけることができます)。このクエリは、Baseball Referenceからデータを取得します。すべての日付は、YYYY-MM-DDの形式であることに注意してください。
pitching_stats_bref(season)
もし、Baseball Referenceの方がFanGraphsよりも好みである場合、「pitching_stats_bref(season)」という3番目の関数があります。これは、「pitching_stats」と同じように機能しますが、Baseball Referenceからデータを取得します。通常は、このオプションは推奨されません。これは、Baseball Referenceのクエリは現在、1シーズンあたり1つのリクエストでデータを取得できるためです。
(github日本語訳)
from pybaseball import pitching_stats
カラムは以下 (一部)
- IDfg: プレーヤーのIDfg
- Season: シーズン
- Name: 名前
- Team: チーム
- Age: 年齢
- W: 勝利数
- L: 敗北数
- WAR: ワー(Wins Above Replacement)
同じポジションの代替可能な選手に比べて、どれだけの勝利数に貢献したか、ということを表す指標 - ERA: 防御率
- G: 先発数
- GS: セーブ数
- CG: コンプリートゲーム数
- SHO: 完封勝利数
- SV: ホールド数
- IP: 実投球回数
- H: 被安打数
- R: 得点数
- ER: 自責点
- HR: 被本塁打数
- BB: 四球数
- IBB: 敬遠四球数
- SO: 奪三振数
- HBP: 被打者数
- BK: ボーク数
- WP: プレーヤー失策数
- BF: 打者数
- ERA+: 防御率プラス
- FIP: 実力指数
- WHIP: 奪塁率
- H9: 被安打/9回
- HR9: 被本塁打/9回
- BB9: 四球/9回
- SO9: 奪三振/9回
- SO/W: 奪三振/四球
- K-BB%: 奪三振数 - 四球数のパーセント
など
Index(['IDfg', 'Season', 'Name', 'Team', 'Age', 'W', 'L', 'WAR', 'ERA', 'G',
...
'LA', 'Barrels', 'Barrel%', 'maxEV', 'HardHit', 'HardHit%', 'Events',
'CStr%', 'CSW%', 'xERA'],
dtype='object', length=334))
Batting Stats
(github日本語訳)
from pybaseball import batting_stats_range
カラムは以下
- Name:プレイヤーの名前
- Age:プレイヤーの年齢
- #days:何日間のデータが含まれるか
- Lev:プレイヤーがいるチームのレベル(メジャーリーグ、マイナーリーグなど)
- Tm:プレイヤーがいるチーム
- G:試合数
- PA:打席数
- AB:打数
- R:得点
- H:安打数
- 2B:二塁打数
- 3B:三塁打数
- HR:本塁打数
- RBI:打点
- BB:四球
- IBB:インテント・ウォーク 敬遠
- SO:三振
- HBP:死球
- SH:犠打
- SF:犠飛
- GDP:ゴロを打ってダブルプレーになる
- SB:盗塁
- CS:盗塁失敗
- BA:打率
- OBP:出塁率
- SLG:長打率
- OPS:OPS(出塁率+長打率)
- mlbID:MLB のプレイヤー ID
Index(['Name', 'Age', '#days', 'Lev', 'Tm', 'G', 'PA', 'AB', 'R', 'H', '2B',
'3B', 'HR', 'RBI', 'BB', 'IBB', 'SO', 'HBP', 'SH', 'SF', 'GDP', 'SB',
'CS', 'BA', 'OBP', 'SLG', 'OPS', 'mlbID'],
dtype='object')
Game-by-Game Results and Schedule
(github日本語訳)
from pybaseball import schedule_and_record
カラムは以下です。
- Date:ゲーム日
- Tm:試合を行ったチーム
- Home_Away:ホームかアウェイか(Home または Away)
- Opp:対戦相手チーム
- W/L:試合の結果(勝利/敗北/引分)
- R:試合で得た得点数
- RA:試合で許された得点数
- Inn:試合が行われたイニング数
- W-L:その試合でのチームの勝率
- Rank:リーグ内順位
- GB:リーグ優勝候補からのゲーム差
- Win:勝利投手
- Loss:敗戦投手
- Save:セーブ投手
- Time:試合時間
- D/N:昼/夜の試合か(Day または Night)
- Attendance:観客動員数
- cLI:ゲーム開始前の天気指数(Cold 冷たい、Mild 普通、Warm 暖かい、Hot 暑い)
- Streak:連勝/連敗記録
- Orig. Scheduled:予定されていた試合日
Index(['Date', 'Tm', 'Home_Away', 'Opp', 'W/L', 'R', 'RA', 'Inn', 'W-L',
'Rank', 'GB', 'Win', 'Loss', 'Save', 'Time', 'D/N', 'Attendance', 'cLI',
'Streak', 'Orig. Scheduled'],
dtype='object')
Standings
この関数は、データフレームのリストを返します。それぞれのデータフレームは、MLB の 6 つの地区の順位表です。(github日本語訳)
from pybaseball import standings
カラムは以下です。
- Tm:チーム名
- W:勝利数
- L:敗北数
- W-L%:勝率
- GB:リーグ優勝候補からのゲーム差
Index(['Tm', 'W', 'L', 'W-L%', 'GB'], dtype='object')
その他
Caching
キャッシングとは、繰り返しデータを取得する際にデータ取得を高速化するために、 リクエストされたデータのローカルコピーを保存するためのローカルデータキャッシュのことです。 デフォルトでは、キャッシュは無効になっています。 これは、ユーザーが自分の承諾なしに ハードドライブスペースを使用したくないという可能性を尊重するためです。 ただし、キャッシュを有効にすることは簡単です。(github日本語訳)
pybaseball.cache モジュールをインクルードし、キャッシュオプションを有効にすることで、 キャッシュを有効にすることができます。以下に例を示します:
from pybaseball import cache cache.enable()