073: Quadrant percentages

gt
Published

January 28, 2024

Data

Code
# Function to update conference abbreviations to be more friendly 
conf_name_lookup <- function(conf_var) {
  conf_var = dplyr::case_match(
    conf_var,
    "B12" ~ "Big 12",
    "BE" ~ "Big East",
    "P12" ~ "Pac-12",
    "B10" ~ "Big Ten",
    "Amer" ~ "American",
    "SB" ~ "Sun Belt",
    "Slnd" ~ "Southland",
    "BW" ~ "Big West",
    "SC" ~ "Southern",
    "AE" ~ "America East",
    "BSth" ~ "Big South",
    "ASun" ~ "Atlantic Sun",
    "Pat" ~ "Patriot",
    "Horz" ~ "Horizon",
    "BSky" ~ "Big Sky",
    "OVC" ~ "Ohio Valley",
    "Sum" ~ "Summit",
    "A10" ~ "Atlantic 10",
    "MWC" ~ "Mountain West",
    "MVC" ~ "Missouri Valley",
    "NEC" ~ "Northeast",
    "MAC" ~ "Mid-American",
    "MAAC" ~ "Metro Atlantic",
    "ind" ~ "Independent",
    conf_var ~ conf_var
  )
}

# Grab conference records
conf_data <-
    cbbdata::cbd_torvik_game_stats(year = 2024, type = "conf")

net_up <-
    cbbdata::cbd_all_metrics() |> 
    dplyr::mutate(
        conf = dplyr::case_match(
            team,
            "Tarleton St." ~ "WAC",
            "Utah Tech" ~ "WAC",
            "St. Thomas" ~ "Sum",
            "UC San Diego" ~ "BW",
            "Bellarmine" ~  "ASun",
            "Queens" ~  "ASun",
            "Le Moyne" ~ "NEC",
            "Lindenwood" ~ "OVC",
            "Texas A&M Commerce" ~ "Slnd",
            "Southern Indiana" ~ "OVC",
            "Stonehill" ~ "NEC",
            team ~ conf
        )
    ) |>
    dplyr::mutate(conf = conf_name_lookup(conf))

team_net <- net_up |>
    dplyr::select(team, net = net_rank, conf)

conf_records <- conf_data |>
    cbbdata::cbd_add_net_quad() |>
    dplyr::mutate(delta = abs(pts_scored - opp_pts)) |>
    dplyr::select(-net,-conf) |> # drop these for easier joining 
    dplyr::left_join(team_net, by = "team") |>
    dplyr::group_by(conf) |>
    dplyr::summarise(
        games_played = dplyr::n(),
        avg_net = mean(unique(net)),
        home_wins = sum(result == "W" & location == "H"),
        home_loss = sum(result == "L" & location == "H"),
        home_win_pct = (home_wins / (home_wins + home_loss)),
        avg_diff = mean(delta),
        q1 = sum(quad == "Quadrant 1") / games_played,
        q2 = sum(quad == "Quadrant 2") / games_played,
        q3 = sum(quad == "Quadrant 3") / games_played,
        q4 = sum(quad == "Quadrant 4") / games_played,
    ) |>
    dplyr::arrange(avg_net)

# Grab non-conference records 

non_con_data <-
    cbbdata::cbd_torvik_game_stats(year = 2024, type = "nc")

non_con_records <- non_con_data |>
    dplyr::filter(conf != "ind") |> 
    cbbdata::cbd_add_net_quad() |>
    dplyr::select(-net,-conf) |> # drop these for easier joining 
    dplyr::left_join(team_net, by = "team") |>
    dplyr::group_by(conf) |>
    dplyr::summarise(
        games_played = dplyr::n(),
        avg_net = mean(unique(net)),
        q1_rec = paste0(sum(quad == "Quadrant 1" & result == "W"), "-",
                        sum(quad == "Quadrant 1" & result == "L")),
        q1 = sum(quad == "Quadrant 1") / games_played,
        q2_rec = paste0(sum(quad == "Quadrant 2" & result == "W"), "-",
                        sum(quad == "Quadrant 2" & result == "L")),
        q2 = sum(quad == "Quadrant 2") / games_played,
        q3_rec = paste0(sum(quad == "Quadrant 3" & result == "W"), "-",
                        sum(quad == "Quadrant 3" & result == "L")),
        q3 = sum(quad == "Quadrant 3") / games_played,
        q4_rec = paste0(sum(quad == "Quadrant 4" & result == "W"), "-",
                        sum(quad == "Quadrant 4" & result == "L")),
        q4 = sum(quad == "Quadrant 4") / games_played,
    ) |>
    dplyr::arrange(avg_net)

real_nc <- non_con_records |>  
    dplyr::select(conf, nc_q1 = q1, nc_q2 = q2, 
                  nc_q3 = q3, nc_q4 = q4) 

quad_table <- conf_records |> 
  dplyr::select(conf, con_q1 = q1, con_q2 = q2, 
                con_q3 = q3, con_q4 = q4) |> 
  dplyr::left_join(real_nc, by = "conf") |> 
  dplyr::select(conf, con_q1, nc_q1, 
                con_q2, nc_q2, con_q3, nc_q3, 
                con_q4, nc_q4) 

GT Table

Code
quad_table |> 
    gt::gt() |>
    gt::cols_label(
        conf = "",
        con_q1 = "CON",
        con_q2 = "CON",
        con_q3 = "CON",
        con_q4 = "CON",
        nc_q1 = "NON-CON", 
        nc_q2 = "NON-CON", 
        nc_q3 = "NON-CON", 
        nc_q4 = "NON-CON"
    ) |>
    gt::fmt_percent(columns = -c(conf), decimals = 1) |>
    gt::tab_spanner(label = "Quad 1",
                    columns = c(con_q1, nc_q1)) |>
    gt::tab_spanner(label = "Quad 2",
                    columns = c(con_q2, nc_q2)) |>
    gt::tab_spanner(label = "Quad 3",
                    columns = c(con_q3, nc_q3)) |>
    gt::tab_spanner(label = "Quad 4",
                    columns = c(con_q4, nc_q4)) |>
    gtExtras::gt_hulk_col_numeric(columns = -c(conf)) |>
    gtExtras::gt_theme_dot_matrix() |> 
    gt::tab_header(title = "Percentage of Conference and Non-Conference Games in each Quadrant by League", 
                   subtitle = "Shows percentage of conference and non-conference games in each quadrant because teams play different schedules. ") |>
    gt::tab_source_note(source_note = "Bless your chart | data: cbbdata | January 28, 2024") |>
    gt::tab_options (
        source_notes.font.size = gt::px(10),
        row.striping.background_color = '#EEEEEE',
        table.font.size = gt::px(12),
        column_labels.text_transform = 'uppercase'
    ) |>
    gt::tab_style(style = list(gt::cell_borders(
        sides = c("left"),
        color = "#c1c1c1",
        weight = gt::px(2)
    )),
    locations = list(gt::cells_body(
        columns = -c(conf)
    ))) -> quad_gt 

gtExtras::gtsave_extra(quad_gt,
                       filename = "quad_table.png",
                       vheight = 875,
                       vwidth = 650)

quad_gt
Percentage of Conference and Non-Conference Games in each Quadrant by League
Shows percentage of conference and non-conference games in each quadrant because teams play different schedules.
Quad 1 Quad 2 Quad 3 Quad 4
CON NON-CON CON NON-CON CON NON-CON CON NON-CON
Big 12 66.7% 15.6% 18.8% 13.4% 14.6% 15.1% 0.0% 55.9%
Big Ten 43.8% 25.3% 35.2% 7.1% 21.1% 15.6% 0.0% 51.9%
SEC 47.9% 21.0% 30.2% 17.1% 18.8% 19.9% 3.1% 42.0%
Big East 54.9% 24.2% 27.5% 14.2% 3.9% 18.3% 13.7% 43.3%
ACC 35.6% 22.6% 34.1% 12.2% 24.2% 17.7% 6.1% 47.6%
Pac-12 34.8% 22.5% 36.6% 14.7% 28.6% 20.2% 0.0% 42.6%
Mountain West 41.0% 18.3% 17.9% 11.9% 24.4% 27.8% 16.7% 42.1%
Atlantic 10 13.2% 14.3% 31.1% 13.7% 34.9% 23.1% 20.8% 48.9%
American 16.3% 14.0% 23.1% 18.3% 30.8% 22.6% 29.8% 45.1%
Missouri Valley 16.7% 12.4% 16.7% 10.7% 37.5% 23.1% 29.2% 53.7%
WCC 20.3% 17.6% 18.8% 16.8% 10.9% 20.2% 50.0% 45.4%
Ivy 6.2% 9.4% 18.8% 15.6% 31.2% 30.2% 43.8% 44.8%
Southern 0.0% 10.6% 21.2% 12.5% 42.5% 26.9% 36.2% 50.0%
WAC 4.0% 21.6% 11.0% 10.8% 40.0% 23.5% 45.0% 44.1%
Big West 0.0% 16.7% 9.0% 13.0% 41.0% 22.2% 50.0% 48.1%
CUSA 0.0% 15.5% 11.1% 7.3% 38.9% 31.8% 50.0% 45.5%
Big South 0.0% 14.2% 4.7% 16.0% 42.2% 19.8% 53.1% 50.0%
Sun Belt 4.0% 14.8% 10.3% 10.6% 27.0% 31.0% 58.7% 43.7%
CAA 0.0% 14.9% 13.2% 11.8% 36.8% 28.0% 50.0% 45.3%
Horizon 0.0% 24.8% 5.0% 8.9% 45.0% 22.8% 50.0% 43.6%
America East 0.0% 14.3% 10.7% 12.5% 39.3% 19.6% 50.0% 53.6%
Big Sky 0.0% 17.4% 9.2% 10.1% 35.5% 30.3% 55.3% 42.2%
Mid-American 0.0% 18.3% 8.5% 9.5% 25.5% 33.3% 66.0% 38.9%
Summit 0.0% 16.3% 0.0% 8.7% 40.6% 26.9% 59.4% 48.1%
Metro Atlantic 0.0% 11.3% 0.0% 17.0% 31.0% 22.6% 69.0% 49.1%
Atlantic Sun 0.0% 20.1% 0.0% 16.0% 26.2% 25.0% 73.8% 38.9%
Southland 4.4% 23.2% 5.9% 18.2% 10.3% 19.2% 79.4% 39.4%
Ohio Valley 0.0% 20.6% 4.5% 8.4% 8.0% 22.4% 87.5% 48.6%
Patriot 0.0% 9.6% 0.0% 17.4% 10.0% 29.6% 90.0% 43.5%
Northeast 0.0% 14.0% 0.0% 14.0% 10.9% 24.3% 89.1% 47.7%
MEAC 0.0% 12.6% 0.0% 15.5% 2.9% 34.0% 97.1% 37.9%
SWAC 0.0% 38.2% 0.0% 19.8% 4.1% 19.8% 95.9% 22.1%
Bless your chart | data: cbbdata | January 28, 2024