8  CB Rankings

8.1 Packages Needed

library(tidyverse)
library(DT)

8.2 Load CB Players

cbs <- read.csv("data/players.csv") %>% filter(position == "CB")

8.3 Load Necessary CSV Files

defense <- read.csv("data/defense_summary.csv") %>% 
  select(player_id, missed_tackle_rate, qb_rating_against, catch_rate) # miss %, pass_rtg, comp %
cov_defense <- read.csv("data/defense_coverage_scheme.csv") %>% 
  select(player_id, man_grades_coverage_defense, zone_grades_coverage_defense) # man_grade, zone_grade

8.4 Combine Datasets

cb_values <- cbs %>% 
  left_join(defense, by = c("id" = "player_id")) %>% 
  drop_na()
cb_values <- cb_values %>% 
  left_join(cov_defense, by = c("id" = "player_id")) %>% 
  drop_na()
cb_values <- cb_values %>% 
  rename(miss_p = missed_tackle_rate, pass_rtg = qb_rating_against, comp_p = catch_rate, man_grade = man_grades_coverage_defense, zone_grade = zone_grades_coverage_defense) %>%
  select(-id)

8.5 Get Mean Values (for testing)

mean(cb_values$miss_p)
[1] 11.43256
mean(cb_values$pass_rtg)
[1] 75.34651
mean(cb_values$comp_p)
[1] 55.19302
mean(cb_values$man_grade)
[1] 66.14884
mean(cb_values$zone_grade)
[1] 71.61395

8.6 Create Rating Function

get_cb_ratings <- function(input_df) {
  df_cb_copy <- input_df %>% mutate(
    man_grade = round(pmax(pmin((man_grade-55) / 3, 10), 0), 2),  # 55-85, mean 70
    zone_grade = round(pmax(pmin((zone_grade-55) / 3, 10), 0), 2), # 55-85, mean 70
    comp_p = round(pmax(pmin(((100-comp_p)-25)/4, 10), 0), 2), # 75-35, mean 55
    pass_rtg = round(pmax(pmin(((200-pass_rtg)-100)/6, 10), 0), 2), # 100-40, mean 70
    miss_p = round(pmax(pmin(((100-miss_p)-80)/1.5, 10), 0), 2), # 20-5, mean 12.5
  )
  
  return(df_cb_copy)
}

8.7 Create Final Dataset

cb_ratings <- get_cb_ratings(cb_values) %>% 
  mutate(total = rowSums(select(.,-name, -position, -team, -rank))) %>% 
  arrange(-total) #%>%
  #mutate(pos_rank_aft = row_number())

8.8 Display Ratings

datatable(cb_ratings)