1 Marco Teórico

El análisis de datos de tráfico es esencial en el contexto urbano actual para mejorar la movilidad y la seguridad vial. Con el crecimiento constante de las ciudades y el aumento en el número de vehículos, es crucial utilizar herramientas y metodologías avanzadas para gestionar el tráfico de manera eficiente.

Las aplicaciones de navegación colaborativa como Waze han revolucionado la recopilación de datos de tráfico. A través de la participación activa de los usuarios, Waze proporciona información en tiempo real sobre las condiciones de las vías, incluyendo reportes de congestión, accidentes, peligros y cierres de vías. Estos datos son valiosos para las autoridades y planificadores urbanos, ya que permiten tomar decisiones informadas basadas en información actual y precisa.

El análisis de datos geoespaciales y la minería de datos son fundamentales para extraer conocimiento de grandes volúmenes de información. Herramientas como R y librerías especializadas como leaflet, spatstat y ggplot2 facilitan el procesamiento y visualización de datos espaciales, permitiendo identificar patrones y tendencias que pueden guiar estrategias para mejorar la infraestructura vial y la gestión del tráfico.


2 Introducción

El presente análisis se enfoca en el estudio de los eventos reportados por los usuarios a través de la aplicación Waze en la zona de la Sabana de Bogotá, Cundinamarca (Colombia), durante el mes de septiembre de 2024. Esta plataforma de navegación colaborativa proporciona datos valiosos sobre las condiciones del tráfico en tiempo real, incluyendo reportes de peligros, congestión, accidentes y cierres de vías.

La información recopilada es esencial para la planificación urbana y la gestión eficiente del tráfico, permitiendo a las autoridades tomar decisiones informadas para mejorar la movilidad y la seguridad vial.

2.1 Objetivo

El objetivo de este análisis es estudiar la distribución espacial y temporal de los eventos reportados en Waze, centrándonos en el día 26 de septiembre de 2024. Se evaluarán y visualizarán los eventos en mapas interactivos, analizando patrones temporales y espaciales. El uso de herramientas de análisis espacial en R, como leaflet para la visualización geoespacial y spatstat para la densidad y distribución de puntos, permitirá crear mapas de calor que resalten las áreas con mayor incidencia de eventos.


3 Metodología

3.1 CRISP-DM

La metodología CRISP-DM (Cross-Industry Standard Process for Data Mining) es un estándar para la ejecución de proyectos de minería de datos. Esta metodología consta de seis fases que guían el proceso desde la comprensión del negocio hasta el despliegue de los resultados.

3.1.1 Fases aplicadas al análisis

1. Comprensión del Negocio

  • Objetivo: Mejorar la movilidad y seguridad vial mediante el análisis de datos de Waze.
  • Necesidad: Identificar patrones de tráfico y áreas críticas para orientar acciones de gestión y planificación urbana.

2. Comprensión de los Datos

  • Recopilación: Se obtienen los datos de eventos reportados en Waze el día 26.
  • Exploración Inicial: Se analiza la estructura de los datos, tipos de eventos, distribución temporal y espacial.

3. Preparación de los Datos

  • Limpieza: Se manejan valores faltantes y se corrigen inconsistencias en las coordenadas.
  • Transformación: Se convierten los formatos de fecha y hora, y se ajustan las coordenadas geográficas (almacenadas como enteros × 10⁶).
  • Enriquecimiento: Se traducen las categorías de eventos al español para facilitar el análisis.

4. Modelado

  • Selección de Técnicas: Se utilizan métodos de análisis espacial y visualización geográfica.
  • Construcción: Se crean mapas interactivos y mapas de calor para visualizar los eventos.

5. Evaluación

  • Interpretación: Se analizan los mapas y gráficos para identificar áreas y horarios críticos.
  • Validación: Se contrastan los hallazgos con el conocimiento previo del territorio.

6. Despliegue

  • Presentación: Se documentan los hallazgos en este informe con visualizaciones interactivas.
  • Implementación: Los resultados pueden ser utilizados por las autoridades para planificar intervenciones.

4 Catálogo de Datos

El conjunto de datos proporcionado por Waze incluye las siguientes variables:

Variable Tipo Descripción
id Numérico Identificador único del registro
creation_Date Fecha-hora Fecha y hora de creación del reporte
type Categórico Tipo de evento: ACCIDENT, HAZARD, JAM, ROAD_CLOSED
subtype Categórico Subtipo detallado del evento
street Texto Nombre de la vía donde ocurrió el evento
location_x Numérico Longitud geográfica × 10⁶
location_y Numérico Latitud geográfica × 10⁶
reliability Numérico Nivel de confiabilidad del reporte (0-10)
reportRating Numérico Calificación del reporte por otros usuarios
country Texto País del evento (CO = Colombia)

Nota técnica sobre coordenadas: El archivo Excel almacena las coordenadas como enteros multiplicados por 10⁶. La conversión a grados decimales es: lat = location_y / 1.000.000, lon = location_x / 1.000.000. Adicionalmente, algunos valores de location_y son interpretados por Excel como fechas (error de formato numérico); esto se corrige en el pre-procesamiento con suppressWarnings(as.numeric(...)).


5 Carga de Datos y Librerías Necesarias

En esta sección se realiza la carga y preparación de los datos obtenidos desde Waze, además de las librerías que se utilizarán a lo largo del documento. Los datos se encuentran almacenados en un archivo Excel y se procesan las fechas de creación de cada evento para asegurarnos de que están en el formato adecuado para realizar análisis temporal.

library(readxl)         # readxl: Para la carga de datos desde archivos Excel
library(dplyr)          # dplyr: Para la manipulación y transformación de datos
library(lubridate)      # lubridate: Para el manejo y procesamiento de fechas y tiempos
library(leaflet)        # leaflet: Para la creación de mapas interactivos
library(leaflet.extras) # leaflet.extras: Para añadir mapas de calor y funciones adicionales
library(sf)             # sf: Para trabajar con datos geoespaciales
library(mapview)        # mapview: Para la visualización interactiva de mapas
library(spatstat)       # spatstat: Para el análisis de patrones espaciales y densidad
library(terra)          # terra: Para el manejo de datos raster y análisis espacial
library(ggplot2)        # ggplot2: Para la creación de gráficos y visualizaciones
library(leafsync)       # leafsync: Para la sincronización de múltiples mapas interactivos
# Cargar los datos de Waze
Trama_Waze <- read_excel("C:/Users/kcv06/OneDrive/Documentos/II Semestre/Análisis Geografico/Actividad 4/Trama Waze - Copy (2).xlsx")

# Convertir la columna de fechas a formato adecuado
Trama_Waze$fecha <- as.Date(Trama_Waze$creation_Date)

# Extraer la hora y el día
fecha_hora <- ymd_hms(Trama_Waze$creation_Date)
hora       <- hour(fecha_hora)
dia        <- day(fecha_hora)

Trama_Waze$hora <- hora
Trama_Waze$dia  <- dia

# Cambiar los nombres de los tipos de eventos al español
Trama_Waze$tipo_evento <- recode(
  Trama_Waze$type,
  "ACCIDENT"    = "ACCIDENTE",
  "HAZARD"      = "PELIGRO",
  "JAM"         = "CONGESTIÓN",
  "ROAD_CLOSED" = "VÍA CERRADA"
)

# Convertir coordenadas (almacenadas como enteros × 10⁶)
Trama_Waze$lat  <- suppressWarnings(as.numeric(Trama_Waze$location_y)) / 1e6
Trama_Waze$long <- suppressWarnings(as.numeric(Trama_Waze$location_x)) / 1e6

cat("Total de registros cargados:", nrow(Trama_Waze), "\n")
## Total de registros cargados: 5070
cat("Con coordenadas válidas:",
    sum(Trama_Waze$lat > 4 & Trama_Waze$lat < 5.5 &
        Trama_Waze$long > -75 & Trama_Waze$long < -73, na.rm = TRUE), "\n\n")
## Con coordenadas válidas: 3815
cat("Distribución por tipo de evento:\n")
## Distribución por tipo de evento:
print(table(Trama_Waze$tipo_evento))
## 
##   ACCIDENTE  CONGESTIÓN     PELIGRO VÍA CERRADA 
##         125        3205         719        1021

6 Análisis Temporal de los Eventos

El análisis temporal es una de las primeras aproximaciones que se realiza en los datos, permitiendo identificar patrones en la distribución de eventos a lo largo del día. En esta sección, se extraen las horas y los días a partir de los datos originales utilizando la librería lubridate. Esto facilita el filtrado de eventos en fechas y horas específicas.

El objetivo es analizar si existen concentraciones de eventos en ciertas franjas horarias y cómo estos se distribuyen a lo largo del día 26, lo que podría revelar horas pico de congestión o momentos críticos con mayor cantidad de accidentes.

hora_factorizado <- factor(hora, levels = 0:23)

g_hora <- ggplot(mapping = aes(x = hora_factorizado)) +
  geom_bar(fill = "orange", color = "black") +
  labs(
    title   = "Frecuencia de Eventos por Hora del Día",
    subtitle = "Todos los días disponibles en la base de datos",
    x       = "Hora del Día",
    y       = "Frecuencia (Conteo)"
  ) +
  theme_minimal() +
  scale_x_discrete(drop = FALSE) +
  theme(plot.title = element_text(face = "bold", size = 14))

g_hora


7 Distribución de Eventos

En esta sección se presenta un análisis descriptivo de los tipos de eventos registrados en los datos de Waze. Se genera una visualización en forma de gráfico de barras que muestra la frecuencia de los diferentes tipos de eventos, como trancones, peligros, accidentes y cierres de vías.

Este análisis es clave para identificar qué eventos son más frecuentes y cuáles requieren mayor atención. Además, proporciona una visión general de las categorías más comunes de eventos reportados por los usuarios y puede influir en la priorización de recursos para la gestión del tráfico.

# Calcular la frecuencia de cada tipo de evento
frecuencia_eventos <- Trama_Waze %>%
  group_by(tipo_evento) %>%
  summarise(Frecuencia = n()) %>%
  arrange(desc(Frecuencia))

# Crear gráfico de barras con ggplot2
ggplot(frecuencia_eventos,
       aes(x = reorder(tipo_evento, -Frecuencia),
           y = Frecuencia, fill = tipo_evento)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = Frecuencia), vjust = -0.5, fontface = "bold") +
  theme_minimal() +
  labs(
    title    = "Distribución de Tipos de Eventos en Trama Waze",
    subtitle = "Total acumulado de todos los días",
    x        = "Tipo de Evento",
    y        = "Frecuencia"
  ) +
  theme(
    axis.text.x  = element_text(angle = 45, hjust = 1),
    legend.title = element_blank(),
    plot.title   = element_text(face = "bold", size = 14)
  ) +
  scale_fill_brewer(palette = "Set2")

# Tabla de frecuencias
cat("\nFrecuencia por tipo de evento:\n")
## 
## Frecuencia por tipo de evento:
print(table(Trama_Waze$tipo_evento))
## 
##   ACCIDENTE  CONGESTIÓN     PELIGRO VÍA CERRADA 
##         125        3205         719        1021

8 Filtrado de Eventos PELIGRO del Día 26

En este apartado, se filtran los eventos de tipo PELIGRO que ocurrieron específicamente el día 26. El propósito es reducir el volumen de datos y centrarse en los eventos de riesgo, lo que permite un análisis más profundo y detallado de estos incidentes.

Este filtrado es esencial para poder focalizar el análisis en los eventos que realmente presentan peligros potenciales en las vías, facilitando así la identificación de las áreas más críticas.

# Identificar eventos PELIGRO del día 26
pos       <- which(Trama_Waze$tipo_evento == "PELIGRO" & dia == 26)
peligro26 <- Trama_Waze[pos, ]

# Filtrar coordenadas válidas
peligro26 <- peligro26 %>%
  filter(lat > 4 & lat < 5, long > -75 & long < -73)

cat("Eventos PELIGRO del día 26:", nrow(peligro26), "\n")
## Eventos PELIGRO del día 26: 96

8.1 Visualización de Eventos PELIGRO

Una vez filtrados los eventos PELIGRO, se procede a visualizarlos en un mapa interactivo utilizando la librería leaflet. Este mapa permite explorar las ubicaciones exactas de los peligros reportados, representando los eventos sobre un mapa geográfico y agrupándolos en clusters para mejorar la legibilidad.

Los usuarios pueden interactuar con el mapa, lo que facilita la identificación visual de los puntos con mayor concentración de eventos y ayuda a identificar patrones espaciales en la distribución de peligros.

# Crear un mapa interactivo con leaflet
m26_peligro <- leaflet() %>%
  addTiles() %>%
  addCircleMarkers(
    lng            = peligro26$long,
    lat            = peligro26$lat,
    clusterOptions = markerClusterOptions(),
    label          = as.character(peligro26$hora),
    popup          = paste0(
      "<b>Hora:</b> ", peligro26$hora, "h<br>",
      "<b>Subtipo:</b> ", peligro26$subtype, "<br>",
      "<b>Calle:</b> ", peligro26$street
    )
  ) %>%
  addControl(html = "<h3>🔶 Mapa de Riesgos</h3>", position = "topleft")

m26_peligro

8.2 Análisis Espacial de la Distribución de Riesgos

En esta sección, se realiza un análisis espacial de los eventos PELIGRO del día 26 utilizando herramientas avanzadas como spatstat y terra. El objetivo es estudiar la distribución geográfica de los eventos de riesgo y generar mapas de calor que destaquen las áreas más afectadas.

Este tipo de análisis espacial es crucial para identificar patrones de concentración de eventos y zonas de alto riesgo, lo que puede ser útil para la toma de decisiones en la gestión de tráfico y la planificación urbana.

# Definir la zona de interés (ventana de observación)
zona <- owin(
  xrange = c(-74.04331, -73.9929),
  yrange = c(4.885736, 4.948562)
)

# Crear un patrón de puntos espaciales (ppp) a partir de los eventos PELIGRO
patron_peligro <- ppp(
  x      = peligro26$long,
  y      = peligro26$lat,
  window = zona
)

par(mfrow = c(1, 2))

# Graficar el test de cuadrantes
plot(quadratcount(patron_peligro),
     main = "Patrón de Puntos y Test de Cuadrantes")
points(patron_peligro, col = "red", pch = 20)

# Función K-Estimación
plot(Kest(patron_peligro), main = "Función K-Estimación — PELIGRO")

par(mfrow = c(1, 1))

8.3 Mapa de Calor — PELIGRO

Una de las etapas más importantes del análisis fue la creación de mapas de calor que permitieron identificar las zonas más críticas en términos de peligros. Este mapa fue generado a partir de los patrones de puntos espaciales, resaltando visualmente las áreas con mayor incidencia de eventos.

leaflet(peligro26) %>%
  addProviderTiles("OpenStreetMap") %>%
  addHeatmap(
    lng       = ~long,
    lat       = ~lat,
    intensity = ~hora,
    blur      = 20,
    max       = 0.08,
    radius    = 15
  ) %>%
  addLegend(
    "bottomright",
    title  = "Mapa de Calor de Riesgos",
    colors = c("blue", "green", "yellow", "red"),
    labels = c("Bajo", "Moderado", "Alto", "Muy Alto")
  )

9 Mapa de Densidad de Cierres de Vías

En esta sección se genera un mapa de densidad basado en la distribución espacial de los eventos de cierre de vías (VÍA CERRADA) reportados el día 26. El objetivo de este análisis es identificar las zonas más afectadas por los cierres de vías, lo que puede ayudar en la planificación de desvíos y la optimización de la movilidad urbana.

# Filtrar eventos VÍA CERRADA del día 26
pos            <- which(Trama_Waze$tipo_evento == "VÍA CERRADA" & dia == 26)
via_cerrada_26 <- Trama_Waze[pos, ]

# Ajustar coordenadas y filtrar rango geográfico
via_cerrada_26 <- via_cerrada_26[via_cerrada_26$lat > 4 &
                                   via_cerrada_26$lat < 5, ]

cat("Eventos VÍA CERRADA del día 26:", nrow(via_cerrada_26), "\n")
## Eventos VÍA CERRADA del día 26: 318

9.1 Mapa Interactivo de Cierres de Vías

En esta sección se presenta un mapa interactivo que muestra los eventos de cierre de vías del día 26. Utilizando la herramienta leaflet, se visualizan las ubicaciones de estos eventos en un mapa, donde los usuarios pueden hacer clic en cada marcador para obtener más información sobre el evento.

# Crear el mapa interactivo
m26_via_cerrada <- leaflet(via_cerrada_26) %>%
  addTiles() %>%
  addCircleMarkers(
    lng            = ~long,
    lat            = ~lat,
    clusterOptions = markerClusterOptions(),
    label          = ~as.character(hora),
    popup          = ~paste0(
      "<b>Hora:</b> ", hora, "h<br>",
      "<b>Subtipo:</b> ", subtype, "<br>",
      "<b>Calle:</b> ", street
    )
  ) %>%
  addControl(html = "<h3>🔴 Mapa de Cierre de Vías</h3>", position = "topleft")

m26_via_cerrada

9.2 Análisis Espacial de Cierres de Vías

Esta sección está dedicada al análisis espacial de los cierres de vías utilizando herramientas como spatstat y terra. El objetivo es estudiar cómo están distribuidos geográficamente los eventos de cierre de vías reportados el día 26 y analizar si existen patrones en la concentración de estos eventos.

# Definir la zona de interés
zona <- owin(
  xrange = c(-74.04331, -73.9929),
  yrange = c(4.885736, 4.948562)
)

# Crear el patrón de puntos
patron_via_cerrada <- ppp(
  x      = via_cerrada_26$long,
  y      = via_cerrada_26$lat,
  window = zona
)

par(mfrow = c(1, 2))

# Graficar el test de cuadrantes
plot(quadratcount(patron_via_cerrada),
     main = "Patrón de Puntos y Test de Cuadrantes")
points(patron_via_cerrada, col = "red", pch = 20)

# Función K-Estimación
plot(Kest(patron_via_cerrada), main = "Función K-Estimación — VÍA CERRADA")

par(mfrow = c(1, 1))

9.3 Mapa de Densidad de Cierres de Vías

# Calcular la densidad espacial
im1              <- density(patron_via_cerrada, sigma = 0.01)
mapa_via_cerrada <- rast(im1)
df_via_cerrada   <- as.data.frame(mapa_via_cerrada, xy = TRUE)
colnames(df_via_cerrada) <- c("long", "lat", "intensity")

# Normalizar intensidad entre 0 y 1
df_via_cerrada$intensity <-
  (df_via_cerrada$intensity - min(df_via_cerrada$intensity)) /
  (max(df_via_cerrada$intensity) - min(df_via_cerrada$intensity))

# Mapa interactivo con leaflet
leaflet(df_via_cerrada) %>%
  addProviderTiles("OpenStreetMap") %>%
  addHeatmap(
    lng = ~long, lat = ~lat, intensity = ~intensity,
    blur = 20, max = 1, radius = 15
  ) %>%
  addLegend(
    "bottomright",
    title  = "Mapa de Calor de Cierres de Vías",
    colors = c("blue", "green", "yellow", "red"),
    labels = c("Bajo", "Moderado", "Alto", "Muy Alto")
  )

10 Análisis de Accidentes

En esta sección se realiza un análisis detallado de los eventos de accidentes (ACCIDENTE) ocurridos el día 26. Se filtran estos eventos para enfocarse exclusivamente en los accidentes reportados en esa fecha, con el objetivo de entender mejor su distribución espacial y su impacto en la movilidad.

El análisis de accidentes es crucial para identificar áreas peligrosas y planificar medidas de seguridad vial, como la instalación de señalización adicional o la mejora de la infraestructura vial en zonas críticas.

# Filtrar eventos de accidentes del día 26
pos          <- which(Trama_Waze$tipo_evento == "ACCIDENTE" & dia == 26)
accidente_26 <- Trama_Waze[pos, ]
accidente_26 <- accidente_26[accidente_26$lat > 4 & accidente_26$lat < 5, ]

cat("Eventos ACCIDENTE del día 26:", nrow(accidente_26), "\n")
## Eventos ACCIDENTE del día 26: 36

10.1 Mapa Interactivo de Accidentes

Aquí se presenta un mapa interactivo que muestra los eventos de accidentes del día 26. Al igual que en los mapas anteriores, se utiliza leaflet para visualizar los puntos donde ocurrieron accidentes, permitiendo a los usuarios hacer clic en los marcadores para obtener más detalles sobre cada incidente.

# Crear el mapa interactivo
m26_accidente <- leaflet(accidente_26) %>%
  addTiles() %>%
  addCircleMarkers(
    lng            = ~long,
    lat            = ~lat,
    clusterOptions = markerClusterOptions(),
    label          = ~as.character(hora),
    popup          = ~paste0(
      "<b>Hora:</b> ", hora, "h<br>",
      "<b>Subtipo:</b> ", subtype, "<br>",
      "<b>Calle:</b> ", street
    )
  ) %>%
  addControl(html = "<h3>🚨 Mapa de Accidentes</h3>", position = "topleft")

m26_accidente

10.2 Análisis Espacial de Accidentes

En esta sección se realiza un análisis espacial de los accidentes ocurridos el día 26 utilizando las herramientas spatstat y terra. El objetivo es estudiar cómo se distribuyen geográficamente los accidentes y si hay patrones espaciales en su ocurrencia.

# Definir la zona de interés
zona <- owin(
  xrange = c(-74.04331, -73.9929),
  yrange = c(4.885736, 4.948562)
)

# Crear el patrón de puntos
patron_accidente <- ppp(
  x      = accidente_26$long,
  y      = accidente_26$lat,
  window = zona
)

par(mfrow = c(1, 2))

plot(quadratcount(patron_accidente),
     main = "Patrón de Puntos y Test de Cuadrantes")
points(patron_accidente, col = "red", pch = 20)

plot(Kest(patron_accidente), main = "Función K-Estimación — ACCIDENTE")

par(mfrow = c(1, 1))

10.3 Mapa de Densidad de Accidentes

En esta sección, se genera un mapa de densidad basado en la distribución de los accidentes ocurridos el día 26. Este mapa resalta las áreas con mayor concentración de accidentes, lo que puede ayudar a identificar zonas de alto riesgo en la ciudad.

im1            <- density(patron_accidente)
mapa_accidente <- rast(im1)
df_accidente   <- as.data.frame(mapa_accidente, xy = TRUE)
colnames(df_accidente) <- c("long", "lat", "intensity")

df_accidente$intensity <-
  (df_accidente$intensity - min(df_accidente$intensity)) /
  (max(df_accidente$intensity) - min(df_accidente$intensity))

leaflet(df_accidente) %>%
  addProviderTiles("OpenStreetMap") %>%
  addHeatmap(
    lng = ~long, lat = ~lat, intensity = ~intensity,
    blur = 15, max = 0.5, radius = 10
  ) %>%
  addLegend(
    "bottomright",
    title  = "Mapa de Calor de Accidentes",
    colors = c("blue", "green", "yellow", "red"),
    labels = c("Bajo", "Moderado", "Alto", "Muy Alto")
  )

11 Análisis de Congestión (CONGESTIÓN) el Día 26

En esta sección se analiza la congestión reportada el día 26. Se filtran los eventos de congestión para centrarse en los reportes de ese día y se estudia cómo se distribuyen en términos espaciales y temporales.

El análisis de la congestión es vital para la planificación del tráfico en una ciudad, ya que permite identificar las áreas donde el tráfico es más denso y los momentos del día en que se presentan mayores problemas de movilidad. Estos datos pueden ser utilizados para optimizar la programación de semáforos o la gestión de rutas alternas.

# Filtrar eventos de congestión del día 26
pos           <- which(Trama_Waze$tipo_evento == "CONGESTIÓN" & dia == 26)
congestion_26 <- Trama_Waze[pos, ]
congestion_26 <- congestion_26[congestion_26$lat > 4 &
                                  congestion_26$lat < 5, ]

cat("Eventos CONGESTIÓN del día 26:", nrow(congestion_26), "\n")
## Eventos CONGESTIÓN del día 26: 812

11.1 Mapa Interactivo de Congestión

En esta sección se presenta un mapa interactivo de los eventos de congestión reportados el día 26. Este mapa es útil para explorar visualmente las áreas de la ciudad más afectadas por el tráfico, proporcionando información valiosa para los planificadores urbanos y las autoridades encargadas de la gestión del tráfico.

# Crear el mapa interactivo
m26_congestion <- leaflet(congestion_26) %>%
  addTiles() %>%
  addCircleMarkers(
    lng            = ~long,
    lat            = ~lat,
    clusterOptions = markerClusterOptions(),
    label          = ~as.character(hora),
    popup          = ~paste0(
      "<b>Hora:</b> ", hora, "h<br>",
      "<b>Subtipo:</b> ", subtype, "<br>",
      "<b>Calle:</b> ", street
    )
  ) %>%
  addControl(html = "<h3>🟠 Mapa de Congestión</h3>", position = "topleft")

m26_congestion

11.2 Análisis Espacial de Congestión

Esta sección está dedicada al análisis espacial de los eventos de congestión ocurridos el día 26, utilizando herramientas como spatstat y terra. El objetivo es estudiar la distribución geográfica de estos eventos y entender si hay patrones de congestión que se repiten en ciertas áreas.

# Definir la zona de interés
zona <- owin(
  xrange = c(-74.04331, -73.9929),
  yrange = c(4.885736, 4.948562)
)

# Crear el patrón de puntos
patron_congestion <- ppp(
  x      = congestion_26$long,
  y      = congestion_26$lat,
  window = zona
)

par(mfrow = c(1, 2))

plot(quadratcount(patron_congestion),
     main = "Patrón de Puntos y Test de Cuadrantes")
points(patron_congestion, col = "red", pch = 20)

plot(Kest(patron_congestion), main = "Función K-Estimación — CONGESTIÓN")

par(mfrow = c(1, 1))

11.3 Mapa de Densidad de Congestión

Aquí se genera un mapa de densidad basado en los eventos de congestión del día 26. Este mapa resalta las áreas con mayor densidad de tráfico, proporcionando una visualización clara de los puntos críticos de congestión en la ciudad.

im1             <- density(patron_congestion)
mapa_congestion <- rast(im1)
df_congestion   <- as.data.frame(mapa_congestion, xy = TRUE)
colnames(df_congestion) <- c("long", "lat", "intensity")

df_congestion$intensity <-
  (df_congestion$intensity - min(df_congestion$intensity)) /
  (max(df_congestion$intensity) - min(df_congestion$intensity))

leaflet(df_congestion) %>%
  addProviderTiles("OpenStreetMap") %>%
  addHeatmap(
    lng = ~long, lat = ~lat, intensity = ~intensity,
    blur = 35, max = max(df_congestion$intensity) * 2, radius = 25
  ) %>%
  addLegend(
    "bottomright",
    title  = "Mapa de Calor de Congestión",
    colors = c("blue", "green", "yellow", "red"),
    labels = c("Bajo", "Moderado", "Alto", "Muy Alto")
  )

12 Consolidación de Mapas de Riesgo, Accidentes, Congestión y Cierres Viales

En esta última sección, se consolidan los mapas interactivos creados previamente para mostrar los eventos de peligros, accidentes, congestión y cierres de vías en una sola vista. Esta consolidación facilita la comparación de los diferentes tipos de eventos en una sola interfaz.

La sincronización de estos mapas permite a los usuarios visualizar todos los eventos importantes en un mismo espacio geográfico, lo que es útil para obtener una visión global de los problemas de tráfico y riesgos en la ciudad, y para la planificación de soluciones integrales que aborden múltiples tipos de eventos de manera coordinada.

# Sincronizar los mapas interactivos de distintos tipos de eventos
leafsync::sync(
  m26_peligro,
  m26_accidente,
  m26_congestion,
  m26_via_cerrada
)

13 Conclusión

El análisis realizado sobre los datos proporcionados por Waze para el día 26 de septiembre de 2024 (zona Sabana de Bogotá, Cundinamarca) permite obtener una visión integral de los eventos que afectan la movilidad urbana. A través de la utilización de herramientas de análisis espacial y la visualización en mapas interactivos, se han identificado patrones importantes en la distribución espacial y temporal de estos eventos.

13.1 Puntos Clave

Distribución de Eventos: Se ha observado que los trancones y los cierres de vías son los eventos más frecuentes el día 26, lo que resalta la necesidad de un enfoque coordinado en la gestión del tráfico y la implementación de medidas preventivas en áreas específicas.

Zonas Críticas: Los mapas de densidad muestran zonas de alta concentración de accidentes y cierres de vías, sugiriendo que estas áreas podrían beneficiarse de mejoras en la infraestructura vial, como la instalación de señalización adicional o la reestructuración de rutas.

Congestión: El análisis de la congestión revela que ciertas áreas presentan problemas de tráfico persistentes durante horas pico, lo que destaca la importancia de implementar soluciones como la optimización de los semáforos y la creación de rutas alternativas para aliviar el tráfico.

Riesgos en las Vías: La visualización de eventos PELIGRO permite identificar áreas con alta probabilidad de incidentes relacionados con peligros en las vías, lo que sugiere la necesidad de campañas de concientización para los conductores.

13.2 Recomendaciones

  1. Planificación de Rutas Alternativas: Dado el alto volumen de trancones y cierres de vías en ciertas zonas (corredor Cajicá–Chía–Zipaquirá), se recomienda la creación de rutas alternativas y la mejora en la señalización.

  2. Mejoras en la Infraestructura Vial: Las zonas identificadas con mayor concentración de accidentes y peligros deben ser priorizadas para intervenciones como el mantenimiento de vías, instalación de cámaras de vigilancia o la reubicación de pasos peatonales.

  3. Monitoreo Continuo: Se recomienda un monitoreo continuo de los datos de Waze en tiempo real para detectar eventos a medida que ocurren, lo que facilitaría una respuesta más rápida y eficaz ante situaciones de emergencia o congestión.

13.3 Conclusión Final

El uso de datos crowdsourcing, como los proporcionados por Waze, representa una herramienta valiosa para las autoridades encargadas de la gestión de tráfico. La capacidad de visualizar y analizar eventos en tiempo real permite no solo una respuesta rápida a incidentes, sino también una planificación a largo plazo para mejorar la infraestructura vial y la seguridad en las vías. Este tipo de análisis debería ser integrado en los sistemas de gestión de tráfico de las ciudades para promover una movilidad más segura, eficiente y sostenible.