R/MapPases.R

Defines functions OptaMAParrowpass

Documented in OptaMAParrowpass

#' Esta funcion crea un mapa indicando con flechas los pases de cada jugador
#'
#' @param df Un df
#' @param home Un número que indica 1 si es local o 0 si es visitante
#' @return El mapa de calor de \code{df} y si es local \code{home}
#' @examples
#' OptaMAParrowpass(df,1)
#' OptaMAParrowpass(df,0)
#' @export
#'
#'
OptaMAParrowpass <- function(df,home){

  #Seleccionamos las columnas que nos interesan
  heat<-dplyr::select(df,type_id,team_id,outcome,keypass,assist,x,y,player_id,"2","107","123","213","home_team_id","away_team_id","140","141")
  #Cambiamos los nombres de las columnas
  names(heat)<-c("type_id","team_id","outcome","keypass","assist","x","y","player_id","a","b","c","d","e","f","g","h")

  #Convertimos a numerico los campos Factor
  heat$a <- as.numeric(as.character(heat$a))
  heat$b <- as.numeric(as.character(heat$b))
  heat$c <- as.numeric(as.character(heat$c))
  heat$d <- as.numeric(as.character(heat$d))
  heat$g <- as.numeric(as.character(heat$g))
  heat$h <- as.numeric(as.character(heat$h))

  #Gestionamos la selección del local o visitante
  if(home==1){
    heat <- dplyr::filter(heat,team_id==e)}
  else{
    heat <- dplyr::filter(heat,team_id!= e)
  }

  #Filtramos los eventos pase
  heat <- dplyr::filter(heat,type_id==1 & is.na(a) & is.na(b) & is.na(c) )

  #Nos quedamos en un df los jugadores únicos
  players<-dplyr::distinct(heat, player_id, .keep_all = FALSE)

  #Creamos un campo único con el resultado del tiro
  heat<-heat %>%
    dplyr::mutate(Tipo_Pase = case_when(
      assist==1 ~ "Asistencia",
      keypass==1  ~ "Ocasion",
      outcome==1  ~ "Finalizado",
      outcome==0  ~ "Fallado"
    )
    )

  colours<-c("Asistencia"="blue", "Fallado"="red", "Finalizado"="green","Ocasion"="yellow")


  #PAra cada jugador creamos un mapa de calor
  j=0
  player_plot <- list()
  for(i in players$player_id){
    j=j+1
    player_data<-dplyr::filter(heat,player_id==i)
    player_data<-dplyr::arrange(player_data,Tipo_Pase)
    h <- OptaMAPcampofutbol()
    p <- h +
      ggtitle(paste("\nPases de ",i)) +
      geom_segment(data=player_data,aes(x=x*106, y=y*70, xend = g*106, yend = h*70,colour=Tipo_Pase), size = 0.5,arrow = arrow(length = unit(0.03, "npc"))) +
      scale_colour_manual(values = colours)+
      #stat_density2d(data=player_data,aes(x=g*100,y=h*70,fill = ..level..,alpha=..level..), geom="polygon",show.legend = FALSE) +
      #scale_fill_gradient(low="blue", high="red",aesthetics = "fill") +
      theme(legend.position="bottom",
            legend.text = element_text(size=8),
            legend.title = element_text(size=8),
            plot.title = element_text(size = 8, face = "bold"))

    #añadimos a la lista cada gráfico
    player_plot[[j]] <- p

  }

  #llamamos a la función de pintar varios gráficos usando la lista como parámetro
  do.call(pdp::grid.arrange, player_plot)

}
Jelagmil/soccergraphR documentation built on March 6, 2020, 9:27 p.m.