Contextualização: as enchentes de 2024 no RS

Entre o final de abril e início de maio de 2024, a população do Estado do Rio Grande do Sul foi severamente afetada por enchentes ocasionadas pelo alto volume de chuvas. Segundo dados oficiais da Defesa Civil do Estado, 478 municípios foram atingidos (96% do total), 2.398.255 pessoas foram afetadas (21,3% de toda a população) e cerca de 600 mil desalojadas. Essas e outras informações podem ser acessadas em: https://sosenchentes.rs.gov.br/situacao-nos-municipios.

Para responder à nova realidade climática enfrentada, o governo do estado do RS criou o Plano Rio Grande (Lei 16.134, de 24 de maio de 2024), programa para a Reconstrução, Adaptação e Resiliência Climática do Rio Grande do Sul. Entre eixos e ações previstas, está o Mapa Único do Plano Rio Grande (MUPRS), plataforma construída para oferecer informações à população sobre endereços, população, equipamentos públicos, mancha de inundação e programas de auxílio relacionados aos eventos climáticos extremos de 2024. O site pode ser acessado em: https://mup.rs.gov.br/ e é a fonte de dados utilizados para esta atividade. O dicionário de dados também está disponível no mesmo repositório.

O objetivo deste relatório é, portanto, o de explorar os dados de municípios e população atingida, relacionando os com auxílios financeiros concedido para famílias vítimas dos eventos extremos e a extensão da área diretamente atingida/ mancha de inundação.

Base de dados: preparação e exploração inicial

Os códigos abaixo detalham as bibliotecas utilizadas na leitura, tratamento, análise e visualização dos dados. Se você não possui algum desses pacotes, é necessário instalá-los antes, com o comando install.packages().

library(readr) # para leitura dos dados
library(dplyr) # para manipulação da base
library(janitor) # para manipulação da base
library(readr) # para manipulação da base
library(ggplot2) # para construção de gráficos
library(plotly) # para interatividade do gráfico
library(sf) # para leitura de dados espaciais
library(geobr) # para dados espaciais do IBGE
library(rmapshaper) # para reduzir a complexidade de objetos espaciais

O próximo passo consiste em carregar a base de dados e explorar as informações apresentadas por cada variável. A base possui 24 variáveis e 497 linhas (excluindo-se o cabeçalho), que correspondem ao número total de municípios no Estado do RS.

# carregar o arquivo.csv
bd_enchentes <- readr::read_csv2("MUPRS_2024-09-03.csv")
# função que apresenta informações gerais sobre as variáveis da base
dplyr::glimpse(bd_enchentes)
## Rows: 497
## Columns: 24
## $ `CODIGO IBGE`                               <dbl> 430003, 430005, 430010, 43…
## $ MUNICÍPIO                                   <chr> "Aceguá", "Água Santa", "A…
## $ `Situação do Município`                     <chr> "Emergência", "Não Homolog…
## $ COREDE                                      <chr> "Campanha", "Nordeste", "C…
## $ `Censo | População Atingida`                <dbl> 7, 13, 3084, 12, 1, 468, 1…
## $ `Censo | População Total`                   <dbl> 4170, 3912, 16041, 6720, 6…
## $ `Censo | Domicílios Particulares Atingidos` <dbl> 3, 4, 1012, 6, 1, 182, 89,…
## $ `Censo | Total de Domicílios Particulares`  <dbl> 2123, 1596, 7368, 2989, 32…
## $ `Censo | Endereços Atingidos`               <dbl> 4, 6, 1066, 7, 2, 208, 92,…
## $ `Censo | Total de Endereços`                <dbl> 3075, 2268, 8313, 3597, 38…
## $ `CADUnico | Famílias Atingidas`             <dbl> NA, 4, 157, NA, NA, 119, N…
## $ `CADUnico | Total Famílias`                 <dbl> 884, 541, 2152, 684, 1480,…
## $ `CADUnico | Pessoas Atingidas`              <dbl> NA, 4, 345, NA, NA, 285, N…
## $ `CADUnico | Total Pessoas`                  <dbl> 2142, 1233, 4741, 1498, 31…
## $ `CNPJ | CNPJs Atingidos`                    <dbl> NA, NA, 38, NA, NA, 23, NA…
## $ `CNPJ | Total de CNPJs`                     <dbl> 555, 300, 1375, 619, 390, …
## $ `Equipamentos | Equipamentos Atingidos`     <dbl> NA, NA, 2, NA, NA, NA, NA,…
## $ `Equipamentos | Total de Equipamentos`      <dbl> 11, 9, 25, 17, 13, 108, 13…
## $ `Malha Rodoviária | Km Atingidos`           <dbl> 20, 1, 160, 3, 4, 41, 1, 0…
## $ `Malha Rodoviária | Total de KM`            <dbl> 654, 429, 924, 455, 624, 3…
## $ `Volta por Cima | Nº de Auxílios`           <dbl> 1, NA, 220, 3, 1, 319, NA,…
## $ `Volta por Cima | Valor Total (R$)`         <chr> "R$ 2.500,00", NA, "R$ 550…
## $ `SOS RS | Nº de Auxílios`                   <dbl> NA, NA, 69, NA, NA, NA, NA…
## $ `SOS RS | Valor Total (R$)`                 <chr> NA, NA, "R$ 138.000,00", N…
# função que padroniza de forma simples e rápida o nome das variáveis da base
bd_enchentes <- janitor::clean_names(bd_enchentes)
colnames(bd_enchentes)
##  [1] "codigo_ibge"                            
##  [2] "municipio"                              
##  [3] "situacao_do_municipio"                  
##  [4] "corede"                                 
##  [5] "censo_populacao_atingida"               
##  [6] "censo_populacao_total"                  
##  [7] "censo_domicilios_particulares_atingidos"
##  [8] "censo_total_de_domicilios_particulares" 
##  [9] "censo_enderecos_atingidos"              
## [10] "censo_total_de_enderecos"               
## [11] "cad_unico_familias_atingidas"           
## [12] "cad_unico_total_familias"               
## [13] "cad_unico_pessoas_atingidas"            
## [14] "cad_unico_total_pessoas"                
## [15] "cnpj_cnp_js_atingidos"                  
## [16] "cnpj_total_de_cnp_js"                   
## [17] "equipamentos_equipamentos_atingidos"    
## [18] "equipamentos_total_de_equipamentos"     
## [19] "malha_rodoviaria_km_atingidos"          
## [20] "malha_rodoviaria_total_de_km"           
## [21] "volta_por_cima_no_de_auxilios"          
## [22] "volta_por_cima_valor_total_r"           
## [23] "sos_rs_no_de_auxilios"                  
## [24] "sos_rs_valor_total_r"

Podemos observar que a maioria das variáveis da base são quantitativas. Outras, demandam algum tipo de tratamento, pois apesar de representarem valores pagos (como a sos_rs_valor_total_r), a presença de “R$” transforma a variável em tipo texto.

Alguns outros exemplos:

Qualitativas nominais: municipio, situacao_do_municipio e corede;

Quantitativas discretas: volta_por_cima_no_de_auxilios e sos_rs_no_de_auxilios;

Quantitativas contínuas: censo_populacao_total, sos_rs_valor_total_r e cad_unico_familias_atingidas

Os comandos abaixo possibilitam verificar o % de municípios, pessoas, equipamentos públicos e cnpj’s atingidos. Vejamos primeiro a situção dos municípios. Quando as enchentes atingiram o Estado, os municípios publicaram decretos declarando ou situação de emergência ou situação de calamidade. Após esses atos normativos, coube ao Estado homologar ou não os decretos. A coluna situacao_do_municipio traz essa informação. Ou seja, para fins de mapeamento e política pública, foi a homologação do Estado que validou se o município foi afetado pelas enchentes ou não.

# municipios
bd_enchentes |> group_by(situacao_do_municipio) |> 
                summarise("Qtd. Mun." = n())
## # A tibble: 3 × 2
##   situacao_do_municipio `Qtd. Mun.`
##   <chr>                       <int>
## 1 Calamidade                     95
## 2 Emergência                    357
## 3 Não Homologado                 45
# outra opção de código para dados relativos

round(prop.table(table(bd_enchentes$situacao_do_municipio))*100,1)
## 
##     Calamidade     Emergência Não Homologado 
##           19.1           71.8            9.1
# criando uma nova variável binária para identificar municípios afetados ou não
bd_enchentes <- bd_enchentes |> mutate(
  'mun_afetado' = ifelse(situacao_do_municipio == "Não Homologado", 0,1)
)
sum(bd_enchentes$mun_afetado)
## [1] 452
# obtendo o percentual do nº de mun. afetados em relação ao total de mun.
round((sum(bd_enchentes$mun_afetado)/nrow(bd_enchentes))*100,2)
## [1] 90.95
# obtendo o percentual de pessoas registradas no Cadastro Único atingidas
round((sum(bd_enchentes$cad_unico_pessoas_atingidas, na.rm = TRUE)/sum(bd_enchentes$cad_unico_total_pessoas, na.rm = TRUE))*100,2)
## [1] 12.51

Os comandos abaixo apresentam quais foram os 10 municípios mais afetados em termos populacionais, de equipamentos públicos e de CNPJs, respectivamente

# municípios
bd_enchentes |> group_by(municipio) |> 
  summarise("Qtd. Pop. Atingida" = sum(censo_populacao_atingida, na.rm = TRUE)) |>
  arrange(desc(`Qtd. Pop. Atingida`)) |> slice_head(n = 10)
## # A tibble: 10 × 2
##    municipio       `Qtd. Pop. Atingida`
##    <chr>                          <dbl>
##  1 Canoas                        183958
##  2 Porto Alegre                  155111
##  3 São Leopoldo                   96173
##  4 Rio Grande                     71084
##  5 Eldorado do Sul                51631
##  6 Pelotas                        50195
##  7 Guaíba                         32321
##  8 Novo Hamburgo                  29161
##  9 Alvorada                       28711
## 10 Esteio                         20023
# equipamentos públicos
bd_enchentes |> group_by(municipio) |> 
  summarise("Qtd. EP. Atingidos" = sum(equipamentos_equipamentos_atingidos, na.rm = TRUE)) |>
  arrange(desc(`Qtd. EP. Atingidos`)) |> slice_head(n = 10)
## # A tibble: 10 × 2
##    municipio       `Qtd. EP. Atingidos`
##    <chr>                          <dbl>
##  1 Porto Alegre                     214
##  2 Canoas                           121
##  3 Rio Grande                       104
##  4 São Leopoldo                      87
##  5 Eldorado do Sul                   37
##  6 Pelotas                           34
##  7 Igrejinha                         33
##  8 Estrela                           28
##  9 Lajeado                           26
## 10 Charqueadas                       23
# CNPJ's
bd_enchentes |> group_by(municipio) |> 
  summarise("Qtd. CNPJ's Atingidos" = sum(cnpj_cnp_js_atingidos, na.rm = TRUE)) |>
  arrange(desc(`Qtd. CNPJ's Atingidos`)) |> slice_head(n = 10)
## # A tibble: 10 × 2
##    municipio       `Qtd. CNPJ's Atingidos`
##    <chr>                             <dbl>
##  1 Porto Alegre                      28422
##  2 Canoas                            14477
##  3 São Leopoldo                       8574
##  4 Rio Grande                         6934
##  5 Pelotas                            4618
##  6 Igrejinha                          2909
##  7 Eldorado do Sul                    2629
##  8 Lajeado                            2395
##  9 Novo Hamburgo                      2298
## 10 Guaíba                             1962

Auxílios financeiros para famílias atingidas

Uma das medidas adotadas pelo governo estadual logo após o pico das enchentes foi a de pagamento de auxílios financeiros para famílias atingidas. O Volta por Cima (Decreto nº 58.235/2025) e o SOS RS foram dois desses programas. Para recebe-los, a família deveria residir em algum dos municípios afetados e atender a alguns critérios de vulnerabilidade socioeconômica. Os scripts abaixo apresentam as estatísticas descritivas de cada um desses programas e a relação com a situação do município.

# transformando as variáveis de valores para classe numérica
bd_enchentes <- bd_enchentes |> 
  mutate(sos_valores = parse_number(sos_rs_valor_total_r,
                                     locale = locale(decimal_mark = ",")),
         volta_por_cima_valores = parse_number(volta_por_cima_valor_total_r,
                                     locale = locale(decimal_mark = ",")))
class(bd_enchentes$sos_rs_valor_total_r)
## [1] "character"
class(bd_enchentes$sos_valores)
## [1] "numeric"
# estatísticas descritivas 
summary(bd_enchentes$sos_valores)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max.     NA's 
##     2000    48000   158000   827618   680000 13898000      408
summary(bd_enchentes$volta_por_cima_valores)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max.     NA's 
##     2500     7500    37500   947623   282500 57137500      232
# relação entre situação dos municípios (emergência ou calamidade) e quantidade de auxílios concedidos
bd_enchentes |> dplyr::filter(situacao_do_municipio != "Não Homologado") |> 
  group_by(situacao_do_municipio) |> 
  summarise("Qtd. Total Volta por Cima" = sum(volta_por_cima_valores, na.rm = TRUE)) |> 
  ggplot(aes(x = situacao_do_municipio, y = `Qtd. Total Volta por Cima`)) +
  geom_col(fill = "steelblue") + 
  geom_text(aes(label = format(`Qtd. Total Volta por Cima`, 
                               big.mark = ".", 
                               scientific = FALSE)), 
            vjust = 1.5, 
            color = "white") + 
  labs(x = "Situação do município",
       y = "Valores Volta por Cima (R$)")

Podemos aferir também a relação entre a população atingida e os valores transferidos através do Volta por Cima. O histograma obtido para cada uma dessas variáveis indicam uma forte assimetria à direita. Para que um gráfico de dispersão entre as duas fique mais adequado, é necessário transformar ambas as variáveis em logaritmo.

# histogramas
hist(bd_enchentes$censo_populacao_atingida)

hist(bd_enchentes$volta_por_cima_valores)

# gráfico de dispersão com as var. originais

ggplot(bd_enchentes, aes(x = censo_populacao_atingida, 
                         y = volta_por_cima_valores)) +
  geom_point(alpha = 0.6, color = "steelblue") + 
  labs(x = "População atingida",
       y = "Volta por Cima (R$)")

# criando duas novas variáveis logaritmicas
bd_enchentes$pop_atingi_log <- log(bd_enchentes$censo_populacao_atingida)
bd_enchentes$volta_por_cima_log <- log(bd_enchentes$volta_por_cima_valores)

# conferindo novamente a distribuição com as novas variáveis
hist(bd_enchentes$pop_atingi_log)

hist(bd_enchentes$volta_por_cima_log)

ggplot(bd_enchentes, aes(x = pop_atingi_log, 
                         y = volta_por_cima_log)) +
  geom_point(alpha = 0.6, color = "steelblue") + 
  labs(x = "População atingida",
       y = "Volta por Cima (R$)")

Mapa das enchentes

# carregando o mapa do Estado do RS
mun_brasileiros <- geobr::read_municipality(showProgress = FALSE)
mun_rs <- mun_brasileiros |> dplyr::filter(abbrev_state == "RS")
ggplot() + geom_sf(data = mun_rs)

# lendo o arquivo.kml da Área Diretamente Atingida (ADA)
mancha_inund <- sf::read_sf("ADA_SPGG_03092024.kml")
mancha_inund <- rmapshaper:: ms_simplify(mancha_inund, keep = 0.1, keep_shapes = TRUE)

# plotando o mapa de municípios juntos com a mancha de inundação
ggplot() +
  geom_sf(data = mun_rs) +
    geom_sf(data = mancha_inund, fill = "steelblue", alpha = 0.6)

# plotando o mapa focando na região metropolitana de Porto Alegre
ggplot() +
  geom_sf(data = mun_rs) +
    geom_sf(data = mancha_inund, fill = "steelblue", alpha = 0.6) +
  coord_sf(xlim = c(-51.5, -50.7), ylim = c(-30.3, -29.6), expand = FALSE)