Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion pybaseball/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@
statcast_batter_percentile_ranks,
statcast_batter_pitch_arsenal,
statcast_batter_bat_tracking,
statcast_batter_run_value
statcast_batter_run_value,
statcast_abs
)
from .statcast_running import statcast_sprint_speed, statcast_running_splits
from .statcast_fielding import (
Expand Down
33 changes: 29 additions & 4 deletions pybaseball/statcast_batter.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,10 +134,10 @@ def statcast_batter_run_value(year: int) -> pd.DataFrame():

ARGUMENTS:
year(int): year data is retrieved for.
Data can only be retrieved for a single year at a time
Data is can only be retrieved for a single year at a time

Returns:
data(pd.DataFrame): clean dataframe from Savant Return
data(pd.DataFrame): dataframe from Savant Return

"""
try:
Expand All @@ -148,5 +148,30 @@ def statcast_batter_run_value(year: int) -> pd.DataFrame():
return data
except HTTPException as error:
raise ConnectionError(f"URL {error} is unreachable")
finally:
raise KeyError(f"An Error Occurred in Acquiring the Data")


@cache.df_cache()
def statcast_abs(
challengeType: str, level: str, gameType: str, year: int
) -> pd.DataFrame():
"""
Retrieves Automated Ball-Strike Challenge (ABS) leaderboard
ARGUMENTS:
challengeType (enum): batter, batting-team, catcher, pitcher, etc
level (enum): mlb, aaa
gameType (enum): spring, regular, playoff
year: year of request
Returns:
data(pd.DataFrame): dataframe from Savant ABS Return

"""
try:
url = f"https://baseballsavant.mlb.com/leaderboard/abs-challenges?challengeType={challengeType}&level={level}&gameType={gameType}&year={year}&csv=True"
res = requests.get(url, timeout=None).content
data = pd.read_csv(io.StringIO(res.decode("utf-8")))
data = sanitize_statcast_columns(data)
return data
except HTTPException as error:
raise ConnectionError(f"URL {error} is unreachable")


10 changes: 10 additions & 0 deletions tests/integration/pybaseball/test_statcast_batter.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
statcast_batter_pitch_arsenal,
statcast_batter_bat_tracking,
statcast_batter_run_value,
statcast_abs,
)


Expand Down Expand Up @@ -84,3 +85,12 @@ def test_statcast_batter_run_value() -> None:
assert not result.empty

assert len(result) > 0


def test_statcast_abs() -> None:
result: pd.DataFrame = statcast_abs("batting-team", "mlb", "spring", 2026)

assert result is not None
assert not result.empty

assert len(result) > 0
Loading