```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)
Recife é uma cidade que históricamente sempre sofreu com as chuvas. O período de alta pluviosidade no inverno intensifica os riscos socioambientais, especialemente nas áreas mais periféricas e com geografia desfavorável na cidade. Alagamentos, rios e canais transbordando e principalmente deslizamento em morros, são os eventos que assolam e aterrorizam a população recifense e região. Apesar de não ser um fato exclusivo e recente, é um problema histórico que ainda permanece e continua causando calamidade, logo segue a necessidade de buscar soluções.
A motivação deste estudo surge da necessidade de analisar o comportamento espaço-temporal dessas demandas emergenciais.Torna-se fundamental compreender os padrões de recorrência dos chamados para identificar se as vulnerabilidades são eventos isolados ou persistentes. ## 1.2 Abordagem e Metodologia
A metodologia utilizada consite em uma abordadem quantitativa baseada em dados coletados a partir do dataset aberto da prefeitura do Recife, separarando os dados obtidos em regiões político-administrativas para identificar os bairros mais vulneráveis.
O estudo visa mapear a densidade crônica de chamados por localidade, permitindo avaliar a severidade do risco em diferentes Regiões Político-Administrativas (RPAs)através da análise histórica.
O pipeline será construído utilizando a linguagem R para a extração, tratamento e analise dos dados obtidos dos datasets da prefeitura do Recife.
Para a entrega final, os dados irão alimentar um mapa interativo utilizando o framework Shiny e a biblioteca Leaflet para a plotagem dos pontos de risco.
Os usuários-alvo desta aplicação incluem gestores e engenheiros da Defesa Civil do Recife, planejadores urbanos e auditores de políticas públicas. Espera-se que a ferramenta funcione como um instrumento de suporte à decisão, permitindo a identificação visual imediata de zonas que demandam intervenções estruturais prioritárias e otimizando a alocação de equipes de monitoramento preventivo antes e durante os períodos de alta chuva.
library(tidyverse)
library(janitor)
library(sf)
library(lubridate)
library(leaflet)
Necessário para utilizar o dyplr para selecionar linhas, colunas, dados específicos e agrupamentos. Também utilizará o stringr para tratar os nomes com variações nos datasets.
Utilizado para limpeza da base de dados, usando funções como clean_names().
Permite transformar strings de texto em objetos do tipo Date, viabilizando a extração de componentes de tempo (ano, mês, dia) permitindo realizar filtragens no mapa.
Biblioteca de mapeamento interativo que consome a estrutura geométrica gerada pelo pacote sf. É encarregada de renderizar o mapa do município, aplicar o gradiente de cor baseado no volume de chamados e gerenciar os elementos de interface visual, como pop-ups e destaques de contorno.
Os dados foram obtidos através do portal de Dados Abertos da Prefeitura de Recife. Foram escolhidos 3 datasets de registros de todas as solicitações emergenciais e vistorias registradas no município. Os arquivos foram coletados anualmente, sendo escolhidos os anos de 2022 até 2024, estando disponíveis online.
Também será utilizado o mapa da malha digital dos bairros para integração com os dados obtidos dos datasets anteriores
A função original dos dados é o registro adminstrativo das ocorrências atendidas pelo canal de atendimento da Defesa Civil, das áreas de risco, das vistorias realizadas e da execução do serviço de colocação de lona. O período de coleta inicia-se no ano de 2014 e segue anualmente até 2025.
A estrutura original conta com 16 colunas, sendo elas: - Id, Regional, Ano, Mês, Data, Ocorrência, Solicitacao, Endereco, Bairro, Localidade, Grau_de_Risco, Data_da_Acao, Tipo_da_Acao, Quantidade, Altura, Largura, Area_m.
O conjunto de dados apresenta muitos problemas de padronização nas informações, como diversos campos vazios e sem a presença da tag NA, campos a exemplo de “Ocorrencia”, “Grau_de_Risco” e “Tipo_da_Acao” apresentam diversas linhas sem nenhuma informação.
No dataset do ano de 2022 o campo “Regional” foi completamente preenchido com a informação do ano “2022”, o que atrapalha a ligação com os dados dos anos de 2023 e 2024.
A coluna endereço nos anos de 2024 e 2023 apresentam “sujeira” nos seus campos, a exemplo de “Rua Barra do Sagi, .[?” e “Rua Serra Verde, @}>”. Fora o ano de 2022 que esta mesma coluna apresenta apenas os caracteres presentes no fim dos exemplos anteriores, sem informção da rua.
Para evitar um processo de limpeza repetitivo, optou-se por realizar uma padronização inicial de tipagem nas três bases anuais, unificá-las imediatamente via empilhamento vertical, visto que ambas as 3 apresentam a mesma estrutura diferindo apenas as informações presentes dentro das mesmas, o que pode ser corridigo posteiormente.
Bibliotecas utilizadas
library(tidyverse)
library(janitor)
library(sf)
bruto_2022 <- read_csv2("resources_71967fab-750b-44a9-8a86-405a99eb576c_atendimentos-2022.csv")
## ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
## Rows: 90425 Columns: 16
## ── Column specification ──────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (9): Ano, Data, Ocorrencia, Solicitacao, Endereco, Bairro, Localidade, Gr...
## dbl (2): Regional, Area_m
## num (3): Quantidade, Altura, Largura
## date (2): Mês, Data_da_Acao
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
bruto_2023 <- read_csv2("resources_0f276561-43c2-4233-a539-cbfdd1b38d16_atendimentos-2023.csv")
## ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
## Rows: 83164 Columns: 16── Column specification ──────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (9): Regional, Mês, Ocorrencia, Solicitacao, Endereco, Bairro, Localidade...
## dbl (2): Ano, Area_m
## num (3): Quantidade, Altura, Largura
## date (2): Data, Data_da_Acao
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
bruto_2024 <- read_csv2("resources_bbd37e34-44f7-4c21-a906-e4a2f560a359_atendimentos-2024 (1).csv")
## ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
## Rows: 80173 Columns: 16── Column specification ──────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (9): Regional, Mês, Ocorrencia, Solicitacao, Endereco, Bairro, Localidade...
## dbl (2): Ano, Area_m
## num (3): Quantidade, Altura, Largura
## date (2): Data, Data_da_Acao
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Forçamos a coluna ‘Ano’ para caractere para neutralizar o bug de 2022
base_2022 <- bruto_2022 %>% mutate(Ano = as.character(Ano), Regional = as.character(Regional), Mês = as.character(Mês), Data = as.character(Data));
base_2023 <- bruto_2023 %>% mutate(Ano = as.character(Ano), Regional = as.character(Regional), Mês = as.character(Mês), Data = as.character(Data));
base_2024 <- bruto_2024 %>% mutate(Ano = as.character(Ano), Regional = as.character(Regional), Mês = as.character(Mês), Data = as.character(Data));
defesa_civil_historico <- bind_rows(base_2022, base_2023, base_2024) %>%
clean_names() %>%
filter(!is.na(bairro) & bairro != "") %>%
mutate(
# Decodifica de forma inteligente os formatos misturados das bases
data = parse_date_time(data, orders = c("dmy", "ymd")),
data = as.Date(data)
) %>%
# Remove as 5.544 linhas que vieram corrompidas na base original
filter(!is.na(data)) %>%
mutate(
bairro = str_to_upper(str_trim(bairro)),
solicitacao = str_to_upper(str_trim(solicitacao)),
grau_de_risco = ifelse(grau_de_risco == "" | is.na(grau_de_risco), "NÃO INFORMADO", grau_de_risco)
)
url_geojson <- "resources_5c67ce14-1799-40c4-a37c-9daa04d1761c_bairros-do-recife.geojson"
mapa_recife <- st_read(url_geojson, quiet = TRUE) %>%
clean_names() %>%
mutate(
# Mapeamos a coluna correta (ebairrnome) e a batizamos de 'bairro'
bairro = str_to_upper(str_trim(ebairrnome))
)
Apresenta-se abaixo uma amostragem controlada contendo as 5 primeiras linhas das colunas resultantes da limpeza.
# Seleção estrita das variáveis críticas e amostragem inicial higienizada
amostra_final <- defesa_civil_historico %>%
select(data, bairro, solicitacao, grau_de_risco) %>%
head(5)
# Renderização de tabela limpa para o formato do relatório
knitr::kable(amostra_final, caption = "Amostra Estruturada do Dataset Higienizado")
| data | bairro | solicitacao | grau_de_risco |
|---|---|---|---|
| 2023-04-27 | COHAB | NA | NÃO INFORMADO |
| 2023-04-28 | VARZEA | MONITORAMENTO | R3 |
| 2023-04-28 | VARZEA | MONITORAMENTO | R3 |
| 2023-04-28 | VARZEA | NA | NÃO INFORMADO |
| 2023-04-28 | VARZEA | NA | NÃO INFORMADO |
Os pontos obtidos que serão usados para sequência desse projeto são
De 01/01/2022 a 31/12/2024. Atuará como o principal componente de entrada temporal na interface, permitindo isolar picos de chamados associados a eventos climáticos.
Como a variável de endereço de 2022 não é possível ser analisada, optou-se por fazer a análise pelos bairros, que serviram de base visual para melhor entendimento dos dados obtidos
Será utilizada para computar dinamicamente os rankings de demandas públicas, como “VISTORIA”e “COLOCAÇÃO DE LONAS”.
Classificação geomorfológica de severidade variando de R1 (menor risco) a R4 (alto risco), contendo a categoria tratada “NÃO INFORMADO” para neutralizar a inconsistência de registros originalmente vazios.
Para extrair informações que não estão totalmente evidentes nos registros brutos da Defesa Civil do Recife, foi desenvolvido um aplicativo analítico dividido em duas partes. Foi utilizada amalha geoespacial da cidade do Recife, que apresentam as divisões em bairros, integrada via pacotes de mapas e um painel computacional desenvolvido via ambiente Shiny. O objetivo é permitir que o própio usuário final consiga realizar as próprias pesquisas na infraestrutura urbana, gerando cenários de simulação para tomada de decisão baseados na necessidade atual de quem utiliza o sistema.
Foi realizado a união do dataframe final limpo mostrado no tópico
3.3.4 à malha geométrica digital do município (tópico 3.3.5). O
cruzamento dos dados foi feito por um left join, usando a variável
bairroque foi normalizada, como chave de
correspondência
Utilizando o pacote leaflet, criou-se um mapa de calor
interativo. O mapa usa uma escala de cor do amarelo ao vermelho como uma
escala cromática para indicar a densidade de chamados para determinado
bairro, ou para os bairros que mais aparecem para determinadas
chamadas.
library(leaflet)
library(sf)
# Agrupamento do volume total por bairro
ranking_bairros <- defesa_civil_historico %>%
count(bairro, name = "total_chamados")
# União da geometria com a estatística
mapa_dados <- mapa_recife %>%
left_join(ranking_bairros, by = "bairro") %>%
mutate(total_chamados = coalesce(total_chamados, 0))
paleta <- colorNumeric(palette = "YlOrRd", domain = mapa_dados$total_chamados)
# Renderização do mapa
leaflet(mapa_dados) %>%
addTiles() %>%
addPolygons(
fillColor = ~paleta(total_chamados),
weight = 1, opacity = 1, color = "white", fillOpacity = 0.6,
popup = ~paste0("<strong>Bairro: </strong>", bairro,
"<br><strong>Total de Chamados: </strong>", total_chamados)
) %>%
addLegend(pal = paleta, values = ~total_chamados, title = "Nº de Ocorrências", position = "bottomright")
Os territórios com maior volume de demandas são destacados no mapa (disposto à direita) com matizes cromaticamente mais intensas. Paralelamente, o gráfico de barras (disposto à esquerda) ordena as solicitações mais recorrentes. Os dados demonstram que o bairro da Cohab lidera o acumulado histórico de ocorrências gerais. No vetor de serviços, a realização de vistorias técnicas desponta como a atividade mais requisitada pela população, seguida imediatamente pela colocação de lonas plásticas em áreas de encosta ### 4.1.1 Filtros (foco nos bairros)
Se o usuário tiver interesse por uma localidade especifica, é
possívil selecionar a mesma nas opções de filtro
Ao selecionar um bairro, irá aparecer a sua localização no mapa, o
total de solicitações realizadas no período de tempo determinado e quais
as solicitações mais pedidas em ordem.
Do mesmo modo que você pode fazer uma busca pelos bairros, é possível realizar uma busca inversa. Com isso é possível escolher determinada solicitação como “Colocação de Lonas”, assim será mostrado quais bairros mais pedem essa ação e sua quantidade.
library(knitr)
library(kableExtra)
tabela_top_bairros <- defesa_civil_historico %>%
filter(!is.na(bairro) & bairro != "NA" & bairro != "") %>%
count(bairro, name = "Frequência Absoluta") %>%
arrange(desc(`Frequência Absoluta`)) %>%
head(10) %>%
mutate(`Representação (%)` = round((`Frequência Absoluta` / nrow(defesa_civil_historico)) * 100, 2))
kable(tabela_top_bairros, caption = "Top 10 Bairros com Maior Volume de Demandas Conhecidas", align = "clc") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = FALSE,
position = "center") %>%
column_spec(1, bold = TRUE, border_right = TRUE) %>%
column_spec(2, color = "#3c8dbc", bold = TRUE)
| bairro | Frequência Absoluta | Representação (%) |
|---|---|---|
| COHAB | 25713 | 15.76 |
| DOIS UNIDOS | 20022 | 12.27 |
| NOVA DESCOBERTA | 17687 | 10.84 |
| VARZEA | 8314 | 5.10 |
| VASCO DA GAMA | 7978 | 4.89 |
| AGUA FRIA | 7423 | 4.55 |
| IBURA | 7225 | 4.43 |
| LINHA DO TIRO | 6345 | 3.89 |
| JORDAO | 5580 | 3.42 |
| MACAXEIRA | 5431 | 3.33 |
A partir dos dados obtidos dos datasets e filtrados pelo app shiny, pode-se perceber que nos registros da defesa civil, os dois bairros mais afetados foram o bairro da Cohab e o bairro de Dois Unidos, divisa com Jabotão e Olinda respectivamente.
Umas das causas prováveis dessa alta demanda por lonas e monitoramento, podem ser explicadas pela geografia e demografia da localidade.
Apesar de estes bairros estarem em opostas da cidade, ambos compartilham a mesma assinatura geográfica de encostas íngremes e alta densidade de ocupação.
A segunda ação mais tomada nas solicitações, são a colocação de lonas plásticas nas encostas dos morros.
Analisando a frequência dessa ação em dois anos diferentes podemos ver os seguintes números
A análise revela um padrão de repetição que vai além da simples
flutuação de registros. Em 2023 em 11.607 chamados desse insumo, o
ranking foi composto por Cohab (2.348), Dois Unidos (1.579) e Nova
Descoberta(1.426). Em 2024, mesmo com uma diminuição para 8.679
chamados, o padrão manteve-se o mesmo, trazendo as mesmas três
localidades no topo: Cohab (1.597), Nova Descoberta (1.050) e Dois
Unidos (1.004). Essa persistência mostra uma ligação em comum entre
esses três locais. Mesmo que esses 3 bairros pertençam a diferentes
regiões, ambos foram erguidos sobre áreas de encostas e morros.
A grande quantidade de chamados para colocação de lonas plásticas, que servem como ações emergenciais e temporárias, não é algo isolado, mas sim uma característica em comum que surge como remediação a vunerabilidade do ambiente ante as chuvas.
Já é de conhecimento que a instalação de lonas plásticas é apenas uma resposta e curto prazo para evitar deslizamentos em regiões durante períodos de alta pluviosidade. Por mais que o número venha diminuindo, é necessário acções preventivas efetivas para que seja possível parar de remediar e fazer com que o problema nunca aconteça.
Uma ação preventiva possível é usar os dados históricos para programar vistorias sazonais. Nos meses de verão, o sistema gera ordens de serviço automáticas para os engenheiros visitarem os pontos que historicamente registram picos de chamados severos no inverno.
Outras ações, agora mais estruturais, podem se basear em sistemas de drenagem, já que a água é a maior inimiga dos morros. Quando ela infiltra, o solo pesa e escorrega. A melhor obra preventiva para acompanhar a estabilização é a construção de canaletas escalonadas de concreto nas encostas. Elas captam a água da chuva no topo do morro e a conduzem de forma rápida e segura até o sistema de drenagem da rua, impedindo que o solo fique pesado. Também tem o método mais clássico, que é a substituição da lona plástica por Geomantas ou Telas Verdes. As geomantas ipermeabilizam o solo, impedindo a infiltração. Já as telas verdes se fixam ao solo de forma permanente, permitem que a vegetação rasteira (capim) cresça através delas, e estabilizam a camada superficial do morro por anos, reduzindo drasticamente o custo de manutenção da prefeitura.
Todas essas ações já são aplicadas pela prefeitura, mas podem ser ainda mais efetivas com com precisão estatística e espacial, mostrando, onde e em qual proporção exata esses recursos escassos devem ser pré-alocados de forma proativa antes que a primeira gota de chuva caia, saindo de uma ação puramente reativa para uma preventiva.
Este relatório abordou um problema crônico da cidade do Recife, a vunerabilidade urbana e do gerenciamento de riscos. Utilizando o histórico de chamados da defesa civil do Recife, dos anos de 2022 a 2024, esse trabalho teve o foco em procurar de maneira clara, quais localidades e operações mais demandavam intervenção na logística para previnir novos desastres no inverno.
A metodologia do projeto foi dividida em 3 partes - unificação dos dados de 3 anos diferentes, tipagem de dados cronológicos e aplicação de expressões regulares para padronização de strings categóricas complexas (como nomes de bairros e tipos de solicitações). - Cruzamento da base de dados tratada à malha digital urbana dos bairros(GeoJSON) da Prefeitura do Recife por meio de junções (left join). - Construção de relatórios analíticos e de uma aplicação computacional interativa desenvolvida em Shiny, viabilizando a simulação de cenários preditivos e a filtragem de dados em tempo real.
Os resultados demonstraram que o risco urbano é um problema aleatório na capital. A análise revelou que boa parte das demandas da defesa civil, surgem de vistorias e monitoramentos técnicos e da aplicação de lonas plásticas. Ao realizar a união dos dados de 2023 e 2024, foi mostrado um problema em comum dos locais mais afetados, sendo estes os bairros da Cohab, ibura, Dois Unidos e Nova Descoberta. Estes locais monopolizam os índices de chamados a defesa civil. Foi possível achar esse padrão através da geografia dos ambientes, relevos de encostas com alta densidade demográfica.
Com este projeto foi possível identificar as mesmas vulnerabilidades estruturais que se repetem ao ano. Sabendo onde esses problemas se repetem, o município ganha embasamento para alocar efetivamente protocolos em resposta, implicando na capacidade de alocar ações de prevenção com equipes técnicas de forma proporcional de antecipada nesses pontos geográficos estratégicos, otimizando orçamento e efetivando as ações.
##5.5 Limitações da análise
A principal limitação deste estudo reside no escopo estritamente administrativo e histórico da base de dados utilizada, que carece de cruzamento com variáveis ambientais físicas em tempo real. A tabela do ano de 2022 para anos anteriores apresentaram outros modelos de organização, o que dificultou o cruzamento dos dados com os anos de 2023 e 2024, assim limitando o intervalo de tempo da análise.
Possíveis melhorias que podem ser integradas a esses projeto podem ser: