Baseball Savant leaderboard data — complements pybaseball with 15+ leaderboards
Project description
savant-extras
Baseball Savant leaderboard data — complements pybaseball.
pybaseball is great but many Baseball Savant leaderboards are missing or limited. savant-extras fills that gap with 15+ leaderboards covering batting, pitching, catching, baserunning, and fielding — all as simple one-line function calls returning DataFrames.
Installation
pip install savant-extras
Quick Start
from savant_extras import (
bat_tracking, pitch_tempo, arm_strength,
pitch_movement, swing_take, catcher_throwing,
)
# Bat tracking with custom date range (2024+)
df = bat_tracking("2024-04-01", "2024-04-30")
# Pitcher pitch tempo
df = pitch_tempo(2024)
# Outfielder arm strength
df = arm_strength(2024, position="Outfielder")
# Slider movement
df = pitch_movement(2024, pitch_type="SL")
# Batter plate discipline
df = swing_take(2024)
# Catcher pop time & CS rate
df = catcher_throwing(2024)
All Functions
Every leaderboard function returns a pd.DataFrame. Most have a _range() variant for multi-season queries (adds a year column).
Batting
| Function | Data from | Description |
|---|---|---|
bat_tracking(start_date, end_date) |
2024+ | Bat speed, attack angle, swing tilt (custom date range) |
bat_tracking_monthly(year) |
2024+ | Monthly bat tracking (Apr–Oct) |
bat_tracking_splits(year) |
2024+ | First-half / second-half splits |
batted_ball(year) |
— | GB/FB/LD rates, pull/oppo splits |
home_runs(year) |
— | HR distance, exit velocity, xHR, no-doubters |
swing_take(year) |
— | Run values by zone (heart/shadow/chase/waste) |
year_to_year(year) |
— | xwOBA changes across seasons |
Pitching
| Function | Data from | Description |
|---|---|---|
pitch_tempo(year) |
2010+ | Pace metrics (median seconds, hot/warm/cold) |
pitch_movement(year) |
— | Horizontal/vertical break by pitch type |
pitcher_arm_angle(year) |
— | Release point angles and positions |
running_game(year) |
— | Pitcher running game (pickoffs, CS above avg) |
timer_infractions(year) |
2023+ | Pitch clock violations |
Catching
| Function | Data from | Description |
|---|---|---|
catcher_blocking(year) |
— | Blocks above average, PB/WP prevention |
catcher_throwing(year) |
— | Pop time, exchange time, CS rate, arm strength |
catcher_stance(year) |
— | One-knee vs traditional: framing, blocking, throwing |
Baserunning & Fielding
| Function | Data from | Description |
|---|---|---|
arm_strength(year) |
2020+ | Fielder throw speed by position |
baserunning(year) |
— | Total baserunning run value (XB + SB) |
basestealing(year) |
— | Stolen base run value, lead distances |
Common Parameters
| Parameter | Type | Description |
|---|---|---|
player_type |
str | "batter" or "pitcher" (where applicable) |
min_* |
int or str | Minimum threshold; "q" = qualified |
position |
str | Position filter (arm_strength): "", "RF", "SS", etc. |
pitch_type |
str | Pitch type filter (pitch_movement): "FF", "SL", etc. |
Multi-Season Queries
Most functions have a _range(start_year, end_year) variant:
from savant_extras import pitch_tempo_range, arm_strength_range
# Compare pitch tempo pre/post pitch clock
df = pitch_tempo_range(2022, 2024)
# 5 years of arm strength
df = arm_strength_range(2020, 2024)
Demo App
MLB Bat Tracking Dashboard — built with savant-extras (source)
Why savant-extras?
| Leaderboard | pybaseball | savant-extras |
|---|---|---|
| Bat tracking (date range) | Full season only | Custom date ranges |
| Pitch tempo | Not supported | ✅ |
| Arm strength | Not supported | ✅ |
| Batted ball profile | Not supported | ✅ |
| Home runs | Not supported | ✅ |
| Pitch movement | Not supported | ✅ |
| Swing & take | Not supported | ✅ |
| Year-to-year changes | Not supported | ✅ |
| Pitcher arm angle | Not supported | ✅ |
| Running game (pitcher) | Not supported | ✅ |
| Catcher blocking | Not supported | ✅ |
| Catcher throwing | Not supported | ✅ |
| Catcher stance | Not supported | ✅ |
| Baserunning run value | Not supported | ✅ |
| Basestealing run value | Not supported | ✅ |
| Timer infractions | Not supported | ✅ |
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file savant_extras-0.3.0.tar.gz.
File metadata
- Download URL: savant_extras-0.3.0.tar.gz
- Upload date:
- Size: 15.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bccdce1843bd6c8dba4d329e6c576dafde29d3e3754b56feb7dbbfbe6c109391
|
|
| MD5 |
6c6553b167934adf606f9c83d1cf758b
|
|
| BLAKE2b-256 |
457df5db7bb0cb67e8a3e9635b632b69648fa949515eeb386c6e66fc4c5601d5
|
Provenance
The following attestation bundles were made for savant_extras-0.3.0.tar.gz:
Publisher:
publish.yml on yasumorishima/savant-extras
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
savant_extras-0.3.0.tar.gz -
Subject digest:
bccdce1843bd6c8dba4d329e6c576dafde29d3e3754b56feb7dbbfbe6c109391 - Sigstore transparency entry: 979624005
- Sigstore integration time:
-
Permalink:
yasumorishima/savant-extras@1e3d58e0a72dcf7b26f0e5338bc1fb0058149816 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/yasumorishima
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1e3d58e0a72dcf7b26f0e5338bc1fb0058149816 -
Trigger Event:
release
-
Statement type:
File details
Details for the file savant_extras-0.3.0-py3-none-any.whl.
File metadata
- Download URL: savant_extras-0.3.0-py3-none-any.whl
- Upload date:
- Size: 22.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a41ffb243de7595f472c2c353a41e5bba3ff59c3122751b2173f3afaeb7fa401
|
|
| MD5 |
8b97158830e3babcc8b26768dc2e13dd
|
|
| BLAKE2b-256 |
f825d43fb269d2efbe9173ef256bb10943e5d9200df8c756fb3554af2a9409e0
|
Provenance
The following attestation bundles were made for savant_extras-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on yasumorishima/savant-extras
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
savant_extras-0.3.0-py3-none-any.whl -
Subject digest:
a41ffb243de7595f472c2c353a41e5bba3ff59c3122751b2173f3afaeb7fa401 - Sigstore transparency entry: 979624065
- Sigstore integration time:
-
Permalink:
yasumorishima/savant-extras@1e3d58e0a72dcf7b26f0e5338bc1fb0058149816 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/yasumorishima
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1e3d58e0a72dcf7b26f0e5338bc1fb0058149816 -
Trigger Event:
release
-
Statement type: