A cartilha da Confederação Nacional de Municípios (CNM), estima que de janeiro de 2013 a dezembro de 2024 os desastres causaram R$ 732,2 bilhões de prejuízos em todo Brasil. Os Municípios, na linha de frente da gestão de riscos e do gerenciamento dos desastres, são os que mais sofrem com os efeitos negativos desses eventos. Entre os impactos estão as perdas humanas, o deslocamento forçado de famílias (desabrigados e desalojados), a destruição de bens públicos e privados, a interrupção de serviços essenciais e a degradação ambiental. Desastres naturais, como enchentes, deslizamentos de terras e secas, têm impactado severamente o Brasil, causando perdas humanas, danos econômicos e desafios para a gestão pública. Em 2024, o Centro Nacional de Monitoramento e Alertas de Desastres Naturais (Cemaden) registrou 3.620 alertas e 1.690 ocorrências de desastres, o maior número desde 2011, com destaque para as enchentes históricas no Rio Grande do Sul, que afetaram 1,9 milhão de pessoas e causaram 113 mortes até maio de 2024. Esses eventos, intensificados pelas mudanças climáticas, expõem a vulnerabilidade de comunidades, especialmente em áreas urbanas densas e regiões pobres, onde a ocupação desordenada amplifica os riscos.
Este estudo concentra-se nos desastres relacionados a chuvas, mas também considera outros tipos de eventos extremos para fins comparativos. Para isso, realizaremos a análise exploratória de dados abertos do Sistema Integrado de Informação de Desastres - S2ID do Ministério da Integração e do Desenvolvimento Regional, para entendermos qual a relevâncias dos desastres de curto prazo no cenário nacional, o estudo abrange o período de 2013 a 2024 e busca a compreensão de quais são os impactos financeiros e humanos causados por esse tipo de desastre. A partir dos padrões identificados, o estudo servirá como base para discutir a implementação de soluções técnicas, como modelos preditivos, para a mitigação desses eventos. Dessa forma, a análise visa fornecer aos gestores públicos e à Defesa Civil um panorama detalhado que auxilie no planejamento estratégico e na alocação de recursos para as áreas e períodos de maior risco.
Nesta seção, são carregados todos os pacotes R necessários para a execução completa da análise, desde a importação e limpeza dos dados até a visualização dos resultados.
| Pacote | Descrição Principal |
|---|---|
| tidyverse | Conjunto de pacotes essenciais para a ciência de dados, usado para manipulação (dplyr, tidyr), visualização (ggplot2) e importação (readr) de dados. |
| lubridate | Utilizado para facilitar o trabalho com datas, como a conversão de texto para o formato de data e a extração de informações de mês e ano. |
| janitor | Empregado para a limpeza automática e padronização dos nomes das colunas do dataframe, tornando o código mais limpo e legível. |
| scales | Fornece ferramentas para a formatação de eixos em gráficos, permitindo a exibição de valores monetários e abreviações para números grandes. |
| patchwork | Permite combinar múltiplos gráficos gerados pelo ggplot2 em uma única visualização de forma simples e intuitiva. |
| DT | Utilizado para criar tabelas HTML interativas com recursos de paginação, busca e ordenação. |
| knitr |
Ferramenta principal para gerar relatórios dinâmicos. Usado aqui
especificamente para a função kable() para criar tabelas
estáticas.
|
| sf |
Pacote fundamental para ler e manipular dados geoespaciais (shapefiles),
usado pelo geobr e ggplot2.
|
| geobr | Fornece acesso fácil a dados geoespaciais oficiais do Brasil, como os polígonos dos estados. |
| leaflet | Pacote para a criação de mapas web interativos, que exploramos como uma alternativa de visualização. |
Os dados utilizados neste projeto foram extraídos do Sistema Integrado de Informações sobre Desastres (S2ID), a plataforma oficial do Governo Federal, gerenciada pelo Ministério da Integração e do Desenvolvimento Regional. O propósito original desses dados é permitir que os municípios registrem formalmente as ocorrências de desastres. Esse registro é o primeiro passo para a solicitação de reconhecimento de Situação de Emergência ou Estado de Calamidade Pública, um processo necessário para acessar recursos federais para ações de resposta, assistência e recuperação das áreas afetadas. A fonte original dos dados está disponível publicamente e pode ser acessada através do seguinte link: [https://s2id.mi.gov.br/paginas/relatorios/].
A tabela abaixo mostra o conjunto de dados inicial, após a junção dos dados de 2013 a 2024, gerando um arquivo de 68.780 observações e 54 variáveis, onde realizamos um processo de limpeza desses dados com a formatação de colunas: convertendo as variáveis que representam contagens (como população afetada e danos a edificações) e valores financeiros para valores numéricos, pois os mesmos foram importadas como texto (character), assim as datas dos registros também que se encontravam em formato de texto, e os nomes das colunas não seguiam um padrão, contendo espaços, acentos e caracteres especiais, exigindo uma padronização antes do início da análise.
dados <- read.csv2("dados_combinados.csv")
# 1. Instalar o pacote DT, se ainda não tiver
#install.packages("DT")
# 2. Usar o head() para pegar as primeiras 6 linhas e o datatable() para formatar
DT::datatable(
head(dados, 6),
options = list(
scrollX = TRUE, # Adiciona uma barra de rolagem horizontal para ver todas as colunas
pageLength = 6, # Mostra todas as 6 linhas de uma vez
dom = 't', # Mostra apenas a tabela (remove a caixa de busca, etc.)
ordering = FALSE # Desativa a opção de reordenar clicando nos cabeçalhos
),
rownames = FALSE, # Não mostra os nomes das linhas (os números 1, 2, 3...)
class = 'cell-border stripe', # Aplica um estilo visual
width = "100%" # Define a largura da tabela
)
Após a consolidação dos arquivos anuais em um único dataframe, foi iniciado um processo de limpeza e transformação em múltiplas etapas para garantir a qualidade e a consistência dos dados, tornando-os adequados para a análise.
A primeira ação foi a padronização dos nomes das 54 colunas. Para facilitar a manipulação dos dados no R e garantir a legibilidade do código, os nomes originais, que continham espaços, acentos e caracteres especiais, foram convertidos para o formato snake_case (letras minúsculas com “_” como separador), utilizando a função clean_names() do pacote janitor.
#library(janitor)
#library(dplyr)
#library(tidyr)
dados_limpos <- dados %>%
clean_names()
DT::datatable(
head(dados_limpos, 6),
options = list(
scrollX = TRUE, # Adiciona uma barra de rolagem horizontal para ver todas as colunas
pageLength = 6, # Mostra todas as 6 linhas de uma vez
dom = 't', # Mostra apenas a tabela (remove a caixa de busca, etc.)
ordering = FALSE # Desativa a opção de reordenar clicando nos cabeçalhos
),
rownames = FALSE, # Não mostra os nomes das linhas (os números 1, 2, 3...)
class = 'cell-border stripe', # Aplica um estilo visual
width = "100%" # Define a largura da tabela
)
Uma etapa fundamental foi a correção dos tipos de dados, pois análises matemáticas e temporais só são possíveis com variáveis nos formatos corretos. A coluna registro foi convertida de texto para o formato de data (Date) com o auxílio do pacote lubridate. Dezenas de colunas que representam contagens (como população e danos) e valores financeiros (prejuízos) foram convertidas de texto (character) para o formato numérico (numeric). Durante esta conversão, valores inconsistentes ou vazios foram transformados em NA (dados ausentes), permitindo o tratamento adequado de informações faltantes na fase de análise.
Finalmente, para enriquecer o dataset, foram realizadas transformações para gerar novas variáveis de análise. A coluna COBRADE, que continha tanto o código numérico quanto a descrição textual do desastre, foi desmembrada em duas novas colunas (cobrade_codigo e cobrade_descricao) para permitir análises mais granulares por tipo de evento. Adicionalmente, o dataset foi enriquecido com a criação de variáveis agregadas, como total_populacao_afetada e total_prejuizo_financeiro, além de uma variável temporal para o mes de ocorrência. Este processo de engenharia de atributos resultou em um conjunto de dados final limpo, estruturado e pronto para a fase de análise exploratória.
DT::datatable(
head(dados_limpos, 6),
options = list(
scrollX = TRUE, # Adiciona uma barra de rolagem horizontal para ver todas as colunas
pageLength = 6, # Mostra todas as 6 linhas de uma vez
dom = 't', # Mostra apenas a tabela (remove a caixa de busca, etc.)
ordering = FALSE # Desativa a opção de reordenar clicando nos cabeçalhos
),
rownames = FALSE, # Não mostra os nomes das linhas (os números 1, 2, 3...)
class = 'cell-border stripe', # Aplica um estilo visual
width = "100%" # Define a largura da tabela
)
Após a conclusão de todas as etapas de limpeza e transformação, o
conjunto de dados foi consolidado em sua versão final, nomeado
dados_limpos. A estrutura resultante, apresentada de forma
condensada abaixo, contém 68.780 observações e 58 variáveis prontas para
a análise. A função datatable() do pacote DT é
utilizada para esta visualização, pois oferece um resumo conciso de cada
coluna, seu tipo de dado e as primeiras observações.
# O pacote knitr já vem com o R Markdown, então não é preciso carregá-lo separadamente
# 1. Criar um data.frame com as informações capturadas diretamente dos datasets
sumario_dimensoes <- data.frame(
Estagio = c(
"Dataset Inicial (Após junção)",
"Dataset Final (Após limpeza e criação de variáveis)"
),
Linhas = c(
nrow(dados), # Captura o número de linhas do dataset original
nrow(dados_limpos) # Captura o número de linhas do dataset limpo
),
Colunas = c(
ncol(dados), # Captura o número de colunas do original
ncol(dados_limpos) # Captura o número de colunas do limpo
)
)
# 2. Usar a função kable() para criar uma tabela bem formatada e profissional
knitr::kable(
sumario_dimensoes,
caption = "Tabela: Transformação da Estrutura do Dataset",
col.names = c("Estágio do Dataset", "Número de Linhas", "Número de Colunas"),
align = 'lrr' # Define o alinhamento das colunas (l=left, r=right, c=center)
)
| Estágio do Dataset | Número de Linhas | Número de Colunas |
|---|---|---|
| Dataset Inicial (Após junção) | 68780 | 54 |
| Dataset Final (Após limpeza e criação de variáveis) | 68780 | 58 |
#################################################################################################
# Carregar o pacote DT, se necessário
library(DT)
# Usar o head() para pegar as primeiras 6 linhas e o datatable() para formatar
DT::datatable(
head(dados_limpos, 6),
options = list(
scrollX = TRUE, # Adiciona uma barra de rolagem horizontal para ver todas as colunas
pageLength = 6, # Mostra todas as 6 linhas de uma vez
dom = 't', # Mostra apenas a tabela (remove a caixa de busca, etc.)
ordering = FALSE # Desativa a opção de reordenar clicando nos cabeçalhos
),
rownames = FALSE, # Não mostra os nomes das linhas
class = 'cell-border stripe', # Aplica um estilo visual
width = "100%" # Define a largura da tabela
)
Nesta seção, investigamos os padrões nos dados de desastres para extrair insights sobre suas características, distribuição e impacto.
Para entender a relevância dos desastres relacionados a chuvas no cenário nacional, o primeiro passo da análise foi comparar seu impacto financeiro com o de todos os outros tipos de desastres registrados entre 2013 e 2024. Para isso, os eventos foram classificados em duas categorias: “Relacionado a Chuvas” e “Outros Tipos de Desastre”.
O código abaixo gera a sumarização dos dados e os gráficos comparativos de impacto financeiro total e médio para cada categoria.
# Lista de palavras-chave para identificar os desastres relacionados a chuvas
palavras_chave_chuva <- c("Chuva", "Enxurrada", "Inundação", "Alagamento", "Deslizamento", "Movimento de Massa")
# Criar a nova coluna 'categoria_desastre'
dados_limpos <- dados_limpos %>%
mutate(
categoria_desastre = case_when(
# Se a descrição contiver qualquer uma das palavras-chave, categorize como 'Relacionado a Chuvas'
str_detect(cobrade_descricao, paste(palavras_chave_chuva, collapse = "|")) ~ "Relacionado a Chuvas",
# Para todos os outros casos, categorize como 'Outros Tipos de Desastre'
TRUE ~ "Outros Tipos de Desastre"
)
)
###############################################################################################
# Agrupar os dados pela nova categoria e calcular as métricas financeiras
sumario_impacto_financeiro <- dados_limpos %>%
group_by(categoria_desastre) %>%
summarise(
n_ocorrencias = n(),
impacto_financeiro_total = sum(total_prejuizo_financeiro, na.rm = TRUE),
impacto_financeiro_medio = mean(total_prejuizo_financeiro, na.rm = TRUE)
) %>%
# Opcional: ordena o resultado pelo maior impacto total
arrange(desc(impacto_financeiro_total))
###############################################################################################
# Gráfico 1: Comparação do Impacto Financeiro TOTAL (Corrigido)
plot_total <- ggplot(sumario_impacto_financeiro, aes(x = categoria_desastre,
y = impacto_financeiro_total,
fill = categoria_desastre)) +
geom_col(show.legend = FALSE) +
# CORREÇÃO: Usando a nova função label_number() com scale_cut
scale_y_continuous(labels = label_number(prefix = "R$ ", scale_cut = cut_short_scale())) +
labs(
title = "Impacto Financeiro Total (2013-2024)",
subtitle = "Eventos de 'Outros Tipos' (ex: Seca) dominam o custo acumulado",
x = NULL,
y = "Impacto Total"
) +
theme_minimal(base_size = 10)
# Gráfico 2: Comparação do Impacto Financeiro MÉDIO (Corrigido)
plot_medio <- ggplot(sumario_impacto_financeiro, aes(x = categoria_desastre,
y = impacto_financeiro_medio,
fill = categoria_desastre)) +
geom_col(show.legend = FALSE) +
# CORREÇÃO: Usando a nova função label_number() com scale_cut
scale_y_continuous(labels = label_number(prefix = "R$ ", scale_cut = cut_short_scale())) +
labs(
title = "Impacto Financeiro Médio por Ocorrência",
subtitle = "Eventos de chuva são, em média, mais custosos por ocorrência.",
x = NULL,
y = "Impacto Médio"
) +
theme_minimal(base_size = 10)
# Combinar os dois gráficos lado a lado
plot_total + plot_medio
Aqui mostraremos os tipos de desastres mais comuns relacionados a chuvas no Brasil, para essa analise usaremos os dados que foram obtidos atraves da junção de datasets disponivels no S2ID.
O gráfico abaixo demonstra que a categoria “Tempestade Local/Convectiva - Chuvas Intensas” é o tipo de registro mais comum, respondendo pela grande maioria das ocorrências. Em seguida, com uma frequência consideravelmente menor, aparecem eventos de “Enxurradas”, “Alagamentos” e “Deslizamentos”, que representam as consequências diretas mais notificadas das chuvas intensas.
# Lista de palavras-chave que já definimos
palavras_chave_chuva <- c("Chuva", "Enxurrada", "Inundação", "Alagamento", "Deslizamento", "Movimento de Massa")
# Criar o novo dataframe 'dados_chuvas' filtrando os registros de interesse
dados_chuvas <- dados_limpos %>%
filter(
# A função str_detect() procura pela presença de qualquer uma das palavras-chave
str_detect(cobrade_descricao, paste(palavras_chave_chuva, collapse = "|"))
)
# 1. Preparar os dados para o gráfico
top_desastres_chuva <- dados_chuvas %>%
count(cobrade_descricao, sort = TRUE) %>%
top_n(10, n) %>%
mutate(
# Garante que a coluna com os rótulos quebrados seja criada
descricao_ajustada = str_wrap(cobrade_descricao, width = 50) )
# Preparar os dados
top_desastres_chuva <- dados_chuvas %>%
count(cobrade_descricao, sort = TRUE) %>%
top_n(10, n) %>%
mutate(descricao_ajustada = str_wrap(cobrade_descricao, width = 50))
# Criar o Gráfico de Pirulito Estático
ggplot(top_desastres_chuva, aes(x = n, y = reorder(descricao_ajustada, n))) +
geom_segment(aes(x = 0, xend = n, y = reorder(descricao_ajustada, n), yend = reorder(descricao_ajustada, n)),
color = "grey", linewidth = 0.5) +
geom_point(color = "#0072B2", size = 4) +
# Readicionamos o geom_text para os rótulos estáticos
geom_text(aes(label = n), hjust = -0.5, size = 3.5) +
scale_x_continuous(expand = expansion(mult = c(0.05, 0.15))) +
labs(
title = "Principais Desastres Relacionados a Chuvas no Brasil (2013-2024)",
x = "Número de Ocorrências",
y = "Tipo de Desastre"
) +
theme_minimal(base_size = 10) +
theme(plot.title = element_text(face = "bold"))
# 1. Agrupar e contar as ocorrências de desastres de chuva por estado (UF)
top_10_uf_ocorrencias <- dados_chuvas %>%
count(uf, sort = TRUE) %>%
slice_max(order_by = n, n = 10) %>%
arrange(desc(n)) %>%
mutate(
perc = n / sum(n) * 100,
label = paste0(round(perc, 1), "%")
)
# 2. Gráfico de pizza com apenas a porcentagem
ggplot(top_10_uf_ocorrencias, aes(x = "", y = n, fill = reorder(uf, -n))) +
geom_col(width = 1, color = "white") +
coord_polar(theta = "y") +
geom_text(aes(label = label),
position = position_stack(vjust = 0.5),
size = 3) +
labs(
title = "Distribuição dos 10 Estados com Mais Ocorrências de Desastres de Chuva",
subtitle = "Período de 2013-2024, com base nos registros do S2ID",
x = NULL,
y = NULL,
fill = "Estado (UF)"
) +
theme_minimal(base_size = 11) +
theme(
axis.text = element_blank(),
axis.ticks = element_blank(),
panel.grid = element_blank(),
plot.title = element_text(face = "bold", hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5)
)
A análise da frequência de ocorrências por estado revela que Santa Catarina (SC), Minas Gerais (MG) e Rio Grande do Sul (RS) são os três estados com o maior número de registros de desastres relacionados a chuvas na última década. No entanto, como veremos a seguir, a frequência de eventos não corresponde necessariamente à severidade de seus impactos.
# 1. Agrupar por estado (UF) e somar o total de pessoas afetadas
top_10_uf_afetados <- dados_chuvas %>%
group_by(uf) %>%
summarise(
total_afetados = sum(total_populacao_afetada, na.rm = TRUE)
) %>%
# Ordenar e selecionar os 10 estados com mais pessoas afetadas
arrange(desc(total_afetados)) %>%
top_n(10, total_afetados)
# 2. Criar o gráfico de barras
ggplot(top_10_uf_afetados, aes(x = total_afetados, y = reorder(uf, total_afetados))) +
geom_col(fill = "#009E73") + # Uma cor verde para este gráfico
# Formata os números do eixo x para facilitar a leitura (ex: 1.5M para 1.5 milhão)
scale_x_continuous(labels = label_number(scale_cut = cut_short_scale())) +
labs(
title = "Estados com a maior quantidade de pessoas Afetadas por Desastres Oriundos de Chuvas",
subtitle = "Período: 2013-2024",
x = "Total de Pessoas Afetadas (Mortos, Feridos, Desalojados, etc.)",
y = "Estado (UF)"
) +
theme_minimal(base_size = 10) +
theme(
panel.grid.major.y = element_blank(),
plot.title = element_text(face = "bold")
)
Em contraste com a análise de frequência, a investigação do impacto humano revela um cenário drasticamente diferente. O gráfico acima mostra os 10 estados com o maior número total de pessoas afetadas. Notavelmente, estados como o Espírito Santo (ES), que não lideravam em frequência, surgem aqui como um dos mais impactados em termos humanos, sugerindo a ocorrência de eventos de altíssima severidade. Isso demonstra que a contagem de ocorrências, por si só, não é suficiente para medir a vulnerabilidade real de um estado.
# Preparar os dados (sumarizar prejuízo por estado)
sumario_financeiro_uf <- dados_chuvas %>%
group_by(uf) %>%
summarise(total_prejuizo = sum(total_prejuizo_financeiro, na.rm = TRUE))
# Obter os dados do mapa do Brasil
brasil_estados <- read_state(year = 2020)
# Juntar os dados do mapa com nossos dados de prejuízo
mapa_data <- left_join(brasil_estados, sumario_financeiro_uf, by = c("abbrev_state" = "uf"))
# Criar o Mapa Coroplético
ggplot(data = mapa_data) +
geom_sf(aes(fill = total_prejuizo), color = "white", size = 0.2) + # geom_sf() é a geometria para mapas
scale_fill_viridis_c(option = "plasma", name = "Prejuízo (R$)", labels = label_number(scale_cut = cut_short_scale())) +
labs(
title = "Prejuízo Financeiro por Estado Devido a Desastres de Chuva",
subtitle = "Período: 2013-2024",
caption = "Fonte: S2ID/Ministério da Integração e do Desenvolvimento Regional"
) +
theme_void() + # um tema limpo, sem eixos, ideal para mapas
theme(plot.title = element_text(face = "bold", hjust = 0.5), plot.subtitle = element_text(hjust = 0.5))
O gráfico acima demostra o impacto financeiro causado pelas chuvas e revela que o Rio Grande do Sul (RS) e Minas Gerais (MG) são os estados que concentram, de longe, os maiores prejuízos monetários decorrentes de desastres de chuva.
A comparação dos três gráficos geográficos (frequência, população afetada e prejuízo financeiro) compõe o principal insight desta seção: a vulnerabilidade de um estado a desastres não pode ser medida por um único indicador. Estados como Santa Catarina sofrem com a alta frequência de eventos, enquanto o Espírito Santo se destaca pelo altíssimo impacto humano, e o Rio Grande do Sul e Minas Gerais, pelos custos econômicos exorbitantes. Esta visão multifacetada é essencial para um planejamento de mitigação eficaz.
# 1. Realizar a análise: contar os status e calcular a porcentagem
tabela_status <- dados_chuvas %>%
count(status, sort = TRUE, name = "n_ocorrencias") %>%
# Calcular a porcentagem do total
mutate(
porcentagem = n_ocorrencias / sum(n_ocorrencias),
# Formatar a coluna de porcentagem para uma melhor exibição (ex: 45.1%)
porcentagem_formatada = percent(porcentagem, accuracy = 0.1)
) %>%
# Selecionar e renomear as colunas para a tabela final
select(
`Status do Registro` = status,
`Número de Ocorrências` = n_ocorrencias,
`Percentual do Total` = porcentagem_formatada
)
# 2. Criar a tabela interativa com DT
DT::datatable(
tabela_status,
options = list(
dom = 't', # Mostra apenas a tabela, sem busca ou outras opções
ordering = FALSE # Desativa a ordenação por clique no cabeçalho
),
rownames = FALSE, # Esconde os números das linhas
class = 'cell-border stripe', # Aplica um estilo visual
caption = "Tabela: Distribuição de Ocorrências de Desastres de Chuva por Status (2013-2024)."
)
A tabela acima demonstra um fator importante sobre o processo administrativo dos desastres relacionados a chuvas no Brasil. Como podemos ver a categoria mais comum para desastres de chuva é a de “Registro”, compreendendo quase metade (49,9%) de todas as notificações. Isso indica que um grande volume de desastres é reportado inicialmente pelos municípios, mas não avança para a fase de validação federal ou estadual.
Em seguida, os desastres com status “Reconhecido” representam 42,6% do total, mostrando que uma parcela substancial, embora não majoritária, tem seu decreto de anormalidade validado e se torna apta a receber recursos. Adicionalmente, uma parcela de 7,5% dos casos é explicitamente “Não reconhecida”, o que sugere que, após a solicitação, não atenderam aos critérios técnicos necessários.
Este cenário indica que, embora os desastres de chuva com reconhecimento oficial representem um problema significativo, existe um volume ainda maior de eventos registrados que, por não escalarem administrativamente, podem representar uma vulnerabilidade “invisível” ou de menor impacto, mas que ainda assim mobilizam as defesas civis locais.# Pacotes necessários
# 1. Preparar os dados: contar ocorrências por ano E por status
tendencia_por_status <- dados_chuvas %>%
# Agrupamos pelas duas variáveis de interesse
group_by(ano, status) %>%
summarise(
n_ocorrencias = n(),
.groups = 'drop' # Boa prática para desagrupar após a sumarização
)
# 2. Criar o gráfico com múltiplas linhas
ggplot(tendencia_por_status, aes(x = ano, y = n_ocorrencias, group = status, color = status)) +
geom_line(linewidth = 1) +
geom_point(size = 2.5) +
labs(
title = "Evolução Anual dos Desastres de Chuva por Status",
subtitle = "Número de ocorrências para cada status ao longo do tempo (2013-2024)",
x = "Ano",
y = "Número de Ocorrências",
color = "Status do Desastre:" # Título da legenda
) +
theme_minimal(base_size = 12) +
theme(
plot.title = element_text(face = "bold"),
legend.position = "bottom" # Posiciona a legenda na parte inferior para melhor visualização
)
O gráfico acima revela que a tendência de reconhecimentos oficiais acompanha de perto a tendência do número total de ocorrências que vimos anteriormente. Assim como no gráfico geral, observa-se um crescimento acentuado a partir de 2021, culminando em um pico no ano de 2023. Esta é uma informação importante, pois indica que o aumento no número de registros não se deve apenas a notificações de menor impacto, mas reflete um aumento real no número de eventos severos o suficiente para obterem o reconhecimento formal do governo.
A última etapa da análise exploratória investiga a dimensão temporal dos desastres de chuva, buscando identificar tendências de longo prazo e padrões sazonais.
O gráfico de linha abaixo apresenta o número de registros de desastres de chuva para cada ano, de 2013 a 2024.
# Código para o gráfico de tendência anual
ocorrencias_por_ano <- dados_chuvas %>%
group_by(ano) %>%
summarise(n_ocorrencias = n())
ggplot(ocorrencias_por_ano, aes(x = ano, y = n_ocorrencias)) +
geom_line(color = "#0072B2", linewidth = 1) +
geom_point(color = "#0072B2", size = 3) +
geom_text(aes(label = n_ocorrencias), vjust = -1.5, size = 3.5) +
labs(
title = "Evolução Anual dos Registros de Desastres de Chuva (2013-2024)",
subtitle = "Número de ocorrências registradas por ano no S2ID",
x = "Ano",
y = "Número de Ocorrências"
) +
expand_limits(y = max(ocorrencias_por_ano$n_ocorrencias) * 1.15) +
theme_minimal(base_size = 12) +
theme(plot.title = element_text(face = "bold"))
A análise da tendência anual revela um padrão preocupante: após um período de relativa estabilidade até 2020, observa-se um aumento drástico no número de registros a partir de 2021, com um pico em 2023. Este aumento substancial pode indicar tanto uma intensificação dos eventos climáticos extremos quanto uma melhoria no sistema de notificação de desastres.
Para entender os padrões sazonais, os eventos foram agregados por mês ao longo de todo o período de 12 anos.
# Código para o gráfico de sazonalidade mensal
ocorrencias_por_mes <- dados_chuvas %>%
count(mes)
ggplot(ocorrencias_por_mes, aes(x = mes, y = n)) +
geom_col(fill = "#56B4E9") +
labs(
title = "Sazonalidade dos Desastres de Chuva no Brasil (2013-2024)",
subtitle = "Total de ocorrências registradas em cada mês ao longo de todo o período",
x = "Mês",
y = "Número Total de Ocorrências"
) +
theme_minimal(base_size = 12) +
theme(
plot.title = element_text(face = "bold"),
axis.text.x = element_text(angle = 45, hjust = 1)
)
O gráfico de sazonalidade demonstra um padrão muito claro. A grande maioria dos desastres de chuva se concentra nos meses de verão, de Dezembro a Março, com Janeiro sendo o mês mais crítico. Um segundo pico, menor, é observado em Maio. Em contrapartida, o final do inverno, especialmente os meses de Agosto e Setembro, representa o período de menor risco para este tipo de evento em escala nacional.
O estudo confirmou que os desastres decorrentes de chuvas intensas representam um desafio complexo e de alto impacto para o Brasil, com vulnerabilidades que variam significativamente entre os estados dependendo da métrica de análise (frequência, impacto humano ou financeiro). A metodologia de Análise Exploratória de Dados, aplicada sobre um conjunto de dados de 12 anos do S2ID, provou-se eficaz para limpar, estruturar e extrair padrões e insights relevantes que não eram autoevidentes.
As principais descobertas incluem: a maior severidade média dos eventos de chuva em comparação com outros desastres; a discrepância entre os rankings de estados por frequência, impacto humano e financeiro; a tendência de aumento no número de registros nos últimos anos; e a forte sazonalidade dos eventos nos meses de verão.
Também foi identificada uma discrepância nos valores financeiros estimados. Os dados do S2ID indicam um montante de aproximadamente R$ 351 bilhões, enquanto a Confederação Nacional de Municípios (CNM) estima um impacto de R$ 732,2 bilhões no mesmo período. Essa diferença é esperada e decorre da natureza das fontes: o S2ID contabiliza apenas danos e prejuízos diretos, registrados oficialmente pelos municípios; já a CNM provavelmente inclui também custos indiretos e de longo prazo, oferecendo uma visão mais ampla do impacto econômico. Assim, os resultados apresentados devem ser interpretados como a parcela oficialmente documentada no sistema federal de desastres.
As conclusões oferecem um panorama baseado em dados que pode auxiliar gestores públicos e a Defesa Civil no planejamento estratégico e na alocação de recursos, focando nos estados e períodos de maior risco para cada tipo de impacto.A principal limitação deste estudo é a análise baseada em dados de consequências, sem incluir variáveis preditoras.
O próximo passo natural seria integrar estes dados com fontes meteorológicas, topográficas e urbanas para a construção de modelos preditivos, transformando a análise reativa em uma ferramenta proativa de mitigação de desastres.
MINISTÉRIO DA INTEGRAÇÃO E DO DESENVOLVIMENTO REGIONAL. Sistema Integrado de Informações sobre Desastres (S2ID). Acessado em junho de 2025. Disponível em: https://s2id.mi.gov.br/paginas/relatorios/
CONFEDERAÇÃO NACIONAL DE MUNICÍPIOS (CNM). Panorama dos Desastres no Brasil – 2013 a 2024: estudo técnico. Brasília: CNM, maio 2025. 284 p. Disponível em: https://cnm.org.br/storage/biblioteca/2025/Estudos_Tecnicos/ET_DEFCIVIVL_05-2025_Panorama_dos_Desastres_no_Brasil_2013_a_2024.pdf. Acesso em: 08 jun. 2025.
BRASIL. Ministério da Ciência, Tecnologia e Inovação. Cemaden registra recorde de alertas e mais de 1,6 mil ocorrências de desastre em 2024. Agência Gov, 10 jan. 2025. Disponível em: https://www.gov.br/mcti/pt-br/acompanhe-o-mcti/noticias/2025/01/cemaden-registra-recorde-de-alertas-e-mais-de-1-6-mil-ocorrencias-de-desastre-no-brasil-em-2024. Acesso em: 12 jun. 2025.
XIE, Yihui; ALLAIRE, J. J.; GROLOEMUND, Garrett. R Markdown: the definitive guide. Disponível em: https://bookdown.org/yihui/rmarkdown/. Acesso em: 18 jun. 2025.
R Core Team (2024). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. URL: https://www.R-project.org/.