pybaseball / MLBデータ分析ライブラリ

コピー元ブログ 

https://hide.ac/articles/-JZTuB_RS

ーーーーーーーーーーーーーーーーーー

MLBのデータがあるので、触り始めてみた。

https://github.com/jldbc/pybaseball

これから触るにあたり、概要だけ確認しておく。


pybaseball

pybaseball

「pybaseball」は、野球データ分析のためのPythonパッケージです。このパッケージは、Baseball Reference、Baseball Savant、FanGraphsのサイトからデータをスクレイピングし、それらのサイトを訪れる必要がありません。このパッケージは、Statcastデータ、ピッチングの成績、打撃の成績、地区順位/チームの成績、賞のデータなどを取得できます。データは、個々のピッチのレベルでも、シーズン単位でも、カスタムの時間期間でも利用できます。(github日本語訳)

!pip install pybaseball

statcast

Statcast

「Statcast」とは、Major League Baseball(MLB)のデータ分析システムです。Statcastデータには、Perceived Velocity(PV)、Spin Rate(SR)、Exit Velocity(EV)、ピッチのX、Y、Z座標などのピッチレベルの特徴が含まれています。「statcast(start_dt, end_dt)」関数は、これらのデータをbaseballsavant.comから取得します。(github日本語訳)

https://baseballsavant.mlb.com/

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')

post image

Pitching Stats

Pitching Stats

「pybaseball」は、投手の成績を取得するための2つの主要な関数を提供しています。

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))
post image

Batting Stats

Batting Stats

シーズン中または特定の期間中のプレイヤーのヒット成績。打撃成績はピッチング成績と同じように取得されます。 シーズンレベルのスタッツを取得する関数呼び出しは batting_stats(開始シーズン、終了シーズン)であり、 特定の期間のスタッツを取得するには batting_stats_range(開始日、終了日)です。 Baseball Referenceにおけるシーズンレベルのデータに相当するものは batting_stats_bref(シーズン)です。

(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')
post image

Game-by-Game Results and Schedule

schedule_and_record

schedule_and_record 関数は、指定されたシーズンにおけるチームのゲーム単位の結果を返します。 これには、ゲームの日付、ホームチームとアウェイチーム、最終結果(勝利/敗北/引分)、スコア、勝利/敗北/セーブ投手、観客動員数、およびその日現在の地区順位が含まれます。この関数には、シーズンとチームの 2 つの引数しかありません。チームの引数は、チームの省略形(例えば NYY はニューヨーク・ヤンキース、SEA はシアトル・マリナーズ)です。もし season 引数が現在のシーズンに設定されている場合、クエリは過去のゲームの結果を返し、未発生のゲームのスケジュールを返します。

(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')
post image

Standings

Standings

順位表:最新または履歴の順位表、勝利/敗北記録 standings(シーズン)関数は、特定のシーズンの順位表を返します。もし現在のシーズンが選択されている場合、最新の順位表が返されます。 そうでなければ、選択されたシーズンにおける各地区のエンド・オブ・シーズンの順位表が返されます。

この関数は、データフレームのリストを返します。それぞれのデータフレームは、MLB の 6 つの地区の順位表です。(github日本語訳)

from pybaseball import standings

カラムは以下です。

  • Tm:チーム名

  • W:勝利数

  • L:敗北数

  • W-L%:勝率

  • GB:リーグ優勝候補からのゲーム差

Index(['Tm', 'W', 'L', 'W-L%', 'GB'], dtype='object')
post image

その他

Caching

キャッシングとは、繰り返しデータを取得する際にデータ取得を高速化するために、 リクエストされたデータのローカルコピーを保存するためのローカルデータキャッシュのことです。 デフォルトでは、キャッシュは無効になっています。 これは、ユーザーが自分の承諾なしに ハードドライブスペースを使用したくないという可能性を尊重するためです。 ただし、キャッシュを有効にすることは簡単です。(github日本語訳)

pybaseball.cache モジュールをインクルードし、キャッシュオプションを有効にすることで、 キャッシュを有効にすることができます。以下に例を示します:

from pybaseball import cache cache.enable()

参照https://github.com/jldbc/pybaseball