
Long_mid_range_fgm = sum(long_mid_range_fgm, na.rm = TRUE), Long_mid_range_fga = sum(long_mid_range_fga, na.rm = TRUE), Short_mid_range_accuracy = short_mid_range_fgm / short_mid_range_fga, Short_mid_range_fgm = sum(short_mid_range_fgm, na.rm = TRUE), Summarise(short_mid_range_fga = sum(short_mid_range_fga, na.rm = TRUE), LongMidRangeFGA, LongMidRangeFGM, LongMidRangeAccuracy, LongMidRangePctAssisted) %>% ShortMidRangeFGA, ShortMidRangeFGM, ShortMidRangeAccuracy, ShortMidRangePctAssisted, Select(Name, EntityId, Minutes, FG2A, FG3A, I’m not going to go line by line here, but here’s the code for how to re-create the other chart from this week’s newsletter, which showed players career FG% on short and long midrange shots during the postseason. Ggsave("RidgeLinePlot.png", w = 6, h = 6, dpi = 300) Subtitle = "Minimum 50 Uninterrupted FTA | 2020 - 2021 Regular Season", Title = "Real Time Elapsed Between Consecutive Free Throw Attempts", Labs(x = "Real Time Elapsed (In Seconds)", # add axis titles, plot title, subtitle, and caption Plot.title = element_text(face = 'bold')) + Ggplot(aes(x = elp, y = fct_reorder(playerNameI, avgtime))) + You can fiddle with the bandwidth option to make the distributions smoother (higher bandwidth value) or less smooth (smaller bandwidth value) if you want.

But first, we need to get a list of all the game IDs from this season, which we can get with package to draw little neon-colored distributions for each player and then order them by their average time elapsed between free throws. The fastest way to get all the data is with a function. To make our chart we need the play-by-play data for every game from the regular season. Here’s a snapshot of what it should look like:

Json_resp <- fromJSON(content(res, "text"))ĭf <- ame(json_resp]]) Res <- GET(url = url, add_headers(.headers=headers))

The following code uses the headers we specified and extracts the play-by-play data and stores it in a dataframe called df. `X-NewRelic-ID` = 'VQECWF5UChAHUlNTBwgBVw=', `Accept` = 'application/json, text/plain, */*', But first, we need to specify some headers in advance so that when we make a request to the NBA’s API we don’t get timed out ( h/t Ryan Davis ). To get the data in more traditional format, like a dataframe, we just need to run a few lines of code in R. The data, like most stuff on, is stored in JSON format.
