Integração de Bases DBC

O script apresentado tem como objetivo principal carregar, padronizar e consolidar arquivos de dados DBC (formato utilizado pelo DATASUS) referentes a diferentes anos, facilitando análises epidemiológicas longitudinais. A seguir, detalho cada etapa do código:

1. Definição do Caminho dos Arquivos

  • pasta_botu: Define o diretório onde os arquivos DBC estão armazenados no computador.

    • Exemplo: "C:/Users/wkoli/Downloads/arquivo/"

2. Seleção dos Anos de Interesse

  • anos <- 15:24: Cria um vetor com os anos de interesse (2015 a 2024, considerando o padrão de dois dígitos).

3. Inicialização da Lista de Dataframes

  • botu_15br24 <- list(): Cria uma lista vazia para armazenar os dataframes de cada ano.

4. Leitura Dinâmica dos Arquivos DBC

  • Loop for: Para cada ano, monta o nome do arquivo (BOTUBR15.dbc, BOTUBR16.dbc, etc.) e verifica se o arquivo existe.

  • Leitura com read.dbc: Se o arquivo existir, lê o conteúdo e armazena na lista, nomeando cada elemento conforme o ano.

  • Tratamento de Erros: Se houver erro na leitura, exibe mensagem informando o problema.

  • Mensagem de Arquivo Ausente: Caso o arquivo não exista, informa ao usuário.

5. Verificação dos Dataframes Carregados

  • names(botu_15br24): Exibe os nomes dos dataframes carregados, permitindo checar quais anos foram lidos com sucesso.

6. Padronização das Colunas

  • Identificação de Colunas Únicas:

    • todas_colunas <- unique(unlist(lapply(botu_15br24, colnames)))

    • Gera uma lista com todas as colunas presentes em todos os dataframes, garantindo que a estrutura final seja uniforme.

  • Função padronizar_colunas:

    • Adiciona colunas ausentes em cada dataframe, preenchendo com NA.

    • Reordena as colunas para manter a mesma ordem em todos os dataframes.

  • Aplicação da Padronização:

    • lapply(botu_15br24, padronizar_colunas, todas_colunas = todas_colunas)

    • Garante que todos os dataframes tenham as mesmas colunas, mesmo que originalmente não existissem em alguns anos.

7. Verificação de Diferenças nas Colunas

  • diferencas_colunas: Checa se ainda há diferenças de colunas após a padronização, o que pode indicar problemas na estrutura dos dados.

8. Consolidação dos Dataframes

  • do.call(rbind, botu_15br24): Junta todos os dataframes padronizados em um único dataframe, empilhando as linhas.

9. Limpeza de Colunas Vazias

  • Remoção de Colunas com Apenas NA:

    • botu15br24 <- botu15br24[, colSums(!is.na(botu15br24)) > 0]

    • Elimina colunas que ficaram totalmente vazias após a consolidação.

10. Backup de Segurança

  • write_feather: Salva o dataframe consolidado em formato Feather, que é eficiente para leitura e escrita, além de suportar compressão (zstd).

Resumo das Boas Práticas

  • Automatização: O loop e a padronização facilitam a integração de múltiplos anos, mesmo com diferenças estruturais.

  • Tratamento de Erros: Mensagens informativas ajudam no diagnóstico de problemas.

  • Padronização: Garante que análises futuras possam ser feitas sem preocupações com inconsistências de colunas.

  • Backup: Salvar o resultado em formato eficiente e comprimido protege o trabalho realizado.

Esse fluxo é fundamental para análises epidemiológicas robustas, especialmente quando se trabalha com séries históricas e dados provenientes de diferentes períodos, que frequentemente apresentam variações na estrutura dos arquivos.

# PROJETO HealthieR Scripts----------------------------------------
# Integração das Bases de Dados de Botulismo
# Elaboração: Wanderson Epidemiologista
# Data: 5 de julho de 2025
# ******************************************************************

## Etapa 1 - Carregar ------------------------------------------------------

# Criar uma pasta vazia e indicar o caminho onde você salvou os DBC no PC
pasta_botu <-  "C:/Users/Downloads/arquivo/"#local onde estão as bases de dados. 

# Listar anos dos arquivos DBC disponíveis e de interesse
anos <- 15:24

# Inicializar lista para armazenar dataframes
botu_15br24 <- list()

# Loop para leitura dinâmica dos arquivos DBC
for (ano in anos) {
  arquivo <- paste0(pasta_botu, "BOTUBR", ano, ".dbc")  # Nome do arquivo
  if (file.exists(arquivo)) {
    tryCatch({
      botu_15br24[[paste0("botu", ano, "br")]] <- read.dbc(arquivo)
    }, error = function(e) {
      message("Erro ao ler o arquivo: ", arquivo, " - ", e$message)
    })
  } else {
    message("Arquivo não encontrado: ", arquivo)
  }
}

# Verificar nomes dos dataframes carregados
names(botu_15br24)

# Padronizar colunas (removida redundância)
# Identifica todas as colunas únicas presentes em todos os dataframes.
todas_colunas <- unique(unlist(lapply(botu_15br24, colnames)))

# Função para adicionar colunas ausentes com NA
padronizar_colunas <- function(df, todas_colunas) {
  colunas_faltantes <- setdiff(todas_colunas, colnames(df))
  df[colunas_faltantes] <- NA
  return(df[todas_colunas])
}

# Aplicar a função de padronização a todos os dataframes
botu_15br24 <- lapply(botu_15br24, padronizar_colunas, todas_colunas = todas_colunas)

# Verificar se há diferenças nas colunas após padronização
diferencas_colunas <- lapply(botu_15br24, function(df) {
  setdiff(todas_colunas, colnames(df))
})

diferencas_colunas # Exibir resultados

# Combinar dataframes em um único dataframe
botu15br24 <- do.call(rbind, botu_15br24)

# Remover colunas com todos os valores NA  
botu15br24 <- botu15br24[, colSums(!is.na(botu15br24)) > 0]

#### 1º backup de segurança --------------------------------------------------
write_feather(botu15br24, "botu15br24.feather", compression = "zstd")

HealthieR Scripts: Automatizando análises em Epidemiologia e Saúde Pública com R