Key Takeaways:
library(tidyverse)
library(jsonlite)
library(janitor)
library(dplyr)
library(reactable)
library(reactablefmtr)
pbp_url <- "https://api.pbpstats.com/get-game-logs/nba?Season=2022-23&SeasonType=Regular%2BSeason&EntityId=1610612750&EntityType=Team"
pbp_wolves <- read_json(pbp_url)
wolves <- pbp_wolves[["multi_row_table_data"]] %>%
bind_rows() %>%
clean_names()
wolves_wl <- wolves %>%
select(points,
date)
pbp_url_2 <- "https://api.pbpstats.com/get-game-logs/nba?Season=2022-23&SeasonType=Regular%2BSeason&EntityId=1610612750&EntityType=Opponent"
pbp_wolves_opp <- read_json(pbp_url_2)
wolves_opp <- pbp_wolves_opp[["multi_row_table_data"]] %>%
bind_rows() %>%
clean_names()
wolves_bl <- right_join(wolves, wolves_opp, by = 'date') %>%
mutate(outcome = points.x - points.y) %>%
select(date,
opponent.x,
outcome) %>%
filter( outcome < -9)
avgs_from_losses <- inner_join(wolves_bl, wolves_opp, by = 'date') %>%
replace( is.na(.),0) %>%
summarise(avg_at_rim_fga = mean(at_rim_fga),
avg_corner3fga = mean(corner3fga),
avg_arc3fga = mean(arc3fga),
avg_fg3a = mean(fg3a),
avg_points = mean(points),
avg_fta = mean(fta),
avg_assists = mean(assists),
avg_at_rim_assists = mean(at_rim_assists),
avg_assisted2s_pct = mean(assisted2s_pct),
avg_assisted3s_pct = mean(assisted3s_pct),
avg_fg3a_pct = mean(fg3a_pct),
avg_pace = mean(pace),
avg_seconds_per_poss_off = mean(seconds_per_poss_off),
avg_seconds_per_poss_def = mean(seconds_per_poss_def),
avg_at_rim_frequency = mean(at_rim_frequency),
avg_at_rim_pct_assisted = mean(at_rim_pct_assisted),
avg_corner3frequency = mean(corner3frequency),
avg_arc3frequency = mean(arc3frequency),
avg_shot_quality_avg = mean(shot_quality_avg),
avg_shooting_fouls_drawn_pct = mean(shooting_fouls_drawn_pct))
pbp_url_3 <- "https://api.pbpstats.com/get-totals/nba?Season=2022-23&SeasonType=Regular%2BSeason&StartType=All&Type=Opponent"
pbp_team <- read_json(pbp_url_3)
team <- pbp_team[["multi_row_table_data"]]%>%
bind_rows() %>%
clean_names() %>%
filter(name == "MIN")
team_comp <- team %>%
mutate( rim_fga_per_game = at_rim_fga/games_played,
corner3fga_per_game = corner3fga/games_played,
arc3fga_per_game = arc3fga/games_played,
fg3a_per_game = fg3a/games_played,
points_per_game = points/games_played,
fta_per_game = fta/games_played,
assists_per_game = assists/games_played,
at_rim_assists_per_game = at_rim_assists/games_played) %>%
select(rim_fga_per_game,
corner3fga_per_game,
arc3fga_per_game,
fg3a_per_game,
points_per_game,
fta_per_game,
assists_per_game,
at_rim_assists_per_game,
assisted2s_pct,
assisted3s_pct,
fg3a_pct,
pace,
seconds_per_poss_off,
seconds_per_poss_def,
at_rim_frequency,
at_rim_pct_assisted,
corner3frequency,
arc3frequency,
shot_quality_avg,
shooting_fouls_drawn_pct)
cbind(team_comp, avgs_from_losses) %>%
mutate(rim_fga_diff = avg_at_rim_fga - rim_fga_per_game,
corner3fga_diff = avg_corner3fga - corner3fga_per_game,
arc3fga_diff = avg_arc3fga - arc3fga_per_game,
fg3a_diff = avg_fg3a - fg3a_per_game,
point_diff = avg_points - points_per_game,
fta_diff = avg_fta - fta_per_game,
assists_diff = avg_assists - assists_per_game,
at_rim_assists_diff = avg_at_rim_assists - at_rim_assists_per_game,
assisted2s_pct_diff = avg_assisted2s_pct - assisted2s_pct,
assisted3s_pct_diff = avg_assisted3s_pct - assisted3s_pct,
fg3a_pct_diff = avg_fg3a_pct - fg3a_pct,
pace_diff = avg_pace - pace,
seconds_per_poss_off_diff = avg_seconds_per_poss_off - seconds_per_poss_off,
seconds_per_poss_def_diff = avg_seconds_per_poss_def - seconds_per_poss_def,
at_rim_frequency_diff = avg_at_rim_frequency - at_rim_frequency,
at_rim_pct_assisted_diff = avg_at_rim_pct_assisted - at_rim_pct_assisted,
corner3frequency_diff = avg_corner3frequency - corner3frequency,
arc3frequency_diff = avg_arc3frequency - arc3frequency,
shot_quality_avg_diff = avg_shot_quality_avg - shot_quality_avg,
shooting_fouls_drawn_pct_diff = avg_shooting_fouls_drawn_pct - shooting_fouls_drawn_pct) %>%
select(rim_fga_diff,
corner3fga_diff,
arc3fga_diff,
fg3a_diff,
point_diff,
fta_diff,
assists_diff,
at_rim_assists_diff,
assisted2s_pct_diff,
assisted3s_pct_diff,
fg3a_pct_diff,
pace_diff,
seconds_per_poss_off_diff,
seconds_per_poss_def_diff,
at_rim_frequency_diff,
at_rim_pct_assisted_diff,
corner3frequency_diff,
arc3frequency_diff,
shot_quality_avg_diff,
shooting_fouls_drawn_pct_diff) %>%
mutate_at(vars(rim_fga_diff,
corner3fga_diff,
arc3fga_diff,
fg3a_diff,
point_diff,
fta_diff,
assists_diff,
at_rim_assists_diff,
assisted2s_pct_diff,
assisted3s_pct_diff,
fg3a_pct_diff,
pace_diff,
seconds_per_poss_off_diff,
seconds_per_poss_def_diff,
at_rim_frequency_diff,
at_rim_pct_assisted_diff,
corner3frequency_diff,
arc3frequency_diff,
shot_quality_avg_diff,
shooting_fouls_drawn_pct_diff), funs(round(.,4))) %>%
mutate(
'Rim FGA Diff' = rim_fga_diff,
'Corner 3 FGA Diff' = corner3fga_diff,
'Arc 3 FGA Diff' = arc3fga_diff,
'3 FGA Diff' = fg3a_diff,
'Point Diff' = point_diff,
'FTA Diff' = fta_diff,
'Assists Diff' = assists_diff,
'At Rim Assists Diff' = at_rim_assists_diff,
'Assisted 2s Pct Diff' = assisted2s_pct_diff,
'Assisted 3s Pct Diff' = assisted3s_pct_diff,
'3 FGA Pct Diff' = fg3a_pct_diff,
'Pace Diff' = pace_diff,
'Seconds Per Poss (Off) Diff' = seconds_per_poss_off_diff,
'Seconds Per Poss (Def) Diff' = seconds_per_poss_def_diff,
'At Rim Frequency Diff' = at_rim_frequency_diff,
'At Rim Pct Assisted Diff' = at_rim_pct_assisted_diff,
'Corner 3 Frequency Diff' = corner3frequency_diff,
'Arc 3 Frequency Diff' = arc3frequency_diff,
'Shot Quality Avg Diff' = shot_quality_avg_diff,
'Shooting Fouls Drawn Pct Diff' = shooting_fouls_drawn_pct_diff
) %>%
select('Rim FGA Diff',
'Corner 3 FGA Diff',
'Arc 3 FGA Diff',
'3 FGA Diff',
'Point Diff',
'FTA Diff',
'Assists Diff',
'At Rim Assists Diff',
'Assisted 2s Pct Diff',
'Assisted 3s Pct Diff',
'3 FGA Pct Diff',
'Pace Diff',
'Seconds Per Poss (Off) Diff',
'Seconds Per Poss (Def) Diff',
'At Rim Frequency Diff',
'At Rim Pct Assisted Diff',
'Corner 3 Frequency Diff',
'Arc 3 Frequency Diff',
'Shot Quality Avg Diff',
'Shooting Fouls Drawn Pct Diff') %>%
reactable( theme = espn()) %>%
add_title("Difference between avgs from losses by 10 or more points and season avgs") %>%
add_subtitle("'23 season")
assists <- inner_join(wolves_bl, wolves_opp, by = 'date') %>%
replace( is.na(.),0) %>%
summarise(
avg_two_pt_assists = mean(two_pt_assists),
avg_three_pt_assists = mean(three_pt_assists),
avg_assist_points = mean(assist_points),
avg_pts_assisted2s = mean(pts_assisted2s),
avg_pts_assisted3s = mean(pts_assisted3s),
avg_arc3assists = mean(arc3assists),
avg_corner3assists = mean(corner3assists),
avg_at_rim_assists = mean(at_rim_assists),
avg_short_mid_range_assists = mean(short_mid_range_assists),
avg_long_mid_range_assists = mean(long_mid_range_assists)
) %>%
select(avg_pts_assisted2s,
avg_pts_assisted3s,
avg_two_pt_assists,
avg_three_pt_assists,
avg_assist_points,
avg_arc3assists,
avg_corner3assists,
avg_at_rim_assists,
avg_short_mid_range_assists,
avg_long_mid_range_assists)
season_assists <- team %>%
mutate(pts_assisted2s_per_game = pts_assisted2s/games_played,
pts_assisted3s_per_game = pts_assisted3s/games_played,
two_pt_assists_per_game = two_pt_assists/games_played,
three_pt_assists_per_game = three_pt_assists/games_played,
assist_points_per_game = assist_points/games_played,
arc3assists_per_game = arc3assists/games_played,
corner3assists_per_game = corner3assists/games_played,
at_rim_assists_per_game = at_rim_assists/games_played,
short_mid_range_assists_per_game = short_mid_range_assists/games_played,
long_mid_range_assists_per_game = long_mid_range_assists/games_played) %>%
select(pts_assisted2s_per_game,
pts_assisted3s_per_game,
two_pt_assists_per_game,
three_pt_assists_per_game,
assist_points_per_game,
arc3assists_per_game,
corner3assists_per_game,
at_rim_assists_per_game,
short_mid_range_assists_per_game,
long_mid_range_assists_per_game)
cbind(assists, season_assists) %>%
mutate(pts_assisted2s_diff = avg_pts_assisted2s - pts_assisted2s_per_game,
pts_assisted3s_diff = avg_pts_assisted3s- pts_assisted3s_per_game,
two_pts_assisted_diff = avg_two_pt_assists - two_pt_assists_per_game,
three_pts_assisted_diff = avg_three_pt_assists - three_pt_assists_per_game,
assist_points_diff = avg_assist_points - assist_points_per_game,
arc3assists_diff = avg_arc3assists - arc3assists_per_game,
corner3assists_diff = avg_corner3assists - corner3assists_per_game,
at_rim_assists_diff = avg_at_rim_assists - at_rim_assists_per_game,
short_mid_range_assists_diff = avg_short_mid_range_assists - short_mid_range_assists_per_game,
long_mid_range_assists_diff = avg_long_mid_range_assists - long_mid_range_assists_per_game) %>%
select(pts_assisted2s_diff,
pts_assisted3s_diff,
two_pts_assisted_diff,
three_pts_assisted_diff,
assist_points_diff,
arc3assists_diff,
corner3assists_diff,
at_rim_assists_diff,
short_mid_range_assists_diff,
long_mid_range_assists_diff) %>%
mutate_at(vars(pts_assisted2s_diff,
pts_assisted3s_diff,
two_pts_assisted_diff,
three_pts_assisted_diff,
assist_points_diff,
arc3assists_diff,
corner3assists_diff,
at_rim_assists_diff,
short_mid_range_assists_diff,
long_mid_range_assists_diff), funs(round(.,4))) %>%
mutate(
'Pts Assisted 2s Diff' = pts_assisted2s_diff,
'Pts Assisted 3s Diff' = pts_assisted3s_diff,
'Two Pts Assisted Diff' = two_pts_assisted_diff,
'Three Pts Assisted Diff' = three_pts_assisted_diff,
'Assist Points Diff' = assist_points_diff,
'Arc 3 Assists Diff' = arc3assists_diff,
'Corner 3 Assists Diff' = corner3assists_diff,
'At Rim Assists Diff' = at_rim_assists_diff,
'Short Mid Range Assists Diff' = short_mid_range_assists_diff,
'Long Mid Range Assists Diff' = long_mid_range_assists_diff
) %>%
select(
'Pts Assisted 2s Diff',
'Pts Assisted 3s Diff',
'Two Pts Assisted Diff',
'Three Pts Assisted Diff',
'Assist Points Diff',
'Arc 3 Assists Diff',
'Corner 3 Assists Diff',
'At Rim Assists Diff',
'Short Mid Range Assists Diff',
'Long Mid Range Assists Diff'
) %>%
reactable( theme = espn()) %>%
add_title("Assist Focus") %>%
add_subtitle("Difference between avgs from losses by 10 or more points and season avgs")