Este script tem como objetivo ler os dados de premiados da OBMEP 2025 de escolas públicas e privadas, realizar uma limpeza e padronização dos dados (removendo duplicatas e corrigindo inconsistências de digitação), unificar as bases e exportar o resultado final nos formatos .csv e .rds.
Os dados originais, obtidos do Site Oficial da OBMEP apresentam pequenas variações nos nomes das colunas (por exemplo, um espaço extra em “Escola” no arquivo privado).
# Definindo os caminhos dos arquivos
path.directory <- "~/Documentos/u_projetos/2026_pesquisaOBMEP/analise_dados"
csv.publica <- "/BR_esc_publica_2025.csv"
csv.privada <- "/BR_esc_privada_2025.csv"
# Leitura e padronização inicial dos nomes das colunas
df_publica <- read_csv(paste0(path.directory,csv.publica)) %>% clean_names()
df_privada <- read_csv(paste0(path.directory,csv.privada)) %>% clean_names()
# message("Base Pública carregada com ", nrow(df_publica), " linhas e ",
# ncol(df_publica), " colunas.")
# message("Base Privada carregada com ", nrow(df_privada), " linhas e ",
# ncol(df_privada), " colunas.")
Base Pública carregada com 6587 linhas e 8 colunas.
Base Privada carregada com 2025 linhas e 8 colunas.
Para evitar dados discrepantes ou duplicados, aplicaremos as seguintes regras de tratamento:
# Função para aplicar a limpeza inicial em cada dataframe
limpar_dados <- function(df) {
df %>%
# Remove espaços em branco sobressalentes em todas as colunas de texto
mutate(across(where(is.character), stringr::str_trim)) %>%
# Padroniza a coluna nivel para o formato "Nível X"
mutate(nivel = stringr::str_to_title(nivel))
}
df_publica_limpo <- limpar_dados(df_publica)
df_privada_limpo <- limpar_dados(df_privada)
# Unindo os dados
obmep.2025 <- bind_rows(df_publica_limpo, df_privada_limpo)
# --- Filtragem de Inconsistências Críticas ---
# 1. Remoção de duplicatas exatas (linhas 100% idênticas)
dados_antes <- nrow(obmep.2025)
obmep.2025 <- obmep.2025 %>% distinct()
dados_depois_distinct <- nrow(obmep.2025)
# 2. Casos de nomes repetidos no mesmo município, UF e Nível (evitando registros redundantes)
# Mantemos o primeiro registro encontrado
obmep_2025_final <- obmep.2025 %>%
group_by(nome, municipio, uf, nivel) %>%
filter(row_number() == 1) %>%
ungroup()
dados_finais <- nrow(obmep_2025_final)
# Relatório de remoções
cat("Resumo da filtragem:",
"\n- Registros totais iniciais:", dados_antes,
"\n- Após remoção de duplicatas exatas:", dados_depois_distinct,
"\n- Após refinar nomes repetidos no mesmo nível/localidade:", dados_finais,
"\n- Total de linhas inconsistentes removidas:", (dados_antes - dados_finais))
## Resumo da filtragem:
## - Registros totais iniciais: 8612
## - Após remoção de duplicatas exatas: 8612
## - Após refinar nomes repetidos no mesmo nível/localidade: 8612
## - Total de linhas inconsistentes removidas: 0
Visualização rápida para garantir que a distribuição de medalhas e tipos de escola está consistente.
obmep_2025_final %>%
count(tipo_de_escola, medalha) %>%
knitr::kable(caption = "Distribuição de Medalhas por Tipo de Escola")
| tipo_de_escola | medalha | n |
|---|---|---|
| Privada | Bronze | 1380 |
| Privada | Ouro | 159 |
| Privada | Prata | 486 |
| Pública | Bronze | 4509 |
| Pública | Ouro | 523 |
| Pública | Prata | 1555 |
obmep_2025_final %>%
count(medalha) %>%
knitr::kable(caption = "Distribuição de Medalhas por nível")
| medalha | n |
|---|---|
| Bronze | 5889 |
| Ouro | 682 |
| Prata | 2041 |
OBS.: esses dados conferem com os dados disponíveis no Site Oficial da OBMEP.
Gerando os arquivos de saída. O arquivo .rds preserva as propriedades nativas do R (fator, numérico, etc.), enquanto o .csv garante a interoperabilidade com outros softwares.
# Nome dos arquivos de saída
output_csv <- paste0(path.directory,"obmep_2025_premiados_unificado.csv")
output_rds <- paste0(path.directory,"obmep_2025_premiados_unificado.rds")
# Salvando em CSV (codificação UTF-8 para evitar problemas com acentuação)
write_csv(obmep_2025_final, output_csv)
# Salvando em RDS
saveRDS(obmep_2025_final, output_rds)
Arquivos gerados com sucesso no diretório de trabalho: ~/Documentos/u_projetos/2026_pesquisaOBMEP/analise_dados.