-
Notifications
You must be signed in to change notification settings - Fork 0
/
wbb_predictive_metrics.R
58 lines (53 loc) · 1.92 KB
/
wbb_predictive_metrics.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
library(tidyverse)
library(wehoop)
library(cbbdata)
current_year <- 2024
box <- load_wbb_team_box()
teams <- cbd_teams()
conferences <- cbd_torvik_ratings(year = current_year) %>%
select(team, conf)
team_key <- teams %>%
left_join(conferences, by = c("common_team" = "team")) %>%
select(espn_id, team = common_team, conf) %>%
mutate(espn_id = as.numeric(espn_id))
team_stats <- box %>%
group_by(team_id) %>%
summarise(games = n(),
wins = sum(team_winner),
losses = games - wins,
fgm = sum(field_goals_made),
fga = sum(field_goals_attempted),
fg3m = sum(three_point_field_goals_made),
fg3a = sum(three_point_field_goals_attempted),
fg2m = fgm - fg3m,
fg2a = fga - fg3a,
ftm = sum(free_throws_made),
fta = sum(free_throws_attempted),
to = sum(turnovers),
stl = sum(steals),
blk = sum(blocks),
trb = sum(total_rebounds),
orb = sum(offensive_rebounds),
drb = trb - orb,
pts = sum(team_score),
ptsa = sum(opponent_team_score),
win_pct = wins / games,
fg_pct = fgm / fga,
fg2_pct = fg2m / fg2a,
fg3_pct = fg3m / fg3a,
ft_pct = ftm / fta,
poss = (fga-orb) + to + 0.44 * fta,
ppp = pts / poss,
pppa = ptsa / poss,
tempo = poss / games,
eff = ppp - pppa,
fg3_rate = fg3a / fga,
ft_rate = fta / fga,
to_rate = to / (fga + 0.44 * fta + to),
.groups = "drop") %>%
left_join(team_key, by = c("team_id" = "espn_id")) %>%
select(team, team_id, conf, everything()) %>%
filter(!is.na(conf))
team_stats_adv = team_stats %>%
mutate(record = paste(wins, losses, sep = "-")) %>%
select(team, team_id, conf, record, tempo, eff, fg2_pct, fg3_pct, fg3_rate, ft_rate, to_rate)