Análise de Acidentes de Trânsito em Recife (2020-2024)

Introdução

1.1 Declaração do problema e relevância

Os acidentes de trânsito representam um dos principais problemas urbanos nas grandes cidades brasileiras. Além de gerar impactos diretos na saúde pública, eles causam prejuízos econômicos, sobrecarga nos serviços de emergência e reduzem a qualidade de vida da população. Na cidade do Recife, em particular, a alta densidade populacional, o aumento do número de veículos e a infraestrutura viária limitada contribuem para um cenário de recorrentes acidentes, muitos deles com vítimas.

O presente estudo busca analisar o comportamento e a evolução dos acidentes de trânsito registrados em Recife ao longo dos últimos anos (2020 a 2024). O objetivo é compreender quando, onde e sob quais condições esses eventos ocorrem com maior frequência, identificando padrões temporais, geográficos e contextuais que possam auxiliar na formulação de políticas públicas de prevenção e melhoria da segurança viária.

Este tema é de grande interesse não apenas para pesquisadores e gestores públicos, mas também para toda a sociedade, uma vez que compreender os fatores associados aos acidentes permite reduzir riscos, salvar vidas e otimizar os investimentos em mobilidade urbana e infraestrutura. Assim, o projeto se propõe a transformar dados abertos em conhecimento útil para apoiar decisões baseadas em evidências.

1.2 Dados utilizados e metodologia empregada

Para abordar o problema proposto, este estudo utiliza conjuntos de dados públicos disponibilizados pela Prefeitura do Recife, referentes aos acidentes de trânsito registrados entre os anos de 2020 e 2024. Cada base contém informações detalhadas sobre data, hora, bairro, tipo de acidente, condições da via, presença de vítimas e características do local. Esses dados foram obtidos em formato CSV e serão combinados em um único conjunto para possibilitar análises temporais e comparativas entre os anos.

A metodologia empregada envolve diversas etapas de tratamento e preparação dos dados, incluindo: - Padronização dos nomes das variáveis e correção de codificação de caracteres; - Conversão de variáveis de data e hora para formatos adequados de análise temporal; - Tratamento de valores ausentes e inconsistências; - Criação de novas variáveis derivadas, como dia da semana, turno do dia e ano do registro; - Junção dos datasets anuais em um único conjunto consolidado.

Após a limpeza e organização dos dados, será conduzida uma análise exploratória com foco em identificar padrões espaciais e temporais dos acidentes, bem como possíveis fatores relacionados à gravidade das ocorrências. Serão utilizados pacotes da linguagem R, principalmente tidyverse, lubridate, ggplot2 e leaflet, para manipulação, visualização e construção de mapas interativos.

Essa abordagem permitirá compreender a distribuição dos acidentes no tempo e no espaço, identificar áreas de maior risco e gerar informações que possam subsidiar ações preventivas e políticas públicas de mobilidade e segurança viária.

1.3 Abordagem proposta e técnicas adotadas

A abordagem proposta neste projeto combina técnicas de análise exploratória de dados com visualização estatística e espacial, buscando identificar padrões que expliquem o comportamento dos acidentes de trânsito em Recife entre 2020 e 2024.

Inicialmente, serão aplicadas técnicas de análise descritiva para sumarizar as informações principais, como número total de acidentes por ano, distribuição por bairros e horários, tipos de ocorrência e gravidade. A partir disso, serão construídos gráficos temporais e comparativos para identificar variações sazonais, horários críticos e tendências de crescimento ou redução ao longo dos anos.

Em seguida, serão utilizadas ferramentas de análise espacial, com o uso de pacotes como leaflet e sf, para gerar mapas de calor e visualizar a concentração geográfica dos acidentes. Essa etapa permitirá identificar bairros ou regiões mais afetadas, auxiliando na interpretação espacial do problema.

Também serão criadas novas variáveis derivadas, como dia da semana, turno do dia e taxa de acidentes com vítimas, de modo a permitir a comparação entre diferentes contextos e tipos de via. Além disso, as condições da pista, a sinalização e o tipo de pavimento serão cruzados com a gravidade das ocorrências, possibilitando observar relações entre infraestrutura e severidade dos acidentes.

Por fim, os resultados serão apresentados por meio de gráficos interativos, tabelas resumidas e mapas temáticos, acompanhados de interpretações claras que relacionem os achados aos desafios de segurança viária da cidade. Essa abordagem exploratória visa transformar os dados em insights úteis para gestores públicos e cidadãos, promovendo uma análise baseada em evidências sobre o trânsito recifense.

1.4 Aplicações e público-alvo da análise

Os resultados obtidos a partir desta análise poderão beneficiar diferentes públicos e instituições envolvidas com mobilidade e segurança viária.

Para os gestores públicos, as informações extraídas podem subsidiar a tomada de decisões baseadas em evidências, como o planejamento de intervenções em cruzamentos perigosos, revisão de limites de velocidade e melhoria da sinalização em áreas críticas. A identificação de padrões temporais e espaciais também pode orientar ações preventivas em períodos e locais de maior risco.

Para os órgãos de trânsito e forças de segurança, a análise possibilita uma compreensão mais clara dos fatores associados aos acidentes com vítimas, contribuindo para campanhas educativas mais direcionadas e estratégias de fiscalização mais eficientes.

Já para os cidadãos e pesquisadores, o estudo oferece uma visão acessível sobre a dinâmica dos acidentes em Recife, estimulando a conscientização sobre comportamentos de risco e promovendo o uso de dados abertos como instrumento de participação social.

Assim, a análise proposta não apenas busca compreender os dados, mas também transformá-los em conhecimento aplicável, capaz de auxiliar na redução de acidentes, preservação de vidas e melhoria da mobilidade urbana.


Pacotes necessários

2.1 Pacotes utilizados

Antes de iniciar a análise, é necessário carregar os pacotes que serão utilizados ao longo do projeto. Estes pacotes fornecem funções para manipulação, visualização e tratamento dos dados, além de ferramentas de formatação para a publicação do relatório.

# Manipulação e limpeza de dados
library(tidyverse)   # Conjunto de pacotes (dplyr, tidyr, readr, ggplot2 etc.)
library(janitor)     # Limpeza de nomes de colunas e inspeção de dados
library(lubridate)   # Manipulação de datas e horários
library(readr)       # Leitura do CSV

# Visualização e gráficos
library(ggplot2)     # Criação de gráficos estatísticos
library(plotly)      # Gráficos interativos
library(leaflet)     # Mapas interativos (visualização espacial)
library(sf)          # Manipulação de dados espaciais (shapefiles e coordenadas)

# Análise descritiva
library(skimr)       # Sumários estatísticos rápidos
library(knitr)       # Formatação de tabelas para o relatório

# Publicação e formatação
library(rmdformats)  # Estilização do markdown

2.2 Finalidade dos pacotes

  • tidyverse: Conjunto central de pacotes para ciência de dados no R. Inclui o dplyr (manipulação), tidyr (organização), readr (importação) e ggplot2 (visualização).

  • janitor: Facilita a limpeza dos nomes das variáveis e a remoção de dados redundantes.

  • lubridate: Simplifica o tratamento e extração de componentes de datas e horários.

  • readr: Pacote projetado para ler de forma rápida e flexível dados retangulares como arquivos CSV

  • ggplot2: Utilizado para criar gráficos estáticos e visualizações exploratórias.

  • plotly: Permite transformar gráficos em versões interativas.

  • leaflet: Cria mapas de calor e visualizações geográficas dos acidentes por bairro.

  • sf: Manipula dados espaciais (como polígonos de bairros e coordenadas geográficas).

  • skimr: Gera estatísticas descritivas resumidas e detalhadas.

  • knitr: Gera tabelas organizadas e integradas ao R Markdown.

  • rmdformats: Responsável por estilizar o relatório final.


Preparação dos dados

3.1 Fonte original dos dados

Os dados utilizados neste projeto foram obtidos por meio do Portal de Dados Abertos da Prefeitura do Recife, disponível em:
http://dados.recife.pe.gov.br/dataset/acidentes-de-transito-com-e-sem-vitimas/

Especificamente, foi utilizada a base denominada “Acidentes de Trânsito – Recife”, que contém registros oficiais de ocorrências atendidas pelos órgãos municipais de trânsito e segurança pública. Cada registro corresponde a um acidente ocorrido em vias do município e inclui informações sobre data, hora, local (bairro e endereço), tipo de ocorrência, condições da via, sinalização, presença de vítimas, e outros atributos relacionados.

O conjunto de dados é atualizado periodicamente pela Prefeitura e reflete informações coletadas no momento das ocorrências, com o objetivo de monitorar a segurança viária, planejar intervenções urbanas e embasar políticas públicas de mobilidade.

Para este projeto, foram considerados os arquivos correspondentes aos anos de 2020, 2021, 2022, 2023 e 2024, disponibilizados em formato CSV. Cada arquivo foi baixado individualmente e posteriormente consolidado em um único conjunto de dados unificado, totalizando milhares de registros.

Esses dados são públicos, abertos e gratuitos, atendendo às diretrizes da Lei de Acesso à Informação (Lei nº 12.527/2011) e da Política Nacional de Dados Abertos.

3.2 Descrição dos dados originais

Os dados originais são provenientes de arquivos CSV disponibilizados no Portal de Dados Abertos da Prefeitura do Recife, contendo registros detalhados de acidentes de trânsito ocorridos na cidade entre os anos de 2020 e 2024.

Cada arquivo anual possui mais de 5.000 registros e aproximadamente 38 variáveis. As colunas representam informações sobre tempo, localização, natureza da ocorrência, situação do atendimento, condições da via e presença de vítimas.

A seguir estão algumas das principais variáveis do conjunto de dados:

Variável Descrição
data Data em que o acidente ocorreu.
hora Horário exato do registro da ocorrência.
bairro Bairro onde o acidente aconteceu.
natureza Tipo de ocorrência (ex.: com vítima, sem vítima).
situacao Situação do registro (finalizado, em andamento etc.).
endereco Endereço ou via principal onde ocorreu o acidente.
condicao_via Estado da pista no momento (seca, molhada, irregular etc.).
iluminacao Condição de iluminação no local (boa, precária, inexistente).
sinalizacao Presença de sinalização de trânsito adequada.
tipo_pavimento Tipo de pavimento da via (asfalto, paralelepípedo etc.).
velocidade_max_via Limite de velocidade da via.
feridos_leves, feridos_graves, mortos Número de vítimas por tipo de gravidade.
complemento Campo textual com informações adicionais (ex.: referências locais).
  • Os arquivos apresentam variações nos nomes das colunas entre anos e diferenças na formatação dos dados, exigindo padronização prévia.

  • Alguns campos contêm valores ausentes (NA) ou inconsistências de preenchimento, especialmente nas variáveis relacionadas à sinalização, condição da via e velocidade máxima. Além disso, há diferenças de codificação de caracteres, o que faz com que alguns acentos e símbolos apareçam incorretos (ex.: “COM VÍTIMA” em vez de “COM VÍTIMA”), tornando necessária a correção de encoding para UTF-8.

O propósito original dos dados é o monitoramento da segurança viária municipal, permitindo que a Prefeitura e órgãos de trânsito acompanhem a frequência, gravidade e distribuição dos acidentes em tempo e espaço. Entretanto, na forma bruta, o dataset não está pronto para análise direta, sendo necessária uma etapa de tratamento e limpeza para padronizar variáveis e eliminar ruídos antes da exploração estatística e visual.

Um exemplo de amostra dos dados originais pode ser visualizado abaixo:

# Importação correta do dataset
library(readr)

dados_2024 <- read_delim(
  "acidentes2024.csv",
  delim = ";",             # delimitador correto
  locale = locale(encoding = "UTF-8"),  # corrige acentuação
  trim_ws = TRUE,           # remove espaços extras,
  show_col_types = FALSE
)

# Visualiza as primeiras linhas
head(dados_2024, 5)
## # A tibble: 5 × 38
##   Protocolo data       hora   natureza   situacao   bairro       endereco numero
##       <dbl> <date>     <time> <chr>      <chr>      <chr>        <chr>    <chr> 
## 1   2929720 2024-01-01 06:05  COM VÍTIMA FINALIZADA VASCO DA GA… AV NORT… <NA>  
## 2   2929730 2024-01-01 09:14  COM VÍTIMA FINALIZADA VASCO DA GA… RUA VAS… 1353  
## 3   2929740 2024-01-01 10:31  COM VÍTIMA FINALIZADA VASCO DA GA… RUA ALT… 290   
## 4   2929800 2024-01-01 04:11  COM VÍTIMA FINALIZADA ARRUDA       AV PROF… <NA>  
## 5   2929850 2024-01-01 06:53  COM VÍTIMA FINALIZADA BOA VIAGEM   AV CONS… 1672  
## # ℹ 30 more variables: detalhe_endereco_acidente <chr>, complemento <chr>,
## #   bairro_cruzamento <chr>, num_semaforo <dbl>, sentido_via <chr>, tipo <chr>,
## #   auto <chr>, moto <chr>, ciclom <chr>, ciclista <chr>, pedestre <chr>,
## #   onibus <chr>, caminhao <chr>, viatura <chr>, outros <chr>, vitimas <chr>,
## #   vitimasfatais <chr>, acidente_verificado <lgl>, tempo_clima <lgl>,
## #   situacao_semaforo <lgl>, sinalizacao <lgl>, condicao_via <lgl>,
## #   conservacao_via <lgl>, ponto_controle <lgl>, situacao_placa <lgl>, …

3.3 Etapas de limpeza e padronização dos dados

A etapa de limpeza é fundamental para garantir que todos os arquivos anuais (2020–2024) estejam no mesmo padrão antes de serem unidos. Durante a inspeção inicial, foi possível observar que alguns anos apresentam:

  • diferenças nos nomes das colunas
  • diferenças nos tipos das variáveis (por exemplo auto e num_semaforo vêm como número em alguns anos e texto em outros)
  • formatações distintas de datas e horários
  • arquivos contendo colunas que não existem em outros anos
  • números registrados com vírgula no lugar de ponto (ex.: "2,0")

Essas inconsistências impedem a união dos dados com bind_rows() e, portanto, precisam ser padronizadas previamente.

A seguir, apresenta-se o processo completo de preparação desses arquivos.


3.3.1 Importação dos arquivos e padronização de nomes

Todos os arquivos foram importados em uma lista, com nomes de colunas padronizados por clean_names().

arquivos <- c(
  "acidentes_2020-novo.csv",
  "acidentes2021.csv",
  "acidentes2022.csv",
  "acidentes2023.csv",
  "acidentes2024.csv"
)

# Colunas que variam entre anos e precisam ser padronizadas como texto
colunas_texto_fixas <- c(
  "num_semaforo",
  "auto", "moto", "ciclom", "ciclista", "pedestre",
  "onibus", "caminhao", "viatura", "outros",
  "vitimas", "vitimasfatais"
)

lista_dados <- lapply(
  arquivos,
  function(arquivo) {

    # Leitura
    df <- read_delim(
      arquivo,
      delim = ";",
      locale = locale(encoding = "UTF-8"),
      trim_ws = TRUE,
      show_col_types = FALSE
    ) |>
      clean_names()

    # Garante colunas fixas
    for (col in colunas_texto_fixas) {
      if (!col %in% names(df)) {
        df[[col]] <- NA_character_
      }
    }

    df |>
      mutate(
        data = ymd(as.character(data)),
        hora = parse_time(
          as.character(hora),
          locale = locale(time_format = "%H:%M:%S")
        ),
        across(all_of(colunas_texto_fixas), as.character),
        across(where(is.character), ~ str_squish(toupper(.x)))
      )
  }
)

3.3.2 União dos datasets (2020–2024)

Após padronizar tipos e normalizar nomes, é possível unir sem erro:

dados_brutos <- bind_rows(lista_dados)

# Verificar se existem registros fora do período de interesse (após 31/12/2024)
registros_fora_periodo <- dados_brutos |>
  filter(data > as.Date("2024-12-31"))

n_fora <- nrow(registros_fora_periodo)

# Remover registros com data posterior a 31/12/2024 (dataset de 2024 veio com inconsistência)
dados_brutos <- dados_brutos |>
  filter(data <= as.Date("2024-12-31"))

3.3.3 Conversão de colunas numéricas que estavam como texto

Algumas variáveis numéricas vinham como “2,0” ou “174,0”. Aqui fazemos a conversão definitiva:

dados_brutos <- dados_brutos |>
  mutate(
    # Transforma "S/N" em NA antes de converter para evitar o warning
    across(all_of(colunas_texto_fixas), ~ na_if(.x, "S/N")),
    
    # Conversão numérica (agora sem o aviso para "S/N")
    across(
      all_of(colunas_texto_fixas), 
      ~ parse_number(.x, locale = locale(decimal_mark = ","))
    )
  )

3.3.4 Criação de novas variáveis úteis para a análise

Foram criadas variáveis derivadas essenciais para análise temporal:

dados_brutos <- dados_brutos |>
    mutate(
        ano = year(data),
        mes = month(data, label = TRUE, locale = "pt_BR"),
        dia_semana = wday(data, label = TRUE, locale = "pt_BR"),
        turno = case_when(
            hour(hora) >= 5  & hour(hora) < 12 ~ "MANHÃ",
            hour(hora) >= 12 & hour(hora) < 18 ~ "TARDE",
            hour(hora) >= 18 & hour(hora) < 24 ~ "NOITE",
            TRUE ~ "MADRUGADA"
        )
    )

3.3.5 Justificativa das etapas aplicadas

  • clean_names() → padroniza nomes para evitar erros por diferença de acentuação ou capitalização.

  • as.character(data/hora) → muitos anos traziam hora como hms, outros como texto.

  • parse_time() + dmy() → unifica o formato de datas e horários para permitir extração de componentes.

  • Forçar colunas para character → evita falhas no bind_rows() por tipos diferentes.

  • parse_number() → converte textos numéricos que usam vírgula como separador decimal.

  • Criação de ano, mês, dia, turno → variáveis essenciais para análises temporais pedidas no projeto.

  • str_squish() + toupper() → remove espaços extras e normaliza categorias (ex.: “Boa Viagem”, “boa viagem”, “BOA_VIAGEM” → “BOA VIAGEM”).

3.3.6 Resultado final da preparação

Neste ponto, todos os anos foram unificados em um único dataset limpo:

  • Datas e horários padronizados

  • Variáveis categóricas normalizadas

  • Colunas numéricas convertidas corretamente

  • Tipos uniformes para permitir análises multianuais

  • Ajuste de inconsistência na base de 2024 (as últimas linhas do dataset apresentavam datas de 2025)

3.4 Apresentação do dataset final

Após todas as etapas de importação, limpeza, padronização e conversão de tipos descritas anteriormente, o conjunto de dados final encontra-se consolidado e pronto para análise.

Apresentamos abaixo uma visão condensada da estrutura dos dados processados. O dataset unificado contém registros de 2020 a 2024, com as colunas padronizadas e novas variáveis temporais criadas.

# Verifica a estrutura dos dados de forma condensada (tipos e primeiras observações)
glimpse(dados_brutos)
## Rows: 18,452
## Columns: 44
## $ data                      <date> 2020-01-01, 2020-01-01, 2020-01-01, 2020-01…
## $ hora                      <time> 00:39:00, 01:04:00, 02:16:00, 02:22:00, 03:…
## $ natureza_acidente         <chr> "SEM VÍTIMA", "SEM VÍTIMA", "SEM VÍTIMA", "S…
## $ situacao                  <chr> "CANCELADA", "FINALIZADA", "FINALIZADA", "FI…
## $ bairro                    <chr> "ÁGUA FRIA", "CORDEIRO", "AREIAS", "BOA VIAG…
## $ endereco                  <chr> "RUA SAO SEBASTIAO", "AV CAXANGA", "AV RECIF…
## $ numero                    <chr> "1687", "1444", NA, NA, NA, NA, NA, NA, "232…
## $ detalhe_endereco_acidente <chr> NA, "AV GENERAL SAN MARTIN", NA, NA, NA, NA,…
## $ complemento               <chr> "EM FRENTE A IGREJA UNIVERSAL", NA, "LADO OP…
## $ bairro_cruzamento         <chr> "ÁGUA FRIA", "CORDEIRO", "AREIAS", "BOA VIAG…
## $ num_semaforo              <dbl> NA, 80, 494, NA, 672, NA, 138, NA, NA, NA, N…
## $ sentido_via               <chr> NA, "SUBURBIO", "SUBURBIO", "CIDADE", "SUBUR…
## $ tipo                      <chr> "COLISÃO", "ABALROAMENTO LONGITUDINAL", "CHO…
## $ descricao                 <chr> "COLISÃO ENTRE DOIS AUTOS S/V", "COLISÃO ENT…
## $ auto                      <dbl> 2, 2, 2, 2, 2, 2, 1, NA, 1, 1, 2, 2, 2, 1, 1…
## $ moto                      <dbl> NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, N…
## $ ciclom                    <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
## $ ciclista                  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
## $ pedestre                  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
## $ onibus                    <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
## $ caminhao                  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, N…
## $ viatura                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
## $ outros                    <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
## $ vitimas                   <dbl> 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 1,…
## $ vitimasfatais             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
## $ acidente_verificado       <chr> NA, "CRUZAMENTO", "LONGO DA VIA", "LONGO DA …
## $ tempo_clima               <chr> NA, "BOM", "BOM", "BOM", "BOM", "BOM", "BOM"…
## $ situacao_semaforo         <chr> NA, "SEM DEFEITO", "SEM DEFEITO", "SEM DEFEI…
## $ sinalizacao               <chr> NA, "PERFEITO ESTADO", "PERFEITO ESTADO", "P…
## $ condicao_via              <chr> NA, "SECA", "SECA", "SECA", "SECA", "SECA", …
## $ conservacao_via           <chr> NA, "PERFEITO ESTADO", "PERFEITO ESTADO", "P…
## $ ponto_controle            <chr> NA, "FAIXA DE PEDESTRE", "FAIXA DE PEDESTRE"…
## $ situacao_placa            <chr> NA, NA, "NÃO HÁ PLACAS", "R-6A", "NÃO HÁ PLA…
## $ velocidade_max_via        <chr> NA, "60 KM/H", NA, NA, NA, NA, NA, "60 KM/H"…
## $ mao_direcao               <chr> NA, "DUPLA", "DUPLA", "ÚNICA", "ÚNICA", "DUP…
## $ divisao_via1              <chr> NA, "CANTEIRO CENTRAL", "CANTEIRO CENTRAL", …
## $ divisao_via2              <chr> NA, NA, NA, NA, "FAIXA SECCIONADA", NA, NA, …
## $ divisao_via3              <chr> NA, NA, NA, NA, "CANTEIRO CENTRAL", NA, NA, …
## $ protocolo                 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
## $ natureza                  <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
## $ ano                       <dbl> 2020, 2020, 2020, 2020, 2020, 2020, 2020, 20…
## $ mes                       <ord> Jan, Jan, Jan, Jan, Jan, Jan, Jan, Jan, Jan,…
## $ dia_semana                <ord> Qua, Qua, Qua, Qua, Qua, Qua, Qua, Qua, Qua,…
## $ turno                     <chr> "MADRUGADA", "MADRUGADA", "MADRUGADA", "MADR…
# Exibe as primeiras 10 linhas da tabela para conferência visual
head(dados_brutos, 10)
## # A tibble: 10 × 44
##    data       hora   natureza_acidente situacao   bairro         endereco numero
##    <date>     <time> <chr>             <chr>      <chr>          <chr>    <chr> 
##  1 2020-01-01 00:39  SEM VÍTIMA        CANCELADA  ÁGUA FRIA      RUA SAO… 1687  
##  2 2020-01-01 01:04  SEM VÍTIMA        FINALIZADA CORDEIRO       AV CAXA… 1444  
##  3 2020-01-01 02:16  SEM VÍTIMA        FINALIZADA AREIAS         AV RECI… <NA>  
##  4 2020-01-01 02:22  SEM VÍTIMA        FINALIZADA BOA VIAGEM     AV BOA … <NA>  
##  5 2020-01-01 03:33  SEM VÍTIMA        FINALIZADA PAISSANDU      AV GOVE… <NA>  
##  6 2020-01-01 04:18  SEM VÍTIMA        FINALIZADA BARRO          AV DR J… <NA>  
##  7 2020-01-01 04:47  SEM VÍTIMA        FINALIZADA PINA           AV CONS… <NA>  
##  8 2020-01-01 09:06  COM VÍTIMA        FINALIZADA PINA           AVENIDA… <NA>  
##  9 2020-01-01 10:07  COM VÍTIMA        FINALIZADA MADALENA       EST DOS… 2328  
## 10 2020-01-01 12:09  SEM VÍTIMA        FINALIZADA NOVA DESCOBER… RUA NOV… 1335  
## # ℹ 37 more variables: detalhe_endereco_acidente <chr>, complemento <chr>,
## #   bairro_cruzamento <chr>, num_semaforo <dbl>, sentido_via <chr>, tipo <chr>,
## #   descricao <chr>, auto <dbl>, moto <dbl>, ciclom <dbl>, ciclista <dbl>,
## #   pedestre <dbl>, onibus <dbl>, caminhao <dbl>, viatura <dbl>, outros <dbl>,
## #   vitimas <dbl>, vitimasfatais <dbl>, acidente_verificado <chr>,
## #   tempo_clima <chr>, situacao_semaforo <chr>, sinalizacao <chr>,
## #   condicao_via <chr>, conservacao_via <chr>, ponto_controle <chr>, …

3.5 Resumo estatístico e qualidade dos dados

Para compreender a distribuição e a qualidade das variáveis após a limpeza, utilizamos a função skim(), que fornece um sumário estatístico completo. Esta análise permite verificar a existência de valores ausentes (n_missing), a amplitude temporal dos registros e a distribuição das variáveis numéricas (média, desvio padrão, mínimos e máximos).

# Gera um sumário detalhado e formatado de todas as variáveis
skim(dados_brutos)
Data summary
Name dados_brutos
Number of rows 18452
Number of columns 44
_______________________
Column type frequency:
character 26
Date 1
difftime 1
factor 2
numeric 14
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
natureza_acidente 11981 0.35 6 12 0 4 0
situacao 1 1.00 8 23 0 9 0
bairro 68 1.00 1 20 0 121 0
endereco 47 1.00 5 46 0 1687 0
numero 9039 0.51 1 23 0 3670 0
detalhe_endereco_acidente 13469 0.27 1 55 0 1375 0
complemento 1411 0.92 2 365 0 15226 0
bairro_cruzamento 69 1.00 1 20 0 121 0
sentido_via 11607 0.37 1 32 0 106 0
tipo 316 0.98 5 25 0 31 0
descricao 14464 0.22 4 351 0 1905 0
acidente_verificado 11285 0.39 5 13 0 8 0
tempo_clima 11168 0.39 3 7 0 3 0
situacao_semaforo 11257 0.39 9 12 0 5 0
sinalizacao 11308 0.39 8 15 0 4 0
condicao_via 11192 0.39 4 7 0 4 0
conservacao_via 11283 0.39 6 15 0 4 0
ponto_controle 11604 0.37 6 17 0 5 0
situacao_placa 11751 0.36 3 25 0 30 0
velocidade_max_via 15934 0.14 3 7 0 16 0
mao_direcao 11346 0.39 5 7 0 3 0
divisao_via1 11513 0.38 5 16 0 8 0
divisao_via2 17701 0.04 5 16 0 7 0
divisao_via3 18323 0.01 5 16 0 7 0
natureza 6472 0.65 10 12 0 3 0
turno 0 1.00 5 9 0 4 0

Variable type: Date

skim_variable n_missing complete_rate min max median n_unique
data 0 1 2020-01-01 2024-12-28 2023-01-13 1803

Variable type: difftime

skim_variable n_missing complete_rate min max median n_unique
hora 2669 0.86 0 secs 86100 secs 09:20:00 1511

Variable type: factor

skim_variable n_missing complete_rate ordered n_unique top_counts
mes 0 1 TRUE 12 Jan: 2003, Fev: 1875, Nov: 1653, Set: 1570
dia_semana 0 1 TRUE 7 Seg: 3001, Ter: 2974, Sex: 2912, Qua: 2819

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
num_semaforo 15536 0.16 1.419280e+03 2362.49 0 200 478 1950 68610 ▇▁▁▁▁
auto 608 0.97 8.400000e-01 0.76 0 0 1 1 9 ▇▂▁▁▁
moto 2400 0.87 7.800000e-01 0.53 0 0 1 1 4 ▃▇▁▁▁
ciclom 4073 0.78 1.000000e-02 0.07 0 0 0 0 1 ▇▁▁▁▁
ciclista 3940 0.79 5.000000e-02 0.22 0 0 0 0 3 ▇▁▁▁▁
pedestre 3937 0.79 7.000000e-02 0.27 0 0 0 0 5 ▇▁▁▁▁
onibus 3601 0.80 9.000000e-02 0.29 0 0 0 0 3 ▇▁▁▁▁
caminhao 3797 0.79 6.000000e-02 0.24 0 0 0 0 2 ▇▁▁▁▁
viatura 4020 0.78 5.000000e-02 0.24 0 0 0 0 11 ▇▁▁▁▁
outros 4032 0.78 1.000000e-02 0.23 0 0 0 0 24 ▇▁▁▁▁
vitimas 14 1.00 8.400000e-01 0.60 0 0 1 1 11 ▇▁▁▁▁
vitimasfatais 4071 0.78 1.000000e-02 0.11 0 0 0 0 6 ▇▁▁▁▁
protocolo 6472 0.65 1.869535e+09 535829291.18 2929720 2022250730 2023206510 2024160702 2024358320 ▁▁▁▁▇
ano 0 1.00 2.022220e+03 1.53 2020 2021 2023 2024 2024 ▆▃▅▆▇

Análise do sumário:

Com base na tabela acima, destacam-se os seguintes pontos sobre o conjunto de dados consolidado:

  • Dimensão Temporal: A variável data confirma que o dataset cobre todo o período esperado, com registros iniciando em janeiro de 2020 e terminando em dezembro de 2024 (conforme observado nas colunas min e max da seção Date).

  • Completude dos Dados: A coluna n_missing indica o volume de dados ausentes. Variáveis críticas para a identificação do acidente (como data e hora) possuem preenchimento robusto, enquanto colunas específicas (como num_semaforo ou detalhes de sinalizacao) podem apresentar taxas mais altas de valores nulos, o que é esperado dado que nem todo acidente ocorre próximo a um semáforo.

  • Variáveis Numéricas: As colunas de veículos (auto, moto, onibus) e vítimas (vitimas, vitimasfatais) estão corretamente formatadas como numéricas. Os histogramas inline permitem observar rapidamente que a maioria dos acidentes envolve poucos veículos e poucas vítimas (distribuição concentrada à esquerda), mas existem outliers com múltiplos envolvidos que serão investigados na análise exploratória.

  • Variáveis Categóricas: As variáveis de texto (como bairro e natureza) estão padronizadas em caixa alta, evitando a duplicação de categorias por erro de digitação.

Este panorama confirma que os dados estão consistentes e aptos para a etapa de visualização e aprofundamento.


Análise exploratória dos dados

Nesta seção, buscamos responder às perguntas centrais do estudo: quando, onde e como os acidentes ocorrem com maior frequência e gravidade em Recife. Através de visualizações gráficas, investigamos padrões temporais, comportamentais e espaciais.

Evolução temporal e sazonalidade


Para compreender o comportamento dos acidentes ao longo do tempo, avaliamos a distribuição mensal e anual das ocorrências. Essa análise permite identificar tendências, padrões sazonais e possíveis impactos de eventos externos, como mudanças climáticas, fluxos de circulação ou períodos de férias. Ao observar a evolução temporal, é possível antecipar períodos críticos, reforçar campanhas preventivas e alinhar ações de mobilidade urbana com a demanda real.

# Agrupa acidentes por Mês para ver a tendência
acidentes_temporal <- dados_brutos |>
  mutate(data_mes = floor_date(data, "month")) |>
  count(data_mes)

# Visualização da linha do tempo (ajustada para silenciar o aviso)
ggplot(acidentes_temporal, aes(x = data_mes, y = n)) +
  geom_line(color = "#2c3e50", linewidth = 1) +
  geom_smooth(method = "loess", formula = y ~ x, color = "red", se = FALSE, linetype = "dashed") +
  scale_x_date(date_breaks = "6 months", date_labels = "%b/%y") +
  labs(
    title = "Evolução Mensal de Acidentes (2020-2024)",
    subtitle = "Linha azul: total mensal | Linha vermelha: tendência suavizada",
    x = "Data",
    y = "Total de Ocorrências"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Análise: Observando a série histórica, é possível notar inicialmente um pico anormal de acidentes no início de 2020, antes de abril. Essa elevação não reflete um fenômeno real do trânsito, mas sim uma inconsistência da própria base de dados, que inicia o ano de forma incompleta e concentra registros de maneira irregular nas primeiras semanas de março. A partir de abril, quando os dados se estabilizam, é possível interpretar os padrões com maior fidelidade.

Com a estabilização dos registros, observa-se claramente o impacto das restrições de circulação durante a pandemia de COVID-19, que reduziram drasticamente o volume de acidentes ao longo de 2020. Nos anos subsequentes (2021–2024), a curva de tendência (linha vermelha) demonstra uma retomada gradativa e consistente do número de ocorrências, estabilizando-se em um patamar mais elevado. Esse comportamento reforça a necessidade de políticas contínuas de segurança viária, especialmente em um contexto de retorno ao fluxo normal de veículos nas vias urbanas.

Horários críticos



Para identificar em quais momentos do dia os acidentes se concentram, analisamos a distribuição horária das ocorrências. Esse levantamento permite reconhecer padrões de mobilidade urbana ao longo do dia e revelar períodos de maior exposição ao risco, como horários de deslocamento para trabalho e estudo. Ao observar a variação ao longo das 24 horas, é possível orientar ações de fiscalização, campanhas educativas e ajustes operacionais no trânsito com base nos intervalos de maior demanda viária.

dados_brutos |> 
  mutate(hora_num = hour(hora)) |> 
  filter(!is.na(hora_num)) |>
  ggplot(aes(x = hora_num)) +
  geom_histogram(binwidth = 1, fill = "#34495e") +
  labs(
    title = "Distribuição Horária dos Acidentes",
    x = "Hora do Dia",
    y = "Número de Acidentes"
  ) +
  theme_minimal()

Análise: O histograma mostra que a maior parte dos acidentes ocorre nas primeiras horas da manhã, com um pico claro entre 7h e 10h. Esse período coincide com o deslocamento diário para trabalho e estudo, quando o volume de veículos é alto e o trânsito fica mais congestionado, aumentando a probabilidade de colisões.

Após o meio-dia, o número de acidentes diminui progressivamente e atinge os menores valores durante a noite e madrugada, quando a circulação é menos intensa. Assim, o gráfico reforça que o risco está mais associado ao fluxo elevado de veículos do que aos horários tradicionalmente considerados perigosos, como o período noturno.

Matriz de Risco: Dias e Horários Críticos



Para identificar os momentos de maior risco, cruzamos as variáveis de dia da semana e turno. Esse “mapa de calor” ajuda a direcionar a fiscalização para os horários de pico real.

# Prepara dados para o heatmap
heatmap_dados <- dados_brutos |>
  filter(!is.na(turno), !is.na(dia_semana)) |> 
  count(dia_semana, turno) |>
  # Ordena visualmente os turnos
  mutate(turno = factor(turno, levels = c("MADRUGADA", "NOITE", "TARDE", "MANHÃ")))

# Visualização de Mapa de Calor
ggplot(heatmap_dados, aes(x = dia_semana, y = turno, fill = n)) +
  geom_tile(color = "white") +
  geom_text(aes(label = n), color = "black", size = 3) +
  scale_fill_gradient(low = "#e0f7fa", high = "#006064", name = "Qtd.") +
  labs(
    title = "Concentração de Acidentes: Dia da Semana x Turno",
    subtitle = "Intensidade da cor indica maior volume de registros",
    x = "", 
    y = ""
  ) +
  theme_minimal()

Análise: A matriz evidencia que os dias úteis (segunda a sexta-feira) concentram a maior parte dos acidentes, com destaque para o turno da manhã, que apresenta os maiores números em todos os dias da semana. Esse padrão é compatível com os horários de deslocamento para trabalho, escolas e universidades, quando o volume de veículos e pedestres é significativamente maior. O turno da tarde também mantém valores elevados e relativamente estáveis ao longo da semana, reforçando a associação entre mobilidade urbana diária e aumento do risco de acidentes.

Nos finais de semana, observa-se uma redução geral no volume de ocorrências, embora ainda haja concentração relevante na manhã de sábado e domingo, possivelmente relacionada a atividades de lazer e deslocamentos recreativos. Já a madrugada, embora tenha números menores, registra quantidades expressivas em todos os dias, especialmente de sexta para sábado, o que pode estar associado a fatores como consumo de álcool, menor fiscalização e direção em vias mais vazias, que favorecem comportamentos de risco. Esses padrões reforçam a necessidade de políticas e campanhas focadas em momentos específicos do dia, não apenas em dias isolados da semana.

Gravidade por dia da semana



Para além do volume de acidentes, é essencial entender quando os acidentes são mais graves, isto é, quando resultam em maior número de vítimas. Por isso, calculamos a severidade média por dia da semana, dividindo o total de vítimas pelo número de ocorrências em cada dia. Essa medida permite identificar padrões que não aparecem apenas pela contagem bruta de acidentes, revelando se determinados dias concentram colisões mais sérias e onde políticas de prevenção ou reforço da fiscalização podem ser mais eficazes.

gravidade_dias <- dados_brutos |> 
  group_by(dia_semana) |>
  summarise(
    acidentes = n(),
    total_vitimas = sum(vitimas, na.rm = TRUE),
    severidade_media = total_vitimas / acidentes
  )

knitr::kable(gravidade_dias, caption = "Severidade média por dia da semana")
Severidade média por dia da semana
dia_semana acidentes total_vitimas severidade_media
Dom 1696 1437 0.8472877
Seg 3001 2523 0.8407198
Ter 2974 2511 0.8443174
Qua 2819 2352 0.8343384
Qui 2771 2327 0.8397690
Sex 2912 2425 0.8327610
Sáb 2279 1975 0.8666082

Análise: A tabela revela que a severidade média dos acidentes é relativamente estável ao longo da semana, variando apenas entre 0,83 e 0,87 vítima por acidente. No entanto, dois padrões chamam atenção:

  1. Finais de semana (Domingo e Sábado) apresentam as maiores severidades — 0,847 e 0,866, respectivamente — indicando que, embora ocorram menos acidentes nesses dias, quando acontecem tendem a ser mais graves. Isso sugere relação com fatores como maior velocidade nas vias e comportamento de risco típico do lazer noturno.

  2. Os dias úteis mantêm severidade mais baixa e homogênea, oscilando entre 0,83 e 0,84, reforçando que a maior parte das colisões diárias de trânsito está ligada ao fluxo intenso e não necessariamente à gravidade.

Em resumo: o volume de acidentes é maior durante a semana, mas a gravidade é mais elevada nos fins de semana, o que reforça a necessidade de estratégias de fiscalização específicas para esses períodos.

Fator de Gravidade: Motos vs. Carros



Embora o volume total de acidentes seja importante, a gravidade é o que define o impacto na saúde pública. Abaixo, comparamos a “taxa de vítimas” (média de feridos por acidente) entre diferentes tipos de veículos envolvidos.

# Cria categorização simplificada dos veículos
analise_veiculos <- dados_brutos |>
  mutate(
    tipo_veiculo = case_when(
      moto > 0 ~ "Envolve Motocicleta",
      onibus > 0 ~ "Envolve Ônibus",
      ciclom > 0 | ciclista > 0 ~ "Ciclista/Ciclomotor",
      auto > 0 ~ "Apenas Automóvel",
      TRUE ~ "Outros"
    )
  ) |>
  group_by(tipo_veiculo) |>
  summarise(
    total_acidentes = n(),
    total_vitimas = sum(vitimas, na.rm = TRUE),
    taxa_vitimas = round(total_vitimas / total_acidentes, 2)
  ) |>
  filter(total_acidentes > 100) |> # Filtra categorias muito pequenas
  arrange(desc(taxa_vitimas))

# Gráfico de barras comparativo
ggplot(analise_veiculos, aes(x = reorder(tipo_veiculo, taxa_vitimas), y = taxa_vitimas)) +
  geom_col(aes(fill = tipo_veiculo), show.legend = FALSE) +
  geom_text(aes(label = taxa_vitimas), hjust = -0.2, size = 3.5) +
  scale_fill_brewer(palette = "Set2") +
  coord_flip() +
  ylim(0, 1.5) +
  labs(
    title = "Índice de Severidade por Tipo de Veículo",
    subtitle = "Média de vítimas por cada acidente registrado",
    x = "",
    y = "Média de Vítimas por Acidente"
  ) +
  theme_minimal()

Análise: Uma leitura direta do gráfico mostra que acidentes envolvendo motocicletas são, de longe, os mais severos: em média, cada ocorrência com moto gera mais de uma vítima (1,07). Muito próximos vêm os casos com ciclistas/ciclomotores (1,02 vítima por acidente). Ou seja, quando o usuário é pouco protegido fisicamente (moto ou bicicleta), a chance de haver pelo menos um ferido é praticamente garantida.

Já os acidentes com apenas automóvel apresentam a menor severidade média (0,34 vítima por acidente), indicando que boa parte desses registros são colisões de menor impacto, muitas vezes apenas com danos materiais. Situações com ônibus (0,54) e a categoria “Outros” (0,62) ficam em um patamar intermediário. Em termos de política pública, isso reforça a ideia de que motos e ciclistas são os grupos mais vulneráveis do sistema viário e deveriam ser foco prioritário de campanhas educativas, fiscalização específica (ex.: excesso de velocidade, uso de capacete) e intervenções de engenharia voltadas à proteção desses usuários (faixas exclusivas, redução de velocidade em corredores com alto fluxo de duas rodas, etc.).

Geografia dos Acidentes: Os Bairros Críticos



Por fim, identificamos espacialmente onde o problema é mais agudo. Listamos os 10 bairros com maior frequência absoluta de registros.

# Filtra e conta top 10 bairros
top_bairros <- dados_brutos |>
  filter(!is.na(bairro)) |>
  count(bairro, sort = TRUE) |>
  slice_head(n = 10)

# Gráfico de barras ordenado
ggplot(top_bairros, aes(x = reorder(bairro, n), y = n)) +
  geom_col(fill = "#34495e") +
  coord_flip() +
  labs(
    title = "Top 10 Bairros com Mais Acidentes em Recife",
    subtitle = "Acumulado do período 2020-2024",
    x = "",
    y = "Total de Ocorrências"
  ) +
  theme_minimal()

Análise: A distribuição espacial dos acidentes revela uma forte concentração em bairros com intensa movimentação urbana e presença de grandes corredores viários. Boa Viagem lidera com ampla margem, comportamento explicado pela combinação de fluxo elevado de residentes, turistas, comércio, bares e avenidas de grande porte, como a Domingos Ferreira e a Conselheiro Aguiar. Imbiribeira, Santo Amaro e Afogados também aparecem nas primeiras posições, reforçando o papel dos eixos de mobilidade e terminais de ônibus como pontos críticos para ocorrências de trânsito.

Bairros como Madalena, Boa Vista, Pina e Cordeiro completam a lista, sugerindo que regiões centrais ou próximas a corredores estruturadores da cidade acumulam maior exposição ao risco. Esses achados são relevantes para o planejamento urbano, pois indicam que intervenções localizadas, como melhoria de sinalização, revisão de limites de velocidade, redesenho de cruzamentos e reforço da fiscalização, podem produzir impactos significativos na redução de acidentes. Ao priorizar ações nesses bairros, gestores públicos podem maximizar os resultados com menor custo operacional.


Conclusões

5.1 Retomada do Problema e Metodologia

Este estudo buscou investigar a dinâmica dos acidentes de trânsito na cidade do Recife entre os anos de 2020 e 2024, um problema que impacta diretamente a mobilidade urbana, a saúde pública e a economia local. O objetivo central foi identificar padrões ocultos nos dados que pudessem explicar quando, onde e como esses eventos ocorrem, fornecendo insumos para decisões baseadas em evidências.

Para abordar essa questão, foram utilizados dados abertos governamentais, submetidos a um rigoroso processo de limpeza e padronização (Data Wrangling) utilizando a linguagem R e o ecossistema tidyverse. A metodologia envolveu a unificação de cinco bases anuais distintas, tratamento de inconsistências de formatação e criação de novas variáveis temporais e categóricas, permitindo uma análise exploratória robusta e multidimensional.

5.2 Síntese dos Principais Insights

A análise exploratória revelou padrões que não são evidentes apenas observando os registros brutos:

  1. Resiliência e Retomada: A série histórica mostra a queda abrupta de acidentes em 2020 devido à pandemia, seguida por uma recuperação rápida e estabilização em níveis elevados nos anos posteriores. Isso indica que, com a retomada da circulação, os problemas estruturais do trânsito voltaram a aparecer com a mesma intensidade.

  2. Horário de Maior Risco: A distribuição horária revela um pico claro de acidentes entre 7h e 10h, período correspondente ao deslocamento para trabalho e estudo. Esse padrão reforça que o risco está associado principalmente ao alto volume de tráfego, e não à madrugada, que, apesar de mais associada à gravidade, concentra muito menos ocorrências.

  3. A Vulnerabilidade das Duas Rodas: A taxa média de vítimas por tipo de veículo mostra disparidade clara: motos (1,07) e ciclistas/ciclomotores (1,02) apresentam severidade muito superior a qualquer outro grupo. Já acidentes envolvendo apenas automóveis têm impacto bem menor (0,34). Isso destaca que motociclistas e ciclistas são os usuários mais expostos do sistema viário.

  4. Gravidade Aumentada nos Fins de Semana: Embora o maior volume de acidentes ocorra nos dias úteis, a severidade média é mais alta aos sábados e domingos, indicando que, quando ocorrem fins de semana, os acidentes tendem a ser mais graves — possivelmente por maior velocidade, lazer noturno e menor fiscalização.

  5. Concentração Espacial: A análise geográfica identificou que os acidentes se concentram em poucos bairros, especialmente Boa Viagem, Imbiribeira e outras regiões com grandes corredores urbanos. Isso mostra que o problema não é distribuído de forma homogênea, e que intervenções localizadas podem gerar redução significativa de ocorrências e vítimas.

5.3 Implicações para Gestores e Cidadãos

Os resultados obtidos oferecem diretrizes práticas para os “clientes” desta análise:

  • Para a CTTU e Gestores Públicos: As ações de fiscalização e engenharia de tráfego devem priorizar os 10 bairros identificados, onde o retorno sobre o investimento (em redução de acidentes) seria maior. Além disso, campanhas educativas não devem focar apenas na “Lei Seca” (madrugada), mas também na direção defensiva durante os horários de pico comercial (manhã/tarde).
  • Para o SAMU e Saúde Pública: O perfil de alta severidade dos acidentes com motocicletas reforça a necessidade de preparação específica para traumas ortopédicos e neurológicos, além da necessidade de políticas mais rígidas para habilitação e fiscalização de motociclistas.
  • Para a Sociedade: O estudo evidencia que o risco está presente no deslocamento rotineiro (ir e vir do trabalho), alertando para a necessidade de atenção constante, não apenas em finais de semana ou feriados.

5.4 Limitações e Trabalhos Futuros

Apesar dos insights gerados, a análise possui limitações inerentes aos dados e ao escopo do projeto:

  • Subnotificação: É provável que acidentes leves (sem vítimas) sejam subnotificados, especialmente em horários de menor movimento, o que pode enviesar a análise de volume total.
  • Qualidade dos Dados: A presença de campos como “S/N” (Sem Número) em sinalização ou preenchimento inconsistente de causas prováveis limita a capacidade de inferir a culpabilidade ou a infraestrutura específica do local.
  • Fatores Externos: Esta análise não cruzou os dados com informações meteorológicas (chuva) ou fluxo de veículos (frota circulante), o que permitiria calcular taxas de risco mais precisas (acidentes por veículo-km).

Como sugestão para trabalhos futuros, recomenda-se a aplicação de modelagem geoespacial para identificar cruzamentos críticos específicos (não apenas bairros) e o uso de técnicas de Machine Learning para tentar prever a gravidade do acidente com base nas características da via e do veículo, permitindo uma alocação mais eficiente de ambulâncias e recursos de resgate.