knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "man/figures/README-", out.width = "100%" )
~~Buyer~~ Coder beware: As of Dec 2021, this package is undergoing major re-development. The next version will introduce many improvements but also breaking changes.
The wnblr
package contains a range of game statistics from the Australian Women's National Basketball League (WNBL):
box_scores
: Team-level box scores, with all your usual basketball box score metrics like points scored, field goals made / attempted, free throws made / attempted, rebounds, turnovers, and the like.box_scores_detailed
: Player-level box scores.pbp
: Play-by-play data.shots
: Shots data, primarily containing XY shot locations.Install the development version of wnblr
from GitHub with:
# install.packages("remotes") remotes::install_github("jacquietran/wnblr")
There's lots to work with - for example, here's a quick look at the shots
data:
# Load libraries library(wnblr) library(dplyr) # Frequency of shot types attempted in the 2020 season shots %>% filter(season == 2020) %>% select(sub_type, shot_result) %>% group_by(sub_type) %>% summarise(n = n()) %>% ungroup() %>% arrange(desc(n))
With a little bit of elbow grease, you can move neatly from data to plot, too:
# Load libraries library(ggplot2) library(showtext) # Tidy data magbegor <- box_scores_detailed %>% filter(scoreboard_name == "E. Magbegor") %>% select(season, contains("field_goals")) %>% group_by(season) %>% summarise( `Field goals made` = round(mean(field_goals_made), 1), `Field goals attempted` = round(mean(field_goals_attempted), 1), `Field goal %` = round(mean(field_goals_percentage), 1)) %>% ungroup() %>% tidyr::pivot_longer( cols = c(`Field goals made`, `Field goals attempted`, `Field goal %`), names_to = "key", values_to = "value") %>% mutate( key = factor( key, levels = c("Field goals made", "Field goals attempted", "Field goal %"))) # Import Google Fonts font_add_google(name = "Patua One", family = "patua") font_add_google(name = "Source Sans Pro", family = "source") # Build plot showtext_auto() # After building the plot, run showtext_auto(FALSE) to close off ggplot( magbegor, aes(x = season, y = value, group = key, fill = key)) + facet_wrap(~key, nrow = 1, scales = "free_y") + geom_bar(stat = "identity") + scale_fill_manual(values = c("#FFC53D", "#688d3a", "#0E4735")) + labs( title = "Ezi Magbegor: WNBL shooting averages from 2017-2020", x = "Season", y = NULL, caption = "Data source: {wnblr} & WNBL.com.au | Plot: @jacquietran") + ggdark::dark_mode() + theme( legend.position = "none", text = element_text( colour = "#FFFFFF", family = "source", size = 48), plot.title = element_text( family = "patua", margin=margin(0,0,15,0)), plot.caption = element_text(margin=margin(15,0,0,0)))
showtext_auto(FALSE)
Game data is missing or wildly incomplete for some games in most of the seasons from 2014/2015 to 2020, as documented here. If anyone has leads on where to find live stats from the games listed as "missing", feel free to log an issue and let me know!
Courtesy of @PythonUnicornCoder - thank you!!
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.