# library(cfbscrapR)
library(tidyverse)
off_TD = c(
"Passing Touchdown",
"Rushing Touchdown",
"Field Goal Good",
"Pass Reception Touchdown",
"Fumble Recovery (Own) Touchdown",
"Punt Touchdown",
"Kickoff Touchdown"
)
def_TD = c(
"Blocked Punt Touchdown",
"Fumble Return Touchdown",
"Defensive 2pt Conversion",
"Interception Return Touchdown",
"Safety",
"Missed Field Goal Return Touchdown",
"Punt Touchdown",
"Punt Return Touchdown",
"Blocked Field Goal Touchdown",
"Fumble Recovery (Opponent) Touchdown",
"Pass Interception Return Touchdown",
"Sack Touchdown",
"Uncategorized Touchdown",
"Kickoff Return Touchdown"
)
kickoff = c(
"Kickoff",
"Kickoff Return (Offense)",
"Kickoff Return Touchdown",
"Kickoff Touchdown"
)
turnover_vec = c(
"Blocked Field Goal",
"Blocked Field Goal Touchdown",
"Blocked Punt",
"Blocked Punt Touchdown",
"Field Goal Missed",
"Missed Field Goal Return",
"Missed Field Goal Return Touchdown",
"Fumble Recovery (Opponent)",
"Fumble Recovery (Opponent) Touchdown",
"Fumble Return Touchdown",
"Defensive 2pt Conversion",
"Interception",
"Interception Return Touchdown",
"Pass Interception Return",
"Pass Interception Return Touchdown",
"Punt",
"Punt Touchdown",
"Punt Return Touchdown",
"Sack Touchdown",
"Uncategorized Touchdown"
)
df_yr <- read.csv('data-raw/pbp_stats_2019.csv')
df<-unique(df_yr$play_type)
# df <- create_wpa_naive(df)
df_yr <- df_yr %>%
# filter((play_type %in% off_TD)|
# (play_type %in% def_TD)) %>%
mutate(
epa = round(EPA, digits = 4),
ep_before = round(ep_before,digits = 4),
ep_after = round(ep_after, digits = 4),
wpa = round(wpa, digits = 4),
wpa_change = round(wpa_change, digits = 4),
wpa_base = round(wpa_base, digits = 4),
wp_before = round(wp_before, digits = 4),
wp_after = round(wp_before + wpa, digits = 4),
lead_wp_before = round(lead_wp_before, digits = 4),
def_wp_before = round(def_wp_before, digits = 4),
home_wp_before = round(home_wp_before, digits = 4),
away_wp_before = round(away_wp_before, digits = 4),
home_wp_post = round(home_wp_post, digits = 4),
away_wp_post = round(away_wp_post, digits = 4),
home_wpa = home_wp_post - home_wp_before,
home_wpa = round(home_wpa, digits = 4),
away_wpa = away_wp_post - away_wp_before,
away_wpa = round(away_wpa, digits = 4)
) %>%
select(game_id,
game_play_number,
drive_number,
down,
down_end,
distance,
distance_end,
yards_gained,
yards_to_goal,
yards_to_goal_end,
TimeSecsRem,
TimeSecsRem_end,
end_of_half,
turnover,
downs_turnover,
offense_play,
defense_play,
play_text,
play_type,
scored_pts,
EPA,
ep_before,
ep_after,
missing_yard_flag,
drive_play_number,
firstD_by_poss,
firstD_by_penalty,
firstD_by_yards,
first_by_penalty,
first_by_yards,
rush,
pass,
sack_vec,
fumble_vec,
play_after_turnover,
score_diff,
score_diff_start,
scoring_play,
ExpScoreDiff,
ExpScoreDiff_Time_Ratio,
change_of_poss,
wpa,
wpa_change,
wpa_base,
wp_before,
wp_after,
lead_wp_before,
punt_play,
kickoff_play,
def_td_play,
def_wp_before,
drive_play_number,
off_td_play,
touchdown,
turnover_vec,
downs_turnover,
home_wpa,
home_wp_before,
home_wp_post,
away_wpa,
away_wp_before,
away_wp_post,
td_play,
kickoff_tb,
kick_play,
punt_tb,
punt,
offense_score,
defense_score,
everything())
df2<-df_yr
hist(df2$epa)
df3<-df2 %>%
group_by(play_type) %>%
summarize(
epa_avg = mean(EPA, na.rm = TRUE),
ep_before_avg = mean(ep_before,na.rm = TRUE),
ep_after_avg = mean(ep_after,na.rm = TRUE),
yards_to_goal_avg = mean(yards_to_goal,na.rm = TRUE),
yards_to_goal_end_avg = mean(yards_to_goal_end,na.rm = TRUE),
scored_pts_avg = mean(scored_pts,na.rm=TRUE),
wpa_avg = mean(wpa,na.rm = TRUE),
wp_before_avg = mean(wp_before,na.rm = TRUE),
wp_after_avg = mean(wp_after,na.rm = TRUE),
plays = n()
)
write.csv(df3, 'epa_wpa_summary_by_play_type.csv', row.names = FALSE)
df3_tds <-df2 %>%
filter((play_type %in% off_TD)|
(play_type %in% def_TD)) %>%
group_by(play_type) %>%
summarize(
epa_avg = mean(EPA,na.rm = TRUE),
ep_before_avg = mean(ep_before,na.rm = TRUE),
ep_after_avg = mean(ep_after,na.rm = TRUE),
yards_to_goal_avg = mean(yards_to_goal,na.rm = TRUE),
yards_to_goal_end_avg = mean(yards_to_goal_end,na.rm = TRUE),
scored_pts_avg = mean(scored_pts,na.rm=TRUE),
wpa_avg = mean(wpa,na.rm = TRUE),
wp_before_avg = mean(wp_before,na.rm = TRUE),
wp_after_avg = mean(wp_after,na.rm = TRUE),
plays = n()
)
df3_ints <-df2 %>%
filter(play_type %in% c('Pass Interception Return Touchdown',
'Interception Return Touchdown')) %>%
select(game_id,
game_play_number,
drive_number,
down,
down_end,
distance,
distance_end,
yards_gained,
yards_to_goal,
yards_to_goal_end,
TimeSecsRem,
TimeSecsRem_end,
end_of_half,
downs_turnover,
offense_play,
defense_play,
play_text,
play_type,
scored_pts,
EPA,
ep_before,
ep_after,
missing_yard_flag,
drive_play_number,
firstD_by_poss,
firstD_by_penalty,
firstD_by_yards,
first_by_penalty,
first_by_yards,
rush,
pass,
sack_vec,
fumble_vec,
play_after_turnover,
scored_pts,
score_diff,
score_diff_start,
scoring_play,
ExpScoreDiff,
ExpScoreDiff_Time_Ratio,
change_of_poss,
wpa,
wpa_change,
wpa_base,
wp_before,
wp_after,
lead_wp_before,
punt_play,
kickoff_play,
def_td_play,
def_wp_before,
drive_play_number,
off_td_play,
touchdown,
turnover_vec,
downs_turnover,
home_wpa,
home_wp_before,
home_wp_post,
away_wpa,
away_wp_before,
away_wp_post,
td_play,
kickoff_tb,
kick_play,
punt_tb,
punt,
offense_score,
defense_score,
everything())
df3_safety <-df2 %>%
filter(play_type %in% c('Safety')) %>%
select(game_id,
game_play_number,
drive_number,
down,
down_end,
distance,
distance_end,
yards_gained,
yards_to_goal,
yards_to_goal_end,
TimeSecsRem,
TimeSecsRem_end,
end_of_half,
downs_turnover,
offense_play,
defense_play,
play_text,
play_type,
scored_pts,
EPA,
ep_before,
ep_after,
missing_yard_flag,
drive_play_number,
firstD_by_poss,
firstD_by_penalty,
firstD_by_yards,
first_by_penalty,
first_by_yards,
rush,
pass,
sack_vec,
fumble_vec,
play_after_turnover,
scored_pts,
score_diff,
score_diff_start,
scoring_play,
ExpScoreDiff,
ExpScoreDiff_Time_Ratio,
change_of_poss,
wpa,
wpa_change,
wpa_base,
wp_before,
wp_after,
lead_wp_before,
punt_play,
kickoff_play,
def_td_play,
def_wp_before,
drive_play_number,
off_td_play,
touchdown,
turnover_vec,
downs_turnover,
home_wpa,
home_wp_before,
home_wp_post,
away_wpa,
away_wp_before,
away_wp_post,
td_play,
kickoff_tb,
kick_play,
punt_tb,
punt,
offense_score,
defense_score,
everything())
df3_penalty <-df2 %>%
filter(play_type %in% c('Penalty',
'penalty')) %>%
select(game_id,
game_play_number,
drive_number,
down,
down_end,
distance,
distance_end,
yards_gained,
yards_to_goal,
yards_to_goal_end,
TimeSecsRem,
TimeSecsRem_end,
end_of_half,
downs_turnover,
offense_play,
defense_play,
play_text,
play_type,
scored_pts,
EPA,
ep_before,
ep_after,
missing_yard_flag,
drive_play_number,
firstD_by_poss,
firstD_by_penalty,
firstD_by_yards,
first_by_penalty,
first_by_yards,
rush,
pass,
sack_vec,
fumble_vec,
play_after_turnover,
scored_pts,
score_diff,
score_diff_start,
scoring_play,
ExpScoreDiff,
ExpScoreDiff_Time_Ratio,
change_of_poss,
wpa,
wpa_change,
wpa_base,
wp_before,
wp_after,
lead_wp_before,
punt_play,
kickoff_play,
def_td_play,
def_wp_before,
drive_play_number,
off_td_play,
touchdown,
turnover_vec,
downs_turnover,
home_wpa,
home_wp_before,
home_wp_post,
away_wpa,
away_wp_before,
away_wp_post,
td_play,
kickoff_tb,
kick_play,
punt_tb,
punt,
offense_score,
defense_score,
everything())
df3_fum_return <-df2 %>%
filter(play_type %in% c('Fumble Return Touchdown')) %>%
select(game_id,
game_play_number,
drive_number,
down,
down_end,
distance,
distance_end,
yards_gained,
yards_to_goal,
yards_to_goal_end,
TimeSecsRem,
TimeSecsRem_end,
end_of_half,
downs_turnover,
offense_play,
defense_play,
play_text,
play_type,
scored_pts,
EPA,
ep_before,
ep_after,
missing_yard_flag,
drive_play_number,
firstD_by_poss,
firstD_by_penalty,
firstD_by_yards,
first_by_penalty,
first_by_yards,
rush,
pass,
sack_vec,
fumble_vec,
play_after_turnover,
scored_pts,
score_diff,
score_diff_start,
scoring_play,
ExpScoreDiff,
ExpScoreDiff_Time_Ratio,
change_of_poss,
wpa,
wpa_change,
wpa_base,
wp_before,
wp_after,
lead_wp_before,
punt_play,
kickoff_play,
def_td_play,
def_wp_before,
drive_play_number,
off_td_play,
touchdown,
turnover_vec,
downs_turnover,
home_wpa,
home_wp_before,
home_wp_post,
away_wpa,
away_wp_before,
away_wp_post,
td_play,
kickoff_tb,
kick_play,
punt_tb,
punt,
offense_score,
defense_score,
everything())
df3_ints <-df2 %>%
filter(play_type %in% c('Pass Interception Return Touchdown',
'Interception Return Touchdown')) %>%
select(game_id,
game_play_number,
drive_number,
down,
down_end,
distance,
distance_end,
yards_gained,
yards_to_goal,
yards_to_goal_end,
TimeSecsRem,
TimeSecsRem_end,
end_of_half,
downs_turnover,
offense_play,
defense_play,
play_text,
play_type,
scored_pts,
EPA,
ep_before,
ep_after,
missing_yard_flag,
drive_play_number,
firstD_by_poss,
firstD_by_penalty,
firstD_by_yards,
first_by_penalty,
first_by_yards,
rush,
pass,
sack_vec,
fumble_vec,
play_after_turnover,
scored_pts,
score_diff,
score_diff_start,
scoring_play,
ExpScoreDiff,
ExpScoreDiff_Time_Ratio,
change_of_poss,
wpa,
wpa_change,
wpa_base,
wp_before,
wp_after,
lead_wp_before,
punt_play,
kickoff_play,
def_td_play,
def_wp_before,
drive_play_number,
off_td_play,
touchdown,
turnover_vec,
downs_turnover,
home_wpa,
home_wp_before,
home_wp_post,
away_wpa,
away_wp_before,
away_wp_post,
td_play,
kickoff_tb,
kick_play,
punt_tb,
punt,
offense_score,
defense_score,
everything())
df3_downs_turnovers <-df2 %>%
filter(downs_turnover==1) %>%
select(game_id,
game_play_number,
drive_number,
down,
down_end,
distance,
distance_end,
yards_gained,
yards_to_goal,
yards_to_goal_end,
TimeSecsRem,
TimeSecsRem_end,
end_of_half,
downs_turnover,
offense_play,
defense_play,
play_text,
play_type,
scored_pts,
EPA,
ep_before,
ep_after,
missing_yard_flag,
drive_play_number,
firstD_by_poss,
firstD_by_penalty,
firstD_by_yards,
first_by_penalty,
first_by_yards,
rush,
pass,
sack_vec,
fumble_vec,
play_after_turnover,
scored_pts,
score_diff,
score_diff_start,
scoring_play,
ExpScoreDiff,
ExpScoreDiff_Time_Ratio,
change_of_poss,
wpa,
wpa_change,
wpa_base,
wp_before,
wp_after,
lead_wp_before,
punt_play,
kickoff_play,
def_td_play,
def_wp_before,
drive_play_number,
off_td_play,
touchdown,
turnover_vec,
downs_turnover,
home_wpa,
home_wp_before,
home_wp_post,
away_wpa,
away_wp_before,
away_wp_post,
td_play,
kickoff_tb,
kick_play,
punt_tb,
punt,
offense_score,
defense_score,
everything())
df_inc <- df2 %>% filter(play_type == 'Pass Incompletion' & EPA>= 0)
df_blocked_punts <- df2 %>% filter(play_type == 'Blocked Punt')
df_field_goals <- df2 %>%
filter(play_type == 'Blocked Field Goal'|
play_type == 'Missed Field Goal Return'|
play_type == 'Field Goal Missed'|
play_type == 'Missed Field Goal Return Touchdown')
kickoff = c(
"Kickoff",
"Kickoff Return (Offense)",
"Kickoff Return Touchdown",
"Kickoff Touchdown"
)
df4 <- df_yr %>%
filter(play_type %in% kickoff) %>%
mutate(
wpa = round(wpa, digits = 4),
wpa_change = round(wpa_change, digits = 4),
wpa_base = round(wpa_base, digits = 4),
wp_before = round(wp_before, digits = 4),
wp_after = round(wp_before+wpa, digits = 4),
lead_wp_before = round(lead_wp_before, digits = 4),
def_wp_before = round(def_wp_before, digits = 4),
home_wp_before = round(home_wp_before, digits = 4),
away_wp_before = round(away_wp_before, digits = 4),
home_wp_post = round(home_wp_post, digits = 4),
away_wp_post = round(away_wp_post, digits = 4),
home_wpa = home_wp_post - home_wp_before,
home_wpa = round(home_wpa, digits = 4),
away_wpa = away_wp_post - away_wp_before,
away_wpa = round(away_wpa, digits = 4)
) %>%
select(game_id,
game_play_number,
drive_number,
down,
down_end,
distance,
distance_end,
yards_gained,
yards_to_goal,
yards_to_goal_end,
TimeSecsRem,
TimeSecsRem_end,
end_of_half,
downs_turnover,
offense_play,
defense_play,
play_text,
play_type,
scored_pts,
EPA,
ep_before,
ep_after,
missing_yard_flag,
drive_play_number,
firstD_by_poss,
firstD_by_penalty,
firstD_by_yards,
first_by_penalty,
first_by_yards,
rush,
pass,
sack_vec,
fumble_vec,
play_after_turnover,
score_diff,
score_diff_start,
scoring_play,
ExpScoreDiff,
ExpScoreDiff_Time_Ratio,
change_of_poss,
wpa,
wpa_change,
wpa_base,
wp_before,
wp_after,
lead_wp_before,
punt_play,
kickoff_play,
def_td_play,
def_wp_before,
drive_play_number,
off_td_play,
touchdown,
turnover_vec,
downs_turnover,
home_wpa,
home_wp_before,
home_wp_post,
away_wpa,
away_wp_before,
away_wp_post,
td_play,
kickoff_tb,
kick_play,
punt_tb,
punt,
offense_score,
defense_score,
everything())
hist(df4$wpa)
df5<-df4 %>%
group_by(play_type) %>%
summarize(
epa_avg = mean(EPA,na.rm = TRUE),
ep_before_avg = mean(ep_before,na.rm = TRUE),
ep_after_avg = mean(ep_after,na.rm = TRUE),
wpa_avg = mean(wpa,na.rm = TRUE),
wp_before_avg = mean(wp_before,na.rm = TRUE),
wp_after_avg = mean(wp_after,na.rm = TRUE),
plays = n()
)
df6 <- df_yr %>%
filter(turnover_vec == 1) %>%
mutate(
wpa = round(wpa, digits = 4),
wpa_change = round(wpa_change, digits = 4),
wpa_base = round(wpa_base, digits = 4),
wp_before = round(wp_before, digits = 4),
wp_after = round(wp_before + wpa,digits = 4),
lead_wp_before = round(lead_wp_before, digits = 4),
def_wp_before = round(def_wp_before, digits = 4),
home_wp_before = round(home_wp_before, digits = 4),
away_wp_before = round(away_wp_before, digits = 4),
home_wp_post = round(home_wp_post, digits = 4),
away_wp_post = round(away_wp_post, digits = 4),
home_wpa = home_wp_post - home_wp_before,
home_wpa = round(home_wpa, digits = 4),
away_wpa = away_wp_post - away_wp_before,
away_wpa = round(away_wpa, digits = 4)
) %>%
select(game_id,
game_play_number,
drive_number,
down,
down_end,
distance,
distance_end,
yards_gained,
yards_to_goal,
yards_to_goal_end,
TimeSecsRem,
TimeSecsRem_end,
end_of_half,
downs_turnover,
offense_play,
defense_play,
play_text,
play_type,
scored_pts,
EPA,
ep_before,
ep_after,
missing_yard_flag,
drive_play_number,
firstD_by_poss,
firstD_by_penalty,
firstD_by_yards,
first_by_penalty,
first_by_yards,
rush,
pass,
sack_vec,
fumble_vec,
play_after_turnover,
score_diff,
score_diff_start,
scoring_play,
ExpScoreDiff,
ExpScoreDiff_Time_Ratio,
change_of_poss,
wpa,
wpa_change,
wpa_base,
wp_before,
wp_after,
lead_wp_before,
punt_play,
kickoff_play,
def_td_play,
def_wp_before,
drive_play_number,
off_td_play,
touchdown,
turnover_vec,
downs_turnover,
home_wpa,
home_wp_before,
home_wp_post,
away_wpa,
away_wp_before,
away_wp_post,
td_play,
kickoff_tb,
kick_play,
punt_tb,
punt,
offense_score,
defense_score,
everything())
hist(df6$wpa)
df7<-df_yr %>%
group_by(play_type) %>%
summarize(
epa_avg = mean(EPA,na.rm = TRUE),
ep_before_avg = mean(ep_before,na.rm = TRUE),
ep_after_avg = mean(ep_after,na.rm = TRUE),
wpa_avg = mean(wpa,na.rm = TRUE),
wp_before_avg = mean(wp_before,na.rm = TRUE),
wp_after_avg = mean(wp_after,na.rm = TRUE),
plays = n()
)
df_yr_wpa <- df_yr %>%
group_by(play_type) %>%
summarize(
epa_avg = mean(EPA,na.rm = TRUE),
ep_before_avg = mean(ep_before,na.rm = TRUE),
ep_after_avg = mean(ep_after,na.rm = TRUE),
wpa_avg = mean(wpa,na.rm = TRUE),
wp_before_avg = mean(wp_before,na.rm = TRUE),
wp_after_avg = mean(wp_after,na.rm = TRUE),
plays = n()
)
df_nd <- cfb_pbp_data(year=2019, week = 3, team='Notre Dame',
season_type='regular',
epa_wpa = TRUE)
df_nd <- df_nd %>%
mutate(
wpa = round(wpa, digits = 4),
wpa_change = round(wpa_change, digits = 4),
wpa_base = round(wpa_base, digits = 4),
wp_before = round(wp_before, digits = 4),
wp_after = round(wp_before+wpa,digits = 4),
lead_wp_before = round(lead_wp_before, digits = 4),
def_wp_before = round(def_wp_before, digits = 4),
home_wp_before = round(home_wp_before, digits = 4),
away_wp_before = round(away_wp_before, digits = 4),
home_wp_post = round(home_wp_post, digits = 4),
away_wp_post = round(away_wp_post, digits = 4),
home_wpa = home_wp_post - home_wp_before,
home_wpa = round(home_wpa, digits = 4),
away_wpa = away_wp_post - away_wp_before,
away_wpa = round(away_wpa, digits = 4)
) %>%
select(game_id,
game_play_number,
drive_number,
down,
down_end,
distance,
distance_end,
yards_gained,
yards_to_goal,
yards_to_goal_end,
TimeSecsRem,
TimeSecsRem_end,
end_of_half,
downs_turnover,
offense_play,
defense_play,
play_text,
play_type,
scored_pts,
EPA,
ep_before,
ep_after,
missing_yard_flag,
drive_play_number,
firstD_by_poss,
firstD_by_penalty,
firstD_by_yards,
first_by_penalty,
first_by_yards,
rush,
pass,
sack_vec,
fumble_vec,
play_after_turnover,
score_diff,
score_diff_start,
scoring_play,
ExpScoreDiff,
ExpScoreDiff_Time_Ratio,
change_of_poss,
wpa,
wpa_change,
wpa_base,
wp_before,
wp_after,
lead_wp_before,
punt_play,
kickoff_play,
def_td_play,
def_wp_before,
drive_play_number,
off_td_play,
touchdown,
turnover_vec,
downs_turnover,
home_wpa,
home_wp_before,
home_wp_post,
away_wpa,
away_wp_before,
away_wp_post,
td_play,
kickoff_tb,
kick_play,
punt_tb,
punt,
offense_score,
defense_score,
everything())
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.