Premier League teams home and away

Post description
Author

João Afonso Poester-Carvalho

Published

August 2, 2024

Premier League teams home and away

library(tidyverse)
library(ggbump)

soccer <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2023/2023-04-04/soccer21-22.csv')

away_vic <- soccer %>%
  group_by(AwayTeam) %>%
  summarise(vic_away = sum(FTR == "A")) %>%
  arrange(desc(vic_away)) %>%
  rownames_to_column(var = "vic_away_rank") %>%
  rename(team = AwayTeam) %>%
  select(-vic_away)
  

home_vic <- soccer %>%
  group_by(HomeTeam) %>%
  summarise(vic_home = sum(FTR == "H")) %>%
  arrange(desc(vic_home)) %>%
  rownames_to_column(var = "vic_home_rank") %>%
  rename(team = HomeTeam) %>%
  select(-vic_home)

victories <- merge(home_vic, away_vic, by = "team") %>%
  mutate(
    vic_home_rank = as.numeric(vic_home_rank),
    vic_away_rank = as.numeric(vic_away_rank)
  ) %>%
  arrange(vic_home_rank) %>%
  pivot_longer(
    cols = c("vic_home_rank", "vic_away_rank"),
    names_to = "home_away",
    values_to = "rank"
  ) %>%
  mutate(
    home_away_enc = as.integer(fct_rev(factor(home_away)))
  )

victories %>%
  ggplot(aes(home_away_enc, rank, col = team)) +
  geom_point(shape = "|", stroke = 5) +
  ggbump::geom_bump(linewidth = 1.5) +
  geom_text(
    data = victories %>% filter(home_away_enc == 1),
    aes(label = team),
    hjust = 1,
    nudge_x = -0.1,
    size = 4,
    fontface = "bold"
  ) +
  geom_text(
    data = victories %>% filter(home_away_enc == 2),
    aes(label = team),
    hjust = 0,
    nudge_x = 0.1,
    size = 4,
    fontface = "bold"
  ) +
  scale_y_reverse(breaks = 1:20) +
  scale_x_continuous(breaks = 1:2, labels = c("Victories Home Rank", "Victories Away Rank")) +
  coord_cartesian(xlim = c(0.5, 2.5)) +
  theme_minimal() +
  labs(
    title = "Best defenders vs best visitors in Premier League 21/22",
    caption = "2023-04-04 Tidytuesday data"
  ) +
  theme(
    axis.title = element_blank(),
    
    plot.background = element_rect(fill = "#f5ede4", colour = NA),
    plot.margin = margin(t = 2, b =4, l = 5, r = 5, unit = "mm"),
    
    panel.grid = element_blank(),
    
    legend.position = "none"
  )