1. Contexto do Script

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.

2. Carregamento dos Dados

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.

3. Limpeza, Padronização e Filtragem

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")
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")
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.

5. Exportação os dados (EVAL = F)

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.