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

By [Shogaku](https://paragraph.com/@shogaku) · 2023-01-07

---

コピー元ブログ　

[https://hide.ac/articles/-JZTuB\_RS](https://hide.ac/articles/-JZTuB_RS)

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

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

[https://github.com/jldbc/pybaseball](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/](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')
    

* * *

![](https://storage.googleapis.com/papyrus_images/29b1b95bb7e2255f0cf266ae1b049d2d4a0965fef924db213bb835bd1292328f.png)

* * *

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

![](https://storage.googleapis.com/papyrus_images/096a1f6d356287e9abda7a864525dfca71e84a347984dc66aabdc4da41746e4b.png)

* * *

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

![](https://storage.googleapis.com/papyrus_images/c794de812bf1f3228a5b4ad4f3778e7acd793840299a2af87dae32c4c0b477f6.png)

* * *

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

![](https://storage.googleapis.com/papyrus_images/607145968c1f862f8cc10ce5f470b8ae2f3e4160a1c4e1f3f5d0c523e5ebe6b9.png)

* * *

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

![](https://storage.googleapis.com/papyrus_images/e7082b56fcd512eb3c3984c9a410211070002e49c235e572065b3a87e7f65081.png)

* * *

その他
---

Caching
-------

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

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

    from pybaseball import cache　cache.enable()
    

参照[https://github.com/jldbc/pybaseball](https://github.com/jldbc/pybaseball)

---

*Originally published on [Shogaku](https://paragraph.com/@shogaku/pybaseball-mlb)*
