2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pybaseballで取得した大谷翔平の打撃データをMCPを使って分析してみる

Last updated at Posted at 2025-05-02

はじめに

 MCPサーバーが流行っているので、私も使ってみました。個人的にはMCPサーバーを使って自然言語でDBを操作するのが面白いと思ったので、pybaseballで取得したデータをSQLiteを使ってDBに登録してそれをMCPサーバーから操作する、というのをこの記事で紹介したいと思います。

pybaseballで大谷翔平の打撃データを取得

uv(プロジェクトマネージャ)のインストール

 環境の管理にuvを使用するので、pipでuvのインストール

pip install uv

uvで仮想環境を初期化して、次に必要なpythonライブラリpybaseballをインストール(※SQLiteはPython標準のものを使用するのでインストール不要)

uv init
uv add pybaseball

 次に、2024年の大谷の打撃データを取得してSQLiteのDBに保存するコードを準備します。

ohtani_stats.py
import sqlite3
from pybaseball import statcast_batter, playerid_lookup

# 大谷翔平の選手IDを取得
ohtani = playerid_lookup('Ohtani', 'Shohei')
ohtani_id = ohtani.iloc[0]['key_mlbam']

# 大谷翔平の2024年の打撃成績を取得
stats = statcast_batter('2024-03-29', '2024-10-01', ohtani_id)

# 重要な列だけを選択
important_cols = [
    'game_date',  # 試合日
    'launch_speed',  # 打球速度
    'launch_angle',  # 打球角度
    'hit_distance_sc',  # 打撃飛距離
    'events',  # 打席結果
    'description',  # 説明
    'zone',  # ゾーン
    'pitch_type',  # 球種
    'hit_location',  # ヒット位置
    'bb_type',  # 打球の種類
    'estimated_ba_using_speedangle'  # 速度と角度から推定される打率
]

# 選択した列だけでデータフレームを作成(NaNを0に置換)
selected_stats = stats[important_cols].fillna(0)

# データベース接続
conn = sqlite3.connect('2024_ohtani.db')
cursor = conn.cursor()

# テーブル作成
cursor.execute('''
DROP TABLE IF EXISTS ohtani_batting
''')

cursor.execute('''
CREATE TABLE ohtani_batting (
    game_date TEXT, 
    launch_speed REAL,
    launch_angle REAL,
    hit_distance_sc REAL,
    events TEXT,
    description TEXT,
    zone INTEGER, 
    pitch_type TEXT, 
    hit_location INTEGER, 
    bb_type TEXT, 
    estimated_ba_using_speedangle REAL
)
''')

# データを挿入する準備
records = selected_stats.to_dict('records')
for record in records:
    placeholders = ', '.join(['?'] * len(record))
    columns = ', '.join(record.keys())
    query = f"INSERT INTO ohtani_batting ({columns}) VALUES ({placeholders})"
    cursor.execute(query, list(record.values()))

# 変更を保存して接続を閉じる
conn.commit()

# 確認のためにレコード数を表示
cursor.execute("SELECT COUNT(*) FROM ohtani_batting")
count = cursor.fetchone()[0]
print(f"データベースに{count}件のレコードが保存されました。")

conn.close()

コード解説

  • 必要なライブラリのインポート
    • sqlite3:Pythonの標準ライブラリで、SQLiteデータベースを操作
    • pybaseball:MLBデータを取得するためのライブラリ
  • 選手IDの取得
    • playerid_lookup関数で大谷翔平選手のMLB IDを取得
  • 2024年シーズンの打撃データ取得
    • statcast_batter関数で2024年3月29日から10月1日までのデータを取得
  • 重要なデータの選択
    • 打球速度、打球角度、飛距離など重要な指標を選択
    • 欠損値を0に置換
  • データベース操作
    • SQLiteデータベースに接続
    • ohtani_battingテーブルを作成(既存なら削除して再作成)
    • Pandasのデータフレームからレコードを取得し、一行ずつデータベースに挿入
    • 変更をコミットし、保存件数を表示
    • 接続を閉じる

 以下で、作成したコードを実行。

uv run ohtani_stats.py

以下のような結果が出力されれば"2024_ohtani.db"が作成されています。

Gathering Player Data
データベースに2789件のレコードが保存されました。

Claude デスクトップの準備

 MCPホストとなるLLMのClaude デスクトップの準備をします。

Claude デスクトップのインストール

 以下のサイトからClaude デスクトップをインストール

MCP設定ファイルの更新

 エディタで「~\AppData\Roaming\Claude\claude_desktop_config.json」(※Windows)を開いて、以下のように編集。

claude_desktop_config.json
{
  "mcpServers": {
    "sqlite": {
      "command": "uvx",
      "args": ["mcp-server-sqlite", "--db-path", "[YOUR_DB_PATH]\\2024_ohtani.db"]
    }
  }
}

 [YOUR_DB_PATH]に関しては上記で作成したDBのフォルダパスを指定。

Claude デスクトップを再起動

 Claudeデスクトップ」を再起動すると、トンカチのアイコンが表示され、クリックでsqliteのツールが表示されます。

image.png

さっそく、分析

 それではClaude デスクトップからDBの内容ついて聞いてみましょう。

DBにアクセスして、一試合で一番多くホームランを打った日を教えて下さい。

結果

image.png

 Claudeのコードを実行するアーティファクトと組み合わせる事で、以下のような事もできます。

ホームランを打った球種で円グラフを作成してください。

結果

image.png

まとめ

 本記事では、MCPサーバーを使ってSQLiteのデータベースを自然言語で操る体験しました。MCPサーバーを使うことで、簡単にLLMからいろいろなツールを使用できるのでとても便利ですね。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?