Featured image of post 【pybaselball基礎編①】pybaseballのライブラリの概要

【pybaselball基礎編①】pybaseballのライブラリの概要

PythonでMLBのデータ分析を始めるために、pybaseballの概要やインストール方法、Statcastデータの取得方法を解説します。

pybaseballで取得可能なデータや、どのような分析ができるかをシリーズで紹介していきます。

本記事は、pybaseball基礎編①として、pybaseballの概要やインストール方法を説明します。

さらに、実際にMLBのStatcastデータを取得し、大谷翔平選手のデータを使って簡単な分析まで行います。

今後の記事では、取得するデータの単位を変えながら、シーズン、試合、打席、1球、打球、投球といった単位でデータを扱っていきます。

記事のシリーズ

  1. pybaseball基礎編① pybaseballのライブラリの概要とインストール【本記事】
  2. pybaseball基礎編② シーズン単位のデータ取得(予定)
  3. pybaseball基礎編③ 試合単位のデータ取得(予定)
  4. pybaseball基礎編④ 打席単位のデータ取得(予定)
  5. pybaseball基礎編⑤ 1球単位のデータ取得(予定)
  6. pybaseball基礎編⑥ 打球単位のデータ取得(予定)
  7. pybaseball基礎編⑦ 投球単位のデータ取得(予定)

1. pybaseballとは

pybaseballは、Pythonから野球に関するデータを取得し、分析するためのライブラリです。

MLBのデータを扱う際に、Baseball Savant、Baseball Reference、FanGraphsなどのデータソースからデータを取得し、PythonのDataFrameとして扱うことができます。

今回のシリーズでは、主にMLBのStatcastデータを利用します。

pybaseballは、野球データをPythonから扱いやすくするためのライブラリと考えると分かりやすいでしょう。

イメージとしては、以下のようになります。

MLBのデータ
    ├── Baseball Savant / Statcast
    ├── FanGraphs
    ├── Baseball Reference
    └── その他のデータソース
        pybaseball
      pandas DataFrame
      Pythonでデータ分析

今回の記事では、Baseball Savantで公開されているMLBのStatcastデータを、pybaseballを使ってPythonから取得して扱います。


2. Statcastとは

Statcastは、MLBの試合で発生する投球や打球などを詳細に記録したデータです。

1球ごとの投球情報だけでなく、打者、投手、球種、球速、コース、打席結果、打球速度、打球角度など、さまざまな情報を確認できます。

Statcastで取得できる代表的な情報を簡単に整理すると、以下のようになります。

Statcast
├── 試合情報
│   ├── 試合日
│   ├── 試合ID
│   └── イニング
├── 打者情報
│   ├── 選手名
│   └── MLB Player ID
├── 投手情報
│   ├── 投手名
│   └── MLB Player ID
├── 投球情報
│   ├── 球種
│   ├── 球速
│   ├── 回転数
│   └── 変化量
├── コース情報
│   ├── 横位置
│   ├── 縦位置
│   └── ゾーン
├── 打席結果
│   ├── Single
│   ├── Double
│   ├── Triple
│   ├── Home Run
│   ├── Strikeout
│   └── Walk
└── 打球情報
    ├── 打球速度
    ├── 打球角度
    └── 飛距離

例えば、

  • どの球種が投げられたのか
  • 何mphだったのか
  • どのコースに投げられたのか
  • 打者はどのような結果になったのか
  • 打球速度はどのくらいだったのか
  • 打球角度は何度だったのか

といった情報を分析できます。

このため、Statcastを利用すると、通常の打率や防御率だけでは分からない選手の特徴を分析できます。


3. pybaseballのインストール

今回はGoogle Colabを利用して、実際にコードを実行していきます。

Google Colabを開き、以下のコードを実行してください。 PyPIで公開されているバージョンは古いため、GitHubに公開されているバージョンを利用します。

!pip install -q git+https://github.com/jldbc/pybaseball.git

インストールが完了したら、pybaseballを読み込んでみます。

import pybaseball

print("pybaseball version:", pybaseball.__version__)

2026年8月31日時点で、pybaseball version: 2.2.7です。


4. Statcastのデータを取得してみる

pybaseballをインストールできたので、実際にMLBのデータを取得してみます。

今回は、2025年4月1日のStatcastデータを取得します。

from pybaseball import statcast

df = statcast(
    start_dt="2025-04-01",
    end_dt="2025-04-01"
)

print("行数:", len(df))
print("列数:", len(df.columns))

出力結果

行数: 3704
列数: 119

続いて、取得したデータを確認します。

display(df.head())

出力結果

Statcastのデータでは、基本的に1球につき1行のデータが格納されています。

そのため、例えば、

1行目 → 1球目
2行目 → 2球目
3行目 → 3球目
...

という形になります。

今回のシリーズでは、この「1球単位」のデータをもとに、試合単位や打席単位、打球単位など、さまざまな分析へ発展させていきます。


5. どのようなデータが取得できるのか確認する

取得したDataFrameに、どのような項目が含まれているのか確認してみましょう。

print(df.columns.tolist())

非常に多くの項目が表示されると思います。

すべての項目を最初から覚える必要はありません。

まずは代表的な項目を確認してみます。

columns = [
    "game_date",
    "game_pk",
    "player_name",
    "batter",
    "pitcher",
    "pitch_type",
    "release_speed",
    "release_spin_rate",
    "zone",
    "events",
    "description",
    "launch_speed",
    "launch_angle",
    "hit_distance_sc"
]

display(df[columns].head(10))
項目 内容
game_date 試合日
game_pk 試合ID
player_name 選手名
batter 打者ID
pitcher 投手ID
pitch_type 球種
release_speed 投球速度
release_spin_rate 回転数
zone 投球ゾーン
events 打席結果
description 投球結果
launch_speed 打球速度
launch_angle 打球角度
hit_distance_sc 推定飛距離

このようなデータを利用することで、単純な打率だけではなく、より細かい選手分析が可能になります。

出力結果


6. 大谷翔平選手のデータを取得する

ここからは、実際の選手を指定してデータを取得してみます。

今回は大谷翔平選手を例にします。

まず、pybaseballのplayerid_lookup()を利用して、大谷選手のMLB Player IDを検索します。

from pybaseball import playerid_lookup

player = playerid_lookup(
    "Ohtani",
    "Shohei"
)

display(player)

検索結果からMLBのPlayer IDを取得します。

ohtani_id = int(
    player.iloc[0]["key_mlbam"]
)

print("MLBAM ID:", ohtani_id)

出力結果

MLBAM ID: 660271

取得したIDを利用すると、大谷選手のStatcastデータを取得できます。

from pybaseball import statcast_batter

ohtani = statcast_batter(
    start_dt="2025-04-01",
    end_dt="2025-04-30",
    player_id=ohtani_id
)

データを確認します。

display(ohtani.head())

出力結果

これで、2025年4月の大谷翔平選手の打席に関連するStatcastデータを取得できました。


7. 今回はここまで

今回は基礎編①ということで、複雑な分析は行わず、

pybaseball
Statcastデータを取得
pandas DataFrame
選手データを抽出

という基本的な流れを確認しました。

ここまでできれば、pybaseballを使ったMLBデータ分析の準備は完了です。


8. 今後の記事でできること

今回取得したStatcastデータは、さまざまな単位で分析できます。

シーズン単位

2025年の選手成績を確認したり、複数の選手を比較したりできます。

例えば、

  • 大谷翔平選手のシーズン成績
  • 選手の打球速度ランキング
  • 球速ランキング
  • 球種別の使用割合

などです。

試合単位

1試合に絞ることで、

  • その試合で何球投げられたのか
  • どの球種が使われたのか
  • 各打者が何打席あったのか

などを分析できます。

打席単位

1つの打席に注目すると、

打席
1球目
2球目
3球目
...
打席結果

という流れを確認できます。

例えば、

「大谷翔平選手は2ストライク後にどのような球を打っているのか?」

といった分析ができます。

1球単位

Statcastの基本となる単位です。

例えば、

  • 球種
  • 球速
  • 回転数
  • コース
  • ストライク・ボール
  • 空振り
  • ファウル

などを分析できます。

打球単位

打球が発生したデータに絞れば、

  • 打球速度
  • 打球角度
  • 飛距離
  • 打球方向

などを分析できます。

例えば、

「大谷翔平選手のホームランは、どのくらいの打球速度で飛んでいるのか?」

といった分析につなげられます。

投球単位

投手側から見ると、

  • 球種
  • 球速
  • 回転数
  • 横方向の変化量
  • 縦方向の変化量
  • コース
  • 空振り

などを分析できます。

例えば、

「山本由伸投手はどの球種で空振りを取っているのか?」

といった分析が可能です。


9. このシリーズで目指すこと

このシリーズでは、単にpybaseballの関数を紹介するだけではなく、

「MLBのデータを取得して、自分で分析できるようになること」

を目標にします。

例えば、最終的には、

「村上宗隆選手はどのゾーンが得意なのか?」

という疑問に対して、

Statcast
pybaseball
データ取得
pandas
データ加工
集計
グラフ化
分析・考察

という流れで、自分で答えを出せるようになることを目指します。


10. 次回の記事

次回は、シーズン単位のデータ取得について解説します。

1年間のデータをまとめて取得することで、

  • シーズン成績
  • 打球速度
  • 打球角度
  • 球種
  • 投球速度

などを選手単位で比較できるようになります。

次回は、

【pybaseball基礎編②】シーズン単位のデータを取得する

を予定しています。


まとめ

今回は、pybaseballの概要とインストール方法について紹介しました。

ポイントをまとめると、以下のとおりです。

  • pybaseballはPythonから野球データを扱うためのライブラリ
  • Baseball Savant / StatcastなどのデータをPythonから取得できる
  • Statcastには投球、打者、投手、打球などの詳細なデータが含まれている
  • statcast()を使うと1球単位のデータを取得できる
  • playerid_lookup()を使って選手IDを検索できる
  • statcast_batter()を使うと特定打者のデータを取得できる
  • 取得したデータはpandas DataFrameとして分析できる
  • 1球単位のデータから、試合・打席・打球などさまざまな分析へ発展できる

pybaseballを使うことで、MLBのデータを眺めるだけではなく、自分でデータを取得して、自分なりの疑問をデータから検証することができます。

今後のシリーズでは、データを取得する単位を少しずつ変えながら、実際のMLB選手を題材にした分析へ進んでいきます。


データ参照元

本記事では、MLBのStatcastデータを利用しています。

主なデータ参照元は以下のとおりです。

  • Baseball Savant / Statcast
  • pybaseball公式GitHub
  • Baseball Savant Statcast CSV Documentation

Statcastの各項目の詳しい定義については、Baseball Savantの公式ドキュメントを参照してください。

また、Statcastのデータは更新される場合があるため、記事公開後に読者が同じコードを実行した場合、取得結果が記事掲載時と完全に一致しない場合があります。


動作環境

本記事ではGoogle Colabを利用しています。

Pythonとpybaseballのバージョンは、以下のコードで確認できます。

import sys
import pybaseball

print("Python:", sys.version)
print("pybaseball:", pybaseball.__version__)

記事を再現する場合は、使用したPythonおよびpybaseballのバージョンを確認してください。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。