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.