#' @title Advanced Stats
#' @description gets advanced stats from nba.com api
#' @keywords nba.com api advanced stats
#' @importFrom magrittr %>%
#' @export get_clean_stats_combined
#' @export get_player_stats_from_nba_api
#' @examples
#' get_advanced_stats_api(season='2018-19')
#helper function for cleaning data
my_char <- function(x) {
out <- (ifelse(x %in% c('player_name','team_abbreviation','cfparams'),FALSE,TRUE))
return (out)
}
get_player_stats_from_nba_api <- function(season, base_url = 'https://stats.nba.com/stats/leaguedashplayerstats?',
game_scope = '', player_experience = '', player_position = '', starter_bench = '', measure_type = 'Advanced',
per_mode = 'PerGame', plus_minus = 'N', pace_adjust = 'N', rank = 'N',
season_type = 'Regular%20Season', outcome = '', location = '', month = 0, season_segment = '', date_from = '',
date_to = '', opp_team_id = 0, vs_conf = '', vs_div = '', game_segment = '', period = 0, last_n_games = 0
) {
nba_stats_url <- paste0(base_url,
'GameScope=', game_scope,
'&PlayerExperience=', player_experience,
'&PlayerPosition=', player_position,
'&StarterBench=', starter_bench,
'&MeasureType=', measure_type,
'&PerMode=', per_mode,
'&PlusMinus=', plus_minus,
'&PaceAdjust=', pace_adjust,
'&Rank=', rank,
'&Season=', season,
'&SeasonType=', season_type,
'&Outcome=', outcome,
'&Location=', location,
'&Month=', month,
'&SeasonSegment=', season_segment,
'&DateFrom=', date_from,
'&DateTo=', date_to,
'&OpponentTeamID=', opp_team_id,
'&VsConference=', vs_conf,
'&VsDivision=', vs_div,
'&GameSegment=', game_segment,
'&Period=', period,
'&LastNGames=', last_n_games
)
print(nba_stats_url)
nba_stats_json <-
curl::curl(nba_stats_url) %>%
jsonlite::fromJSON()
nba_stats_df <- data.frame(nba_stats_json$resultSets$rowSet[[1]], stringsAsFactors = F)
names(nba_stats_df) = tolower(nba_stats_json$resultSets$headers[[1]])
return(nba_stats_df)
}
get_clean_stats_combined <- function(season, base_url = 'https://stats.nba.com/stats/leaguedashplayerstats?',
game_scope = '', player_experience = '', player_position = '', starter_bench = '',
per_mode = 'PerGame', plus_minus = 'N', pace_adjust = 'N', rank = 'N',
season_type = 'Regular%20Season', outcome = '', location = '', month = 0, season_segment = '', date_from = '',
date_to = '', opp_team_id = 0, vs_conf = '', vs_div = '', game_segment = '', period = 0, last_n_games = 0) {
base_stats <- get_player_stats_from_nba_api(season = season, game_scope = game_scope,
player_experience = player_experience, player_position = player_position,
starter_bench = starter_bench, measure_type = 'Base', per_mode = per_mode,
plus_minus = plus_minus, pace_adjust = pace_adjust, rank = rank,
season_type = season_type, outcome = outcome, location = location,
month = month, season_segment = season_segment, date_from = date_from,
date_to = date_to, opp_team_id = opp_team_id, vs_conf = vs_conf, vs_div = vs_div,
game_segment = game_segment, period = period, last_n_games = last_n_games)
advanced_stats <- get_player_stats_from_nba_api(season = season, game_scope = game_scope,
player_experience = player_experience, player_position = player_position,
starter_bench = starter_bench, measure_type = 'Advanced', per_mode = per_mode,
plus_minus = plus_minus, pace_adjust = pace_adjust, rank = rank,
season_type = season_type, outcome = outcome, location = location,
month = month, season_segment = season_segment, date_from = date_from,
date_to = date_to, opp_team_id = opp_team_id, vs_conf = vs_conf, vs_div = vs_div,
game_segment = game_segment, period = period, last_n_games = last_n_games)
if (per_mode == 'PerGame') {
advanced_stats <- advanced_stats %>%
dplyr::select(-dplyr::matches('rank'))
base_stats <- base_stats %>%
dplyr::select(-fgm, -fga, -fg_pct) %>%
dplyr::select(-dplyr::matches('rank'))
} else if (per_mode == 'Totals') {
advanced_stats <- advanced_stats %>%
dplyr::select(-dplyr::matches('rank')) %>%
dplyr::rename(min_pg = min)
base_stats <- base_stats %>%
dplyr::select(-dplyr::matches('rank')) %>%
dplyr::rename(tot_min = min)
} else if (per_mode %in% c('MinutesPer','Per48','Per36','PerMinute','PerPossession','PerPlay',
'Per100Possessions','Per100Plays')) {
advanced_stats <- advanced_stats %>%
dplyr::select(-dplyr::matches('rank')) %>%
dplyr::rename(min_pg = min, fgm_tot = fgm, fga_tot = fga)
base_stats <- base_stats %>%
dplyr::select(-dplyr::matches('rank')) %>%
dplyr::rename(min_tot = min)
}
common_names <- names(base_stats)[names(base_stats) %in% names(advanced_stats)]
stats_merged_df <- base_stats %>%
dplyr::inner_join(advanced_stats, by=common_names)
stats_merged_df <- stats_merged_df %>%
dplyr::mutate_if(sapply(names(stats_merged_df),my_char),as.numeric)
return (stats_merged_df)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.