R/sco_bet_plot.R

Defines functions sco_bet_ou_plot

Documented in sco_bet_ou_plot

#' Analyse input of odds: how is the input odds compared to data from this season?

#' @param year_input input as character in years of seasons, eg. "yyyy"
#' @param league_input sco_pl (Premiership) or sco_ch (Championship)
#' @param team_input selected_team
#'
#' @importFrom rlang .data
#' @importFrom stats reorder
#'
#' @return a ggplot2 object
#' @export
#'
sco_bet_ou_plot <- function(year_input,league_input, team_input) {

  year_input <- "2324"
  league_input <- "sco_l1"
  team_input <- "Queen of Sth"

    sco_acquire(year_input, league_input) %>% dplyr::select(.data$date,.data$hometeam,.data$awayteam,
                        under_open = .data$b365.2.5.1,
                        under_closes = .data$b365c.2.5.1,
                        over_open = .data$b365.2.5,
                        over_closes = .data$b365c.2.5) %>%
      tidyr::pivot_longer(., cols = c(-.data$date,-.data$hometeam,-.data$awayteam), names_to = "type") %>%
    dplyr::glimpse() %>%
        dplyr::filter(.data$hometeam == team_input | .data$awayteam == team_input) %>%
      dplyr::filter(.data$hometeam == team_input & grepl("hometeam",.data$type)
                    | .data$awayteam == team_input & grepl("awayteam",.data$type) |
                      grepl("over",.data$type) | grepl("under",.data$type)) %>%
      dplyr::mutate(type2 = dplyr::if_else(grepl("over",.data$type),"over 2.5 goals","under 2.5 goals")) %>%
      dplyr::mutate(type = dplyr::if_else(grepl("open",.data$type),"open","closes")) %>%
      tidyr::pivot_wider(., id_cols = c(.data$date,.data$hometeam,.data$awayteam,.data$type2), names_from = .data$type, values_from = .data$value) -> data_man

    # may be used to print later
    suppressMessages(dplyr::left_join(
      data_man %>%
        dplyr::mutate(dummy = 1) %>%
        dplyr::group_by(odds = .data$type2) %>%
        dplyr::summarise(pct_matches_decreasing_odds = sum(.data$dummy[.data$open>.data$closes])/sum(.data$dummy),
                         pct_matches_increasing_odds = sum(.data$dummy[.data$open<.data$closes])/sum(.data$dummy),
                         pct_matches_same_odds = sum(.data$dummy[.data$open==.data$closes])/sum(.data$dummy)),
      data_man %>%
        dplyr::filter(.data$open>.data$closes) %>%
        dplyr::group_by(odds = .data$type2) %>%
        dplyr::summarise(decreasing_odds_change = mean(.data$open)-mean(.data$closes)))) -> temp

    # plot data
    ggplot2::ggplot() +
      ggplot2::geom_segment(data = data_man,
                            ggplot2::aes(x = .data$open,
                                         xend = .data$closes,
                                         y    = stats::reorder(paste0(.data$hometeam,"-",.data$awayteam," (",.data$date,")"), lubridate::ymd(.data$date)),
                                         yend = stats::reorder(paste0(.data$hometeam,"-",.data$awayteam," (",.data$date,")"), lubridate::ymd(.data$date))),
                            size = 3, colour = '#D0D0D0') +
      ggplot2::facet_wrap(~.data$type2, scales = "free_x") +
      ggplot2::geom_point(data = data_man,
                          ggplot2::aes(x  = .data$open,
                                       color = "open",
                                       y = reorder(paste0(.data$hometeam,"-",.data$awayteam," (",.data$date,")"), lubridate::ymd(.data$date))),
                          size = 2) +

      ggplot2::geom_point(data = data_man,
                          ggplot2::aes(x  = .data$closes,
                                       color = "closes",
                                       y      = stats::reorder(paste0(.data$hometeam,"-",.data$awayteam," (",.data$date,")"), lubridate::ymd(.data$date))),
                                       size = 2) +
      ggplot2::scale_colour_manual(values = c('#BD1118','darkgreen')) +
      ggplot2::scale_shape_manual("", values = c(4,19), guide = F) +
      ggplot2::theme_bw() +
      ggplot2::theme(panel.background = ggplot2::element_rect(fill = '#F8F8F2'),
                     plot.background = ggplot2::element_rect(fill = '#F8F8F2')) +
      ggplot2::theme(legend.title = ggplot2::element_blank(), legend.position = "top") +
    ggplot2::labs(x = "", y = "", title = "Odds movement", subtitle = team_input)



}
steffenbank/scoccer documentation built on Feb. 4, 2024, 3:30 p.m.