1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2023-03-05

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日本語訳)

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


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


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


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


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


その他

Caching

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

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

from pybaseball import cache cache.enable()

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

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?