This document contains all the needed R code to reproduce the results described in the paper A Basketball Big Data Platform for Box Score and Play-by-Play Data, that has been submitted for publication. It presents the dashboard available at https://www.uv.es/vivigui/AppPBP.html. This dashboard belongs to the platform available at https://www.uv.es/vivigui/basketball_platform.html.
# Firstly, load BAwiR and other packages that will be used in the paper:
library(BAwiR) # 1.3
library(tidyverse) # 1.3.2
The following data file is an illustration of the type of play-by-play data available from the Spanish ACB league.
df0 <- acb_vbc_cz_pbp_2223
day_num <- unique(acb_vbc_cz_pbp_2223$day)
game_code <- unique(acb_vbc_cz_pbp_2223$game_code)
Do some first data processing:
acb_games_2223_sl <- acb_vbc_cz_sl_2223 %>%
filter(period == "1C")
df1 <- do_prepare_data(df0, day_num,
acb_games_2223_sl, acb_games_2223_info,
game_code)
# Lineups and sub-lineups:
data_li <- do_lineup(df1, day_num, game_code, "Valencia Basket", FALSE)
data_subli <- do_sub_lineup(data_li, 4)
# Timeouts:
df1_to <- do_prepare_data_to(df0, TRUE, acb_games_2223_info, acb_games_2223_coach)
data_to <- do_time_out_success(df1_to, day_num, game_code,
"Casademont Zaragoza_Porfirio Fisac", FALSE)
# Periods:
df0_per <- df0
rm_overtime <- TRUE # Decide if remove overtimes.
if (rm_overtime) {
df0 <- df0 %>%
filter(!grepl("PR", period)) %>%
mutate(period = as.character(period))
}
team_sel <- "Valencia Basket" # "Casademont Zaragoza"
period_sel <- "1C" # "4C"
player_sel <- "Webb" # "Mara"
df1 <- df0 %>%
filter(team == team_sel) %>%
filter(!action %in% c("D - Descalificante - No TL", "Altercado no TL"))
df2 <- df1 %>%
filter(period == period_sel)
df0_inli_team <- acb_vbc_cz_sl_2223 %>%
filter(team == team_sel, period == period_sel)
df3 <- do_prepare_data(df2, day_num,
df0_inli_team, acb_games_2223_info,
game_code)
data_per <- do_stats_per_period(df3, day_num, game_code, team_sel, period_sel, player_sel)
# Clutch time:
data_clutch <- do_clutch_time(acb_vbc_cz_pbp_2223)
# Free throw fouls:
data_ft_comm <- do_ft_fouls(df0, "comm")
data_ft_rec <- do_ft_fouls(df0, "rec")
# Offensive fouls:
data_off_comm <- do_offensive_fouls(df0, "comm")
data_off_rec <- do_offensive_fouls(df0, "rec")
# Offensive rebounds:
df1_or <- do_prepare_data_or(df0, TRUE, acb_games_2223_info)
data_or <- do_reb_off_success(df1_or, day_num, game_code, "Valencia Basket", FALSE)
## R version 4.4.2 (2024-10-31)
## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 24.04.1 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so; LAPACK version 3.12.0
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=C
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## time zone: Etc/UTC
## tzcode source: system (glibc)
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] rmarkdown_2.29
##
## loaded via a namespace (and not attached):
## [1] digest_0.6.37 R6_2.5.1 fastmap_1.2.0 xfun_0.49
## [5] maketools_1.3.1 cachem_1.1.0 knitr_1.49 htmltools_0.5.8.1
## [9] buildtools_1.0.0 lifecycle_1.0.4 cli_3.6.3 sass_0.4.9
## [13] jquerylib_0.1.4 compiler_4.4.2 sys_3.4.3 tools_4.4.2
## [17] evaluate_1.0.1 bslib_0.8.0 yaml_2.3.10 jsonlite_1.8.9
## [21] rlang_1.1.4