Recentemente tive vontade de começar a brincar com dados de futebol, mais especificamente o que sobrou do futebol brasileiro.
Depois de uma busca bem rápida na internet, resolvi que montaria a minha própria base, até como uma forma de praticar web scraping.
Foi assim que surgiu o pacote {brasileirao}
, que reune os resultados de todas as partidas da Série A do Campeonato Brasileiro das temporadas de 2003 a 2020.
Abrem-se as cortinas e começa o espetáculo - Fiori Gigliotti, narrador esportivo brasileiro
O pacote
O pacote está disponível neste repositório. Para instalar direto do R, basta rodar o código abaixo:
remotes::install_github("williamorim/brasileirao")
Para acessar os dados das partidas, chame o objeto matches
.
library(dplyr)
library(brasileirao)
matches
## # A tibble: 7,646 × 5
## season date home score away
## <dbl> <date> <chr> <chr> <chr>
## 1 2003 2003-03-29 Athletico PR 2x0 Grêmio
## 2 2003 2003-03-29 Guarani 4x2 Vasco
## 3 2003 2003-03-30 Corinthians 0x3 Atlético MG
## 4 2003 2003-03-30 Goiás 2x2 Paysandu
## 5 2003 2003-03-30 Criciúma 2x0 Fluminense
## 6 2003 2003-03-30 Cruzeiro 2x2 São Caetano
## 7 2003 2003-03-30 Flamengo 1x1 Coritiba
## 8 2003 2003-03-30 Fortaleza 0x0 Bahia
## 9 2003 2003-03-30 Internacional 1x1 Ponte Preta
## 10 2003 2003-03-30 Juventude 2x2 São Paulo
## # … with 7,636 more rows
Para ver os dados de uma temporada, você pode usar a função filter()
, do pacote dplyr
.
matches %>%
filter(season == 2020)
## # A tibble: 380 × 5
## season date home score away
## <dbl> <date> <chr> <chr> <chr>
## 1 2020 2020-08-08 Fortaleza 0x2 Athletico PR
## 2 2020 2020-08-08 Coritiba 0x1 Internacional
## 3 2020 2020-08-08 Sport 3x2 Ceará
## 4 2020 2020-08-09 Flamengo 0x1 Atlético MG
## 5 2020 2020-08-09 Santos 1x1 Bragantino
## 6 2020 2020-08-09 Grêmio 1x0 Fluminense
## 7 2020 2020-09-30 Botafogo 1x2 Bahia
## 8 2020 2020-09-30 Corinthians 0x0 Atlético GO
## 9 2020 2020-12-03 Goiás 0x3 São Paulo
## 10 2020 2021-01-26 Palmeiras 1x1 Vasco
## # … with 370 more rows
O pacote também possui uma função para padronizar o nome dos times: fix_names()
. Alguns times, como o Atlético mineiro aparecem como Atlético MG
e Atlético-MG
na base. Também há casos de times que mudaram de nome nesse período, como o Athetico e o Grêmio Barueri. Pode isso, Arnaldo?
Veja a seguir um exemplo da função em ação:
atleticos <- matches %>%
filter(stringr::str_detect(home, "Atlético")) %>%
pull(home) %>%
unique()
atleticos
## [1] "Atlético MG" "Atlético GO"
fix_names(atleticos)
## [1] "Atlético MG" "Atlético GO"
Ela também pode ser utilizada diretamente em uma coluna com nome de times usando o mutate()
.
matches %>%
mutate(home = fix_names(home), away = fix_names(away))
## # A tibble: 7,646 × 5
## season date home score away
## <dbl> <date> <chr> <chr> <chr>
## 1 2003 2003-03-29 Athletico PR 2x0 Grêmio
## 2 2003 2003-03-29 Guarani 4x2 Vasco
## 3 2003 2003-03-30 Corinthians 0x3 Atlético MG
## 4 2003 2003-03-30 Goiás 2x2 Paysandu
## 5 2003 2003-03-30 Criciúma 2x0 Fluminense
## 6 2003 2003-03-30 Cruzeiro 2x2 São Caetano
## 7 2003 2003-03-30 Flamengo 1x1 Coritiba
## 8 2003 2003-03-30 Fortaleza 0x0 Bahia
## 9 2003 2003-03-30 Internacional 1x1 Ponte Preta
## 10 2003 2003-03-30 Juventude 2x2 São Paulo
## # … with 7,636 more rows
O pacote é atualizado diriamente, a partir de um script executado via Github Actions. Esse fluxo é pausado nos meses entre temporadas.
De onde os dados vieram?
Os dados das temporadas de 2003 a 2019 vieram do site Chance de gol. Particularmente, eu não gosto muito de previsões de resultados esportivos, mas o site é bem legal para quem gosta do tema! E, claro, ele é bem fácil de scrapear, o que é importante se você é nível 1 em Web Scraping igual eu.
Como no Chance de Gol não tinha os dados da temporada de 2020, eu fui buscar na página do ge. A tarefa também bem tranquila, pois os dados da página são atualizados a partir de uma API, que consegui acessar diretamente.
O código que utilizei nos dois casos pode ser encontrado aqui.
Próximos passos
Meu objetivo é continuar implementando o pacote, trazendo mais dados sobre as partidas da Série A (local, público, cartões, posse de bola, chutes a gol etc), além de completar com os dados das demais séries (B, C e D).
Se você encontrar qualquer problema no pacote ou inconsistência nos dados, não deixe de me avisar abrindo uma issue no repositório.
É isso! Dúvidas, sugestões e críticas, mande aqui nos comentários.
Até a próxima!