Quadro de medalhas das olímpiadas de 2024 no R

Pedro Ruas
3 min readAug 6, 2024

--

2024 Olympics medal table in R

As olímpiadas geram muitos dados sobre os países e atletas. Com o interesse de trabalhar com os dados relacionados ao quadro de medalhas, desenvolvi um código para baixar ele direto no R.

A forma que escolhi para pegar esses dados foi por web scraping. Usaremos o pacote “rvest” para isso e os dados serão retirados do site da BBC. No site oficial das olímpiadas esse mesmo código não funcionou, mas os dados são os mesmos.

Primeiro instalamos e ativamos os pacotes:

install.packages("rvest")
install.packages("tidyverse")
install.packages("dplyr")
install.packages("tidyr")
install.packages("stringr")

library(tidyverse)
library(rvest)
library(dplyr)
library(tidyr)
library(stringr)

Depois salvo o link na variável “url”. Utilizo a função “read_html” para conseguir ler o site e a salvo na variável “page”.

url <- "https://www.bbc.com/sport/olympics/paris-2024/medals"

page <- rvest::read_html(url)

Agora a função “html_nodes” vai ler os dados da página, especificamos o argumento “table” para buscar as tabelas dessa página. “html_table” transforma esses dados em um data frame.

medal_data <- page %>%
rvest::html_nodes("table") %>%
html_table()

Os dados salvos na variável “medal_data” aparecerão dessa forma que está na imagem. No caso, ela demonstra que há apenas uma tabela no site.

Agora, basta selecionar essa tabela e salvar em uma variável.

data_medalhas <- medal_data[[1]]

Pronto, já temos a tabela de medalhas atualizada

Para separar o nome do país da sigla, uso a função mutate para criar as colunas Sigla e Nome junto com “str_extract” para retirar as 3 primeiras letras maiúsculas e “str_remove” para retirar as 3 primeiras.

data_medalhas <- data_medalhas %>%
mutate(
Sigla = str_extract(Country, "^[A-Z]{3}"),
Nome = str_remove(Country, "^[A-Z]{3}")
)

Algumas siglas e nomes de países ficarão errados, pois, em alguns casos a sigla tem apenas duas letras. Para isso, corrigi manualmente os países que ficaram errados.

data_medalhas <- data_medalhas %>%
mutate(
Sigla = case_when(
Sigla == "USU" ~ "US",
Sigla == "HKH" ~ "HK",
Sigla == "GBG" ~ "GB",
Sigla == "NZN" ~ "NZ",
Sigla == "SAS" ~ "SA",
TRUE ~ Sigla
),
Nome = case_when(
Nome == "nited States" ~ "United States",
Nome == "ong Kong" ~ "Hong Kong",
Nome == "reate Britain" ~ "Great Britain",
Nome == "Zealand" ~ "New Zealand",
Nome == "outh Africa" ~ "South Africa",
TRUE ~ Nome
)
)

Renomeio algumas colunas de forma simultânea.

data_medalhas <- dplyr::rename_with(
data_medalhas,
.fn = ~c("Rank", "Country", "Ouro", "Prata", "Bronze", "Total", "Sigla", "País")
)

Por final, excluo a coluna Country utilizando a função “select”.

data_medalhas <- data_medalhas %>%
select(-Country)

A tabela fica assim:

--

--