```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)

1. Introdução

1.1 Problemática e Motivação

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.

1.3 Abordagem Técnica

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.

1.4 Usuários Finais e Impacto Esperado

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.

2. Pacotes utilizados

2.1 Pacotes

library(tidyverse)
library(janitor)
library(sf)
library(lubridate)
library(leaflet)

2.2 Função dos pacotes

Tidyverse:

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.

Janitor:

Utilizado para limpeza da base de dados, usando funções como clean_names().

Lubridate:

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.

Leaflet:

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.

3. Engenharia e Integração de Dados

3.1 Fonte original dos dados

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

3.2 Explicação e peculiaridades dos dados

3.2.1 - Função

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.

3.2.2 - Estrutura

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.

3.2.3 - Peculiaridades

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.

3.3 Importação e limpeza dos dados

3.3.1 Importação

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)

3.3.2 Leitura dos arquivos brutos

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.

3.3.3 Homogeneização de tipos pré-união

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));

3.3.4 Empilhamento e Tratamento Consolidado

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) 
  )

3.3.5. Carregamento da Malha Digital de Bairros

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))
  )

3.4 Conjunto final

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")
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

3.5 Resumo das variáveis

Os pontos obtidos que serão usados para sequência desse projeto são

data

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.

Bairro

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

Solicitacao

Será utilizada para computar dinamicamente os rankings de demandas públicas, como “VISTORIA”e “COLOCAÇÃO DE LONAS”.

Grau de risco

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.

4 Análise exploratória dos dados

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.

4.1 Distribuição Geográfica

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")
Tela Inicial
Tela Inicial

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.

4.1.2 Filtros (foco nas demandas)

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.

4.2 Tabelas

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)
Top 10 Bairros com Maior Volume de Demandas Conhecidas
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

4.3 Análise além dos dados

4.3.1 A respeito das possíveis causas

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.

Cohab/ibura

Dois unidos

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.

4.3.2 A respeito das remediações

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

2023

2024

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.

4.3.3 Possíveis soluções

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.

5 Conclusão

5.1 Resumo da problemática

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.

5.2 Metodologia

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.

5.3 Insights

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.

5.4 Implicações para os Potenciais Clientes

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:

  • Conectar o servidor do shiny a dados de sensores pluviométricos em tempo real da APAC, relacionando o volume das chuvas a abertura de chamados
  • Utilizar modelos de Machine Learning para predizer a problabilidade de incidentes em determinadas regiões baseada no histórico e informações atuais de chuvas.