Resultados de La Liga con rstats. Estudiando gráficamente rachas

1 Mar


Vamos a crear un gráfico con #rstats que recoja los resultados de La Liga equipo a equipo para poder estudiar rachas e «intuir» como puede ser la segunda vuelta. Además, este ejercicio es un buen uso del paquete worldfootballR y la función de ggplot geom_tile además me va a servir para animarme esta segunda vuelta para que el Español no sufra. La web que vamos a emplear para el trabajo es FBREF. Empezamos.

Librerías necesarias

library(worldfootballR)
library(tidyverse)
library(stringr)
library(rvest)
library(lubridate)

Extracción y preparación de datos

partidos <- fb_match_results(country = "ESP", gender = "M", season_end_year = 2023, tier = "1st")

partidos2 <- partidos %>% filter(Date<=today()) %>%
  mutate(gana=case_when(
  HomeGoals == AwayGoals ~ 'Empate',
  HomeGoals > AwayGoals ~ 'Local',
  HomeGoals < AwayGoals ~ 'Visitante',
  TRUE ~ 'Imposible'),
  Jornada=paste0('Jor.',sprintf("%02d",as.numeric(Wk))))

Podéis ver que la función de worldfootballR que se está usando es fb_match_results, creo que es la más rápida y cómoda, pero como estos datos están pensada para representar datos en una web es necesario cocinar un poco y preparar un conjunto de datos por Equipo-Jornada-Resultado

partidos2_local <- partidos2 %>% mutate(Equipo = Home,
                                        Resultado = case_when(
                                          gana == 'Empate' ~ 'Empate',
                                          gana == 'Local' ~ 'Gana',
                                          TRUE ~ 'Pierde' )) %>% select(Equipo, Jornada, Resultado)

partidos2_visitante <- partidos2 %>% mutate(Equipo = Away,
                                            Resultado = case_when(
                                              gana == 'Empate' ~ 'Empate',
                                              gana == 'Visitante' ~ 'Gana',
                                              TRUE ~ 'Pierde' )) %>% select(Equipo, Jornada, Resultado)

partidos3 <- rbind.data.frame(partidos2_local,partidos2_visitante) %>%
  arrange(Jornada)

Probablemente se pueda hacer mejor, más fácil no creo.

Gráfico final

En este caso es necesario establecer el orden en la liga para entender mejor el gráfico por ello realizamos de nuevo una extracción sobre FBref para determinar la posición de cada equipo en La Liga.

ub ="https://fbref.com/en/comps/12/La-Liga-Stats"
liga=read_html(ub,as.data.frame=TRUE,stringAsFactors=TRUE) %>%
  html_nodes("table") %>% .[[1]] %>% html_table(fill=TRUE) %>%
  select(Squad, Rk) %>% rename(Equipo = Squad)

partidos3<-partidos3 %>% left_join(liga)

Ya están todos los elementos necesario para realizar el gráfico con el que comienza esta entrada.

ggplot(partidos3, aes(x = Jornada, y = reorder(Equipo,-Rk), fill = Resultado)) +
  geom_tile(color = "white",alpha=0.7, lwd = 1.25) +
  scale_fill_manual(values = c("orange","#4DDB1C","#F12F1C"),
                    name = "Resultado",
                    guide = guide_legend(reverse = T))+
  coord_fixed() +
  labs(title="Racha La Liga 22/23",
       x ="Jornada", y = "Equipo")

Como comentaba al principio es un buen ejemplo de uso de geom_tile para la creación de este tipo de gráficos. En cuanto a lo que se puede ver, ojo al Espanyol