pyhockey.skater_games
Main module for returning game-by-game statistics for each skater.
1""" 2Main module for returning game-by-game statistics for each skater. 3""" 4import polars as pl 5 6from pyhockey.util.query_table import query_table 7from pyhockey.util.data_disclaimer import print_data_disclaimer 8 9 10# Define custom type for inputs into our queries 11type QueryValue = str | int | float | list[str] | list[int] | list[float] 12 13 14def skater_games(season: int | list[int] | None = None, 15 name: str | list[str] | None = None, 16 team: str | list[str] = 'ALL', 17 start_date: str | None = None, 18 end_date: str | None = None, 19 situation: str | None= None, 20 quiet: bool = False) -> pl.DataFrame: 21 """ Returns skater-level game-by-game statistics. 22 23 Primary function for returning game-by-game skater statistics. Accepts one or multiple teams, 24 one or multiple skater names, one or multiple seasons, or alternatively, a start- and end-date 25 for which to return game-by-game metrics. 26 27 Args: 28 29 season: 30 Either one or a list of seasons for which to return all games. Disregarded if both 31 start_date and end_date are also provided, defaults to None 32 name: 33 Either one or a list of names for which to return stats. Can be a full name, partial 34 name, or just first/last name. defaults to None. 35 team: 36 Either one or a list of teams, provided in 3-letter acronyms, defaults to 'ALL' 37 start_date: 38 A date from which to return all games on and after that date, in YYYY-MM-DD format, 39 defaults to None 40 end_date: 41 A date from which to return all games before and on that date, in YYYY-MM-DD format, 42 defaults to None 43 situation: 44 Either None (so return everything), or one of 'all', '5on5', '4on5', or '5on4', 45 defaults to None 46 quiet: 47 If set to True, don't print the data disclaimer, defaults to False 48 49 Returns: 50 51 A polars DataFrame containing all of the requested data. 52 53 Raises: 54 55 ValueError: An input of either incorrect value or type was provided. 56 """ 57 58 if not season and not start_date and not end_date: 59 raise ValueError("No values provided for 'season', 'start_date', or 'end_date'. Must "\ 60 "provide value for at least one of these.") 61 62 qualifers: dict[str, str] = {} 63 64 if start_date: 65 qualifers['start_date'] = start_date 66 if end_date: 67 qualifers['end_date'] = end_date 68 69 column_mapping: dict[str, QueryValue] = { 70 'season': season, 71 'name': name, 72 'team': team, 73 'situation': situation 74 } 75 76 results: pl.DataFrame = query_table(table='skater_games', column_mapping=column_mapping, 77 qualifiers=qualifers, order_by=['team', 'gameDate']) 78 79 if not quiet: 80 print_data_disclaimer(source='NaturalStatTrick') 81 82 return results
type QueryValue =
str | int | float | list[str] | list[int] | list[float]
def
skater_games( season: int | list[int] | None = None, name: str | list[str] | None = None, team: str | list[str] = 'ALL', start_date: str | None = None, end_date: str | None = None, situation: str | None = None, quiet: bool = False) -> polars.dataframe.frame.DataFrame:
15def skater_games(season: int | list[int] | None = None, 16 name: str | list[str] | None = None, 17 team: str | list[str] = 'ALL', 18 start_date: str | None = None, 19 end_date: str | None = None, 20 situation: str | None= None, 21 quiet: bool = False) -> pl.DataFrame: 22 """ Returns skater-level game-by-game statistics. 23 24 Primary function for returning game-by-game skater statistics. Accepts one or multiple teams, 25 one or multiple skater names, one or multiple seasons, or alternatively, a start- and end-date 26 for which to return game-by-game metrics. 27 28 Args: 29 30 season: 31 Either one or a list of seasons for which to return all games. Disregarded if both 32 start_date and end_date are also provided, defaults to None 33 name: 34 Either one or a list of names for which to return stats. Can be a full name, partial 35 name, or just first/last name. defaults to None. 36 team: 37 Either one or a list of teams, provided in 3-letter acronyms, defaults to 'ALL' 38 start_date: 39 A date from which to return all games on and after that date, in YYYY-MM-DD format, 40 defaults to None 41 end_date: 42 A date from which to return all games before and on that date, in YYYY-MM-DD format, 43 defaults to None 44 situation: 45 Either None (so return everything), or one of 'all', '5on5', '4on5', or '5on4', 46 defaults to None 47 quiet: 48 If set to True, don't print the data disclaimer, defaults to False 49 50 Returns: 51 52 A polars DataFrame containing all of the requested data. 53 54 Raises: 55 56 ValueError: An input of either incorrect value or type was provided. 57 """ 58 59 if not season and not start_date and not end_date: 60 raise ValueError("No values provided for 'season', 'start_date', or 'end_date'. Must "\ 61 "provide value for at least one of these.") 62 63 qualifers: dict[str, str] = {} 64 65 if start_date: 66 qualifers['start_date'] = start_date 67 if end_date: 68 qualifers['end_date'] = end_date 69 70 column_mapping: dict[str, QueryValue] = { 71 'season': season, 72 'name': name, 73 'team': team, 74 'situation': situation 75 } 76 77 results: pl.DataFrame = query_table(table='skater_games', column_mapping=column_mapping, 78 qualifiers=qualifers, order_by=['team', 'gameDate']) 79 80 if not quiet: 81 print_data_disclaimer(source='NaturalStatTrick') 82 83 return results
Returns skater-level game-by-game statistics.
Primary function for returning game-by-game skater statistics. Accepts one or multiple teams, one or multiple skater names, one or multiple seasons, or alternatively, a start- and end-date for which to return game-by-game metrics.
Args:
season:
Either one or a list of seasons for which to return all games. Disregarded if both
start_date and end_date are also provided, defaults to None
name:
Either one or a list of names for which to return stats. Can be a full name, partial
name, or just first/last name. defaults to None.
team:
Either one or a list of teams, provided in 3-letter acronyms, defaults to 'ALL'
start_date:
A date from which to return all games on and after that date, in YYYY-MM-DD format,
defaults to None
end_date:
A date from which to return all games before and on that date, in YYYY-MM-DD format,
defaults to None
situation:
Either None (so return everything), or one of 'all', '5on5', '4on5', or '5on4',
defaults to None
quiet:
If set to True, don't print the data disclaimer, defaults to False
Returns:
A polars DataFrame containing all of the requested data.
Raises:
ValueError: An input of either incorrect value or type was provided.