1 ATP Tennis Goat

Sports fans frequently argue over who is the greatest of all time or the \(GOAT\) of their sport. Elo ratings are one of the more objective ways to measure a player’s ability. The Elo rating gives us a number of a player’s strength over time in a way that accounts for the ability of the players they have won and lost to over their career.

Because Elo ratings are constantly changing as players complete matches, we can consider using a player’s peak Elo (maximum yet achieved) to assess their overall highest career achievement to date. Doing this for all players in the Open Era, who ranks in the top \(10\) of all time? We can use the atp_elo dataset of the deuce package to answer this question. Although the dataset includes surface-specific Elo, we will use the all-surface overall Elo ratings for this analysis.

peak_atp_elo <- atp_elo %>%
  group_by(player_name) %>%
  dplyr::summarise(
    peak.elo = max(overall_elo, na.rm = T)
  )

peak_atp_elo <- peak_atp_elo[
  order(
    peak_atp_elo$peak.elo, 
    decreasing = T
  ),][1:10,]

peak_atp_elo$tour <- "ATP"
peak_elo <- peak_atp_elo
peak_elo$player_name <- factor(
  peak_elo$player_name, 
  levels = peak_elo$player_name[
    order(peak_elo$peak.elo)
  ], order = T
) 

peak_elo %>%
  filter(tour == "ATP") %>%
  ggplot(aes(y = peak.elo, x = player_name)) +  # , colour = tour
  # facet_wrap(~ tour, scales = "free") + 
  geom_point(size = 2) +
  scale_color_tableau() + 
  theme_gdocs() + theme(legend.position = "none") + 
  scale_y_continuous("Career Peak Elo") + 
  scale_x_discrete("") + 
  coord_flip()

On this measure, Novak Djokovic has achieved the highest Elo of any male player in the Open Era.

2 Djokovic–Nadal rivalry

One of the modern-day tennis rivalry is between Novak Djokovic and Rafael Nadal. Basic facts about the rivalry:

rivalry <- fetch_head_to_head("Novak Djokovic", "Rafael Nadal")
DT::datatable(rivalry)

In a rivalry that is now 56 matches strong, who has had the most wins overall and by surface?

results[order(results$wins, decreasing = T),] %>%
  knitr::kable()
player surface wins losses
Novak Djokovic Hard 20 7
Rafael Nadal Clay 18 7
Novak Djokovic Clay 7 18
Rafael Nadal Hard 7 20
Novak Djokovic Grass 2 2
Rafael Nadal Grass 2 2
results %>% 
  group_by(player) %>%
  dplyr::summarise(
    wins = sum(wins)
  ) %>%
  knitr::kable()
player wins
Novak Djokovic 29
Rafael Nadal 27