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