Introducción

El presente análisis estudia los eventos reportados por los usuarios mediante la aplicación Waze. 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.

Dado que su enfoque es brindar información en tiempo real para optimizar las rutas de los usuarios basados en sus reportes, la información recopilada por esta aplicación es muy relevante en términos de la gestión eficiente del tráfico y de optimizar rutas para los ciudadanos, pero también permite generar diagnósticos de movilidad sin tener que realizar levantamiento de información alternativo, lo cual facilita que las autoridades tomen decisiones informadas entorno a la movilidad y la seguridad vial.

Objetivo

El objetivo de este análisis es estudiar la distribución espacial y temporal de los eventos reportados en Waze (entre el 28 y 28 de septiembre de 2024), centrándonos en un día específico (el día 28). Se evaluarán y visualizarán los eventos en un mapa interactivo, 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. A lo largo del análisis se integrarán diversos gráficos y mapas que facilitarán la interpretación de los datos y contribuirán a mejorar la planificación y gestión del tráfico.

Metodología CRISP-DM

Este ejercicio planteado bajo la metodología CRISP-DM cuenta con las siguientes fases:

1. Comprensión del Negocio

Objetivo: Identificar las oportunidades de mejora en 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 de Datos: Se obtienen los datos de eventos reportados en Waze el día 28.

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: Manejo de valores faltantes y corrección de inconsistencias en los datos.

Transformación: Se convierten formatos de fecha y hora, y se ajustan las coordenadas geográficas.

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 del Modelo: Se crean mapas interactivos y mapas de calor para visualizar los eventos.

Evaluación del Modelo: Se verifica que las visualizaciones representen adecuadamente los datos y permitan identificar patrones.

5. Evaluación

Interpretación de Resultados: Se analizan los mapas y gráficos para identificar áreas y horarios críticos.

Validación: Se contrastan los hallazgos con conocimiento previo o datos históricos, si están disponibles.

Determinación de los Próximos Pasos: Se establecen recomendaciones basadas en los resultados obtenidos.

6. Despliegue

Presentación de Resultados: Se documentan los hallazgos en un informe, incluyendo visualizaciones interactivas.

Implementación: Los resultados pueden ser utilizados por las autoridades para planificar intervenciones.

Monitoreo: Se sugiere un seguimiento continuo para actualizar el análisis con nuevos datos.

Metodología

En este análisis se siguen una serie de pasos para garantizar un estudio estructurado y replicable de los eventos reportados por Waze el día 28. A continuación, se detallan las etapas clave del proceso:

Obtención de datos

Los datos utilizados en este análisis fueron obtenidos a partir de la plataforma Waze, que permite la recopilación de eventos reportados por usuarios en tiempo real. Estos eventos incluyen peligros en las vías (PELIGRO), congestión (CONGESTIÓN), accidentes (ACCIDENTE), y cierres de vías (VÍA CERRADA). Los datos fueron proporcionados en un formato Excel, conteniendo información clave como la fecha de creación del evento, tipo de evento y coordenadas geográficas.

Catálogo de Datos

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

creation_Date: Fecha y hora en que se creó el reporte del evento.

type: Tipo de evento reportado, que puede ser uno de los siguientes:

PELIGRO: Reportes de peligros en la vía, como objetos en la carretera, vehículos detenidos, etc.

CONGESTIÓN: Reportes de congestión o trancones en el tráfico.

ACCIDENTE: Reportes de accidentes de tráfico.

VÍA CERRADA: Reportes de cierres de vías.

latitude: Latitud geográfica donde ocurrió el evento.

longitude: Longitud geográfica donde ocurrió el evento.

información_adicional: Información adicional proporcionada por el usuario sobre el evento (si está disponible).

otros_campos: Otras variables relevantes incluidas en el conjunto de datos, como el identificador del evento, estado del evento, confianza, fiabilidad, etc.

Este catálogo de datos proporciona una descripción detallada de las variables que se utilizarán en el análisis, facilitando la comprensión y manipulación de la información.

Carga y Preparación de los Datos

La primera etapa técnica consistió en la carga y limpieza de los datos, utilizando la librería readxl para cargar el archivo de Excel, y la librería lubridate para procesar y estandarizar los datos temporales. Los datos geográficos, como latitud y longitud, se ajustaron para garantizar su correcta visualización en mapas.

Además, se transformaron las fechas al formato adecuado (YYYY-MM-DD HH:MM) para asegurar que las operaciones de filtrado temporal fueran precisas.

Análisis Descriptivo y Exploratorio

Finalizada la etapa anterior, se realizó un análisis descriptivo inicial para entender las características básicas de los eventos, mediante la frecuencia de los diferentes tipos de eventos reportados, permitiendo identificar aquellos más comunes.

Se generaron gráficos de barras utilizando ggplot2 para visualizar la distribución de los eventos y su prevalencia en la muestra de datos. Esta etapa ayudó a identificar patrones generales antes de pasar al análisis geoespacial.

Filtrado y Análisis Temporal

Posteriormente, se filtraron los eventos según la fecha de interés (el día 28). Se eligió el día 28 entre los disponibles en la base de datos considerando que el 28 de septiembre de 2024 fue sábado y usualmente los fines de semana tienen mayor afluencia vehicular y, por tanto, se pueden presentar mayor número de reportes de eventos viales. El análisis temporal se enfocó en estudiar la concentración de eventos en distintas franjas horarias del día, permitiendo identificar momentos críticos, como las horas pico de congestión.

Utilizando lubridate, se extrajeron las horas y días de los eventos, lo que facilitó el análisis de patrones temporales y el filtrado de eventos en fechas específicas.

Análisis Geoespacial y Visualización

El análisis geoespacial se centró en la visualización de los eventos filtrados sobre un mapa utilizando la librería leaflet. Se generaron mapas interactivos para mostrar la distribución de los eventos reportados, tales como peligros, accidentes, cierres de vías y congestión.

Adicionalmente, se crearon mapas de densidad utilizando las herramientas spatstat y terra para estudiar las concentraciones geográficas de estos eventos, resaltando las áreas más afectadas en la ciudad.

Mapas de Calor y Densidad

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, accidentes y congestión. Estos mapas fueron generados a partir de patrones de puntos espaciales utilizando funciones de estimación de densidad. Esto permitió resaltar visualmente las áreas con mayor incidencia de eventos, proporcionando una herramienta clave para la toma de decisiones.

Consolidación de Resultados

Finalmente, se consolidaron los resultados de los análisis en un conjunto de mapas interactivos que integran los diferentes tipos de eventos. La consolidación de estos resultados facilita la comparación y análisis conjunto de los eventos, proporcionando una visión integral de los problemas de tráfico en la ciudad.

Interpretación y Conclusiones

Tras la consolidación de los resultados, se interpretaron los hallazgos clave, identificando las zonas de mayor riesgo y los patrones críticos de congestión y accidentes. Esta información fue utilizada para formular recomendaciones prácticas que ayuden a mitigar los problemas detectados y mejorar la movilidad urbana.

Así mismo se realizó una comparación respecto al análisis desarrollado por Mintic en su cuaderno de movilidad Territorios IA en el siguiente enlace: https://territoriosia.mintic.gov.co/cuaderno-movilidad/

Este análisis comparativo permite identificar comportamientos en los eventos viales que se pueden asociar a la afluencia vehicular dependiendo del día de la semana, lo cual también permite establecer recomendaciones y acciones focalizadas en zonas y en determinados momentos de tiempo.

La metodología empleada permitió llevar a cabo un análisis detallado y replicable, brindando una base sólida para futuras investigaciones en la gestión del tráfico y la seguridad vial.

Carga de Datos y de Librerías Necesarias

Para la carga y preparación de los datos obtenidos desde Waze, se cargan las librerías que se van a usar a lo largo del análisis. Los datos se encuentran almacenados en un archivo Excel. Se observa la estructura de las variables más relevantes para este análisis y se identifica que es necesario convertir las fechas al formato adecuado (YYYY-MM-DD HH:MM), ya que esto permitirá realizar un análisis temporal preciso y ordenado.

Carga de datos

# Fijar directorio de trabajo
here()
## [1] "C:/Electiva_MCD/Actividad_4"
# Cargar los datos de Waze
Trama_Waze = read_excel("Trama Waze.xlsx")

# Convertir la columna de fechas a formato adecuado
Trama_Waze$fecha = as.Date(Trama_Waze$creation_Date, format ="%Y-%m-%d %H:%M")

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

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 28, lo que podría revelar horas pico de congestión o momentos críticos con mayor cantidad de accidentes.

# Convertir la fecha y extraer la hora y el día
fecha_hora = ymd_hms(Trama_Waze$creation_Date)
hora = hour(fecha_hora)
dia = day(fecha_hora)

# Agregar la columna de hora a los datos
Trama_Waze$hora = hora

# Mostrar la tabla de frecuencia de tipos de eventos
table(Trama_Waze$tipo_evento)
## 
##   ACCIDENTE  CONGESTIÓN     PELIGRO VÍA CERRADA 
##         125        3205         719        1021

Distribución de Eventos

A continuació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 en Trama_Waze
frecuencia_eventos <- Trama_Waze %>%
  group_by(tipo_evento) %>%                 # Agrupar por tipo de evento
  summarise(Frecuencia = n()) %>%     # Contar la frecuencia de cada tipo
  arrange(desc(Frecuencia))           # Ordenar por frecuencia descendente

# Crear un gráfico de barras con ggplot2 usando los datos de Trama_Waze
ggplot(frecuencia_eventos, aes(x = tipo_evento, y = Frecuencia, fill = tipo_evento)) +
  geom_bar(stat = "identity") +
  theme_minimal() +
  labs(title = "Distribución de Tipos de Eventos en Trama Waze", 
       x = "Tipo de Evento", y = "Frecuencia") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +  # Rotar etiquetas para mejor visualización
  scale_fill_brewer(palette = "Set2")  # Utilizar una paleta de colores predefinida

Comportamiento de cada evento por horas del día

A continuación se presenta un análisis de la frecuencia de cada uno de los eventos teniendo en cuenta las horas de reporte, lo cual facilita identificar si existe alguna tendencia de uno de los eventos en particular que dependa de la hora del día.

# Calcular la frecuencia de cada evento por hora
frec_hora <- Trama_Waze %>%
  group_by(tipo_evento, hora) %>%
  summarise(frecuencia = n(), .groups = "drop")

# Graficar para cada evento la frecuencia por hora
graficos <- frec_hora %>%
  group_split(tipo_evento) %>%  
  lapply(function(data_ev) {

    ggplot(data_ev,
           aes(x = hora, y = frecuencia)) +
      geom_col(fill = "steelblue") +       # gráfico de barras
      scale_x_continuous(breaks = 0:23) +
      labs(
        title = paste("Frecuencia horaria de", unique(data_ev$tipo_evento)),
        x = "Hora del día",
        y = "Frecuencia"
      ) +
      theme_minimal(base_size = 14)
  })

# Visualizar los gráficos

graficos[[1]]  # ACCIDENTE

graficos[[2]]  # CONGESTIÓN

graficos[[3]]  # PELIGRO

graficos[[4]]  # VIA CERRADA

Filtrado de Eventos PELIGRO del Día 28

En este apartado, se filtran los eventos de tipo PELIGRO que ocurrieron específicamente el día 28. 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. Como se mencionó previamente, se eligió el día 28 considerando que el 28 de septiembre de 2024 fue sábado y usualmente los fines de semana tienen mayor afluencia vehicular y, por tanto, se pueden presentar mayor número de reportes de eventos viales.

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 28
pos <- which(Trama_Waze$tipo_evento == "PELIGRO" & dia == 28)
peligro28 <- Trama_Waze[pos,]

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.

# Ajustar las coordenadas de latitud y longitud
peligro28$lat <- peligro28$location_y / 10^(nchar(peligro28$location_y) - 1)
peligro28$long <- peligro28$location_x / 10^(nchar(peligro28$location_x) - 3)

# Filtrar eventos dentro del rango geográfico adecuado
peligro28 <- peligro28[peligro28$lat > 4 & peligro28$lat < 5,]

# Crear un mapa interactivo con leaflet
m28_peligro <- leaflet() %>%
  addTiles() %>%
  addCircleMarkers(lng = peligro28$long, lat = peligro28$lat,
                   clusterOptions = markerClusterOptions(),
                   label = peligro28$hora) %>%
  addControl(html = "<h3>Mapa de Riesgos</h3>", position = "topleft")

# Mostrar el mapa
m28_peligro

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 28 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.

# Filtrar datos relevantes de peligro28
peligro28 <- peligro28 %>%
  filter(lat > 4 & lat < 5, long > -75 & long < -73)  # Ajustar las coordenadas de interés

# Crear un mapa interactivo con leaflet y addHeatmap
leaflet(peligro28) %>%
  addProviderTiles("OpenStreetMap") %>%  # Añadir la capa base del mapa
  addHeatmap(
    lng = ~long, lat = ~lat,               # Especificar las columnas de longitud y latitud
    intensity = ~hora,                     # Intensidad opcional basada en la hora (o cualquier otra variable)
    blur = 20,                             # Nivel de desenfoque del mapa de calor
    max = 0.08,                            # Ajustar el valor máximo para la intensidad
    radius = 15                            # Radio de cada punto en el mapa de calor
  ) %>%
  addLegend("bottomright",                 # Añadir leyenda
            title = "Mapa de Calor de Riesgos",
            colors = c("blue", "green", "yellow", "red"),
            labels = c("Bajo", "Moderado", "Alto", "Muy Alto"))

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 (VIA CERRADA) reportados el día 28. El objetivo de este análisis es identificar las zonas más afectadas por los cierres de vías, particularmente en un día de fin de semana (sábado) lo que puede ayudar en la planificación de desvíos y la optimización de la movilidad urbana.

El mapa de densidad resalta las áreas con mayor número de cierres de vías, proporcionando una visualización clara de las zonas de mayor impacto. Esta información es crucial para que las autoridades tomen decisiones informadas sobre cómo gestionar el tráfico en estas áreas.

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

# Ajustar las coordenadas de latitud y longitud
via_cerrada_28$lat <- via_cerrada_28$location_y / 10^(nchar(via_cerrada_28$location_y) - 1)
via_cerrada_28$long <- via_cerrada_28$location_x / 10^(nchar(via_cerrada_28$location_x) - 3)

# Filtrar eventos dentro del rango geográfico adecuado
via_cerrada_28 <- via_cerrada_28[via_cerrada_28$lat > 4 & via_cerrada_28$lat < 5,]

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 (VIA CERRADA) del día 28. 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, como la hora y las coordenadas exactas.

Este mapa interactivo permite explorar geográficamente las áreas afectadas por los cierres de vías, proporcionando una herramienta visual poderosa para la planificación y gestión del tráfico en la ciudad.

# Crear el mapa interactivo
m28_via_cerrada = leaflet(via_cerrada_28) %>%
  addTiles() %>%
  addCircleMarkers(lng = ~long, lat = ~lat,
                   clusterOptions = markerClusterOptions(),
                   label = ~hora) %>%
  addControl(html = "<h3>Mapa de Cierre de Vías<h3>", position = "topleft")

# Mostrar el mapa interactivo
m28_via_cerrada

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 28 y analizar si existen patrones en la concentración de estos eventos.

Este tipo de análisis ayuda a entender la extensión geográfica de los cierres de vías, lo que puede ser útil para identificar áreas críticas que podrían necesitar intervenciones inmediatas o planificación a largo plazo.

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

# Crear un patrón de puntos espaciales a partir de los eventos VÍA CERRADA
patron_via_cerrada <- ppp(x = via_cerrada_28$long, y = via_cerrada_28$lat, window = zona)
## Warning: data contain duplicated points
# Graficar el test de cuadrantes
plot(quadratcount(patron_via_cerrada), main = "Patrón de Puntos y Test de Cuadrantes")

# Superponer los puntos sobre los cuadrantes
points(patron_via_cerrada, col = "red")

# Gráfico independiente: Función K-Estimación
plot(Kest(patron_via_cerrada), main = "Función K-Estimación")

Mapa de Densidad de Cierres de Vías

Aquí se genera un segundo mapa de densidad basado en los eventos de cierre de vías (VÍA CERRADA), pero con un enfoque más detallado en las áreas de mayor afectación. Este mapa destaca las zonas con la mayor cantidad de eventos de cierre de vías, permitiendo identificar áreas donde los cierres de vías son más frecuentes.

El uso de este mapa es clave para comprender la severidad de los cierres de vías en ciertas áreas de la ciudad y cómo pueden afectar la movilidad en general.

# Asegurarse de que el objeto patron_via_cerrada esté correctamente definido
# Crear un patrón de puntos espaciales utilizando los datos correctos (via_cerrada_28)
zona <- owin(xrange = c(-74.04331, -73.9929), yrange = c(4.885736, 4.948562))
patron_via_cerrada <- ppp(x = via_cerrada_28$long, y = via_cerrada_28$lat, window = zona)

# Calcular la densidad espacial
im1 <- density(patron_via_cerrada, sigma = 0.01)  # Ajusta sigma según sea necesario

# Convertir la densidad a un objeto raster usando terra
mapa_via_cerrada <- rast(im1)

# Convertir el raster a data.frame para leaflet
df_via_cerrada <- as.data.frame(mapa_via_cerrada, xy = TRUE)
colnames(df_via_cerrada) <- c("long", "lat", "intensity")

# Normalizar los valores de 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))

# Crear un mapa interactivo usando leaflet
leaflet(df_via_cerrada) %>%
  addProviderTiles("OpenStreetMap") %>%  # Añadir la capa base
  addHeatmap(
    lng = ~long, lat = ~lat,              # Coordenadas de longitud y latitud
    intensity = ~intensity,               # Intensidad normalizada
    blur = 20,                            # Nivel de desenfoque
    max = 1,                              # Valor máximo de la intensidad normalizada
    radius = 15                           # Radio para reflejar la densidad
  ) %>%
  addLegend("bottomright",                # Añadir la leyenda
            title = "Mapa de Calor de Cierres de Vías",
            colors = c("blue", "green", "yellow", "red"),
            labels = c("Bajo", "Moderado", "Alto", "Muy Alto"))

Análisis de Accidentes

En esta sección se realiza un análisis detallado de los eventos de accidentes (ACCIDENTE) ocurridos el día 28. 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 28
pos <- which(Trama_Waze$tipo_evento == "ACCIDENTE" & dia == 28)
accidente_28 <- Trama_Waze[pos,]

# Ajustar las coordenadas de latitud y longitud
accidente_28$lat <- accidente_28$location_y / 10^(nchar(accidente_28$location_y) - 1)
accidente_28$long <- accidente_28$location_x / 10^(nchar(accidente_28$location_x) - 3)

# Filtrar eventos dentro del rango geográfico adecuado
accidente_28 <- accidente_28[accidente_28$lat > 4 & accidente_28$lat < 5,]

Mapa Interactivo de Accidentes

Aquí se presenta un mapa interactivo que muestra los eventos de accidentes (ACCIDENTE) del día 28. 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.

El mapa interactivo proporciona una herramienta visual para entender la distribución espacial de los accidentes, facilitando la identificación de zonas donde se concentran más incidentes y donde podrían implementarse mejoras para la seguridad vial.

# Crear el mapa interactivo
m28_accidente <- leaflet(accidente_28) %>%
  addTiles() %>%
  addCircleMarkers(lng = ~long, lat = ~lat,
                   clusterOptions = markerClusterOptions(),
                   label = ~hora) %>%
  addControl(html = "<h3>Mapa de Accidentes</h3>", position = "topleft")

# Mostrar el mapa interactivo
m28_accidente

Análisis Espacial de Accidentes

En esta sección se realiza un análisis espacial de los accidentes ocurridos el día 28 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.

Este análisis es importante para identificar áreas donde los accidentes son más frecuentes y así planificar estrategias de mitigación, como mejorar la señalización o realizar cambios en la infraestructura para reducir la probabilidad de accidentes en esas zonas.

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

# Crear un patrón de puntos espaciales a partir de los eventos ACCIDENTE
patron_accidente = ppp(x = accidente_28$long, y = accidente_28$lat, window = zona)

# Gráfico combinado: Test de Cuadrantes y Patrón de Puntos
par(mfrow = c(1, 1))  # Asegurarse de que solo haya una gráfica

# Graficar el test de cuadrantes
plot(quadratcount(patron_accidente), main = "Patrón de Puntos y Test de Cuadrantes")

# Superponer los puntos sobre los cuadrantes
points(patron_accidente, col = "red" )

# Calcular la función K-estimación
plot(Kest(patron_accidente))

Mapa de Densidad de Accidentes

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

El uso de mapas de densidad en el análisis de accidentes es crucial para visualizar las áreas más afectadas y planificar intervenciones que mejoren la seguridad vial. Este tipo de visualización permite observar patrones espaciales que pueden no ser evidentes a través de simples tablas de datos.

# Asegurarse de que el objeto patron_accidente esté correctamente definido
# Usar las coordenadas correctas de los accidentes
zona <- owin(xrange = c(-74.04331, -73.9929), yrange = c(4.885736, 4.948562))
patron_accidente <- ppp(x = accidente_28$long, y = accidente_28$lat, window = zona)

# Calcular la densidad espacial
im1 <- density(patron_accidente)

# Convertir la densidad a un objeto raster usando terra
mapa_accidente <- rast(im1)

# Convertir el raster a data.frame para leaflet
df_accidente <- as.data.frame(mapa_accidente, xy = TRUE)
colnames(df_accidente) <- c("long", "lat", "intensity")

# Normalizar los valores de intensidad entre 0 y 1
df_accidente$intensity <- (df_accidente$intensity - min(df_accidente$intensity)) / 
                          (max(df_accidente$intensity) - min(df_accidente$intensity))

# Crear un mapa interactivo usando leaflet
leaflet(df_accidente) %>%
  addProviderTiles("OpenStreetMap") %>%  # Añadir la capa base
  addHeatmap(
    lng = ~long, lat = ~lat,              # Coordenadas de longitud y latitud
    intensity = ~intensity,               # Intensidad normalizada
    blur = 15,                            # Nivel de desenfoque
    max = 0.5,                              # Valor máximo de la intensidad normalizada
    radius = 10                           # Ajustar el radio de los puntos
  ) %>%
  addLegend("bottomright",                # Añadir la leyenda para interpretar el mapa de calor
            title = "Mapa de Calor de Accidentes",
            colors = c("blue", "green", "yellow", "red"),
            labels = c("Bajo", "Moderado", "Alto", "Muy Alto"))

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

En esta sección se analiza la congestión reportada (CONGESTIÓN) el día 28. 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 28
pos <- which(Trama_Waze$tipo_evento == "CONGESTIÓN" & dia == 28)
congestion_28 <- Trama_Waze[pos,]

# Ajustar las coordenadas de latitud y longitud
congestion_28$lat <- congestion_28$location_y / 10^(nchar(congestion_28$location_y) - 1)
congestion_28$long <- congestion_28$location_x / 10^(nchar(congestion_28$location_x) - 3)

# Filtrar eventos dentro del rango geográfico adecuado
congestion_28 <- congestion_28[congestion_28$lat > 4 & congestion_28$lat < 5,]

Mapa Interactivo de Congestión

En esta sección se presenta un mapa interactivo de los eventos de congestión (CONGESTIÓN) reportados el día 28. Utilizando leaflet, se visualizan los puntos de congestión en un mapa geográfico, donde los usuarios pueden interactuar con los marcadores para obtener más detalles sobre los eventos.

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
m28_congestion <- leaflet(congestion_28) %>%
  addTiles() %>%
  addCircleMarkers(lng = ~long, lat = ~lat,
                   clusterOptions = markerClusterOptions(),
                   label = ~hora) %>%
  addControl(html = "<h3>Mapa de Congestión</h3>", position = "topleft")

# Mostrar el mapa interactivo
m28_congestion

Análisis Espacial de Congestión

Esta sección está dedicada al análisis espacial de los eventos de congestión (CONGESTIÓN) ocurridos el día 28, 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.

Este tipo de análisis es importante para identificar las zonas más congestionadas de la ciudad, lo que puede ayudar a las autoridades a tomar decisiones sobre mejoras en la infraestructura o cambios en las rutas de tráfico para aliviar la congestión

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

# Crear un patrón de puntos espaciales a partir de los eventos CONGESTIÓN
patron_congestion <- ppp(x = congestion_28$long, y = congestion_28$lat, window = zona)

# Visualizar el patrón de puntos
par(mfrow = c(1, 1))  # Asegurarse de que solo haya una gráfica

# Graficar el test de cuadrantes
plot(quadratcount(patron_congestion), main = "Patrón de Puntos y Test de Cuadrantes")

# Superponer los puntos sobre los cuadrantes
points(patron_congestion, col = "red")

# Calcular la función K-estimación
plot(Kest(patron_congestion))

Mapa de Densidad de Congestión

Aquí se genera un mapa de densidad basado en los eventos de congestión (CONGESTIÓN) del día 28. 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.

El mapa de densidad es una herramienta útil para los planificadores urbanos y las autoridades de tránsito, ya que permite visualizar los focos de tráfico más problemáticos y evaluar posibles soluciones para mejorar la fluidez del tránsito.

# Definir el patrón de puntos
zona <- owin(xrange = c(-74.04331, -73.9929), yrange = c(4.885736, 4.948562))
patron_congestion <- ppp(x = congestion_28$long, y = congestion_28$lat, window = zona)

# Calcular la densidad espacial del patrón de puntos
im1 <- density(patron_congestion)

# Convertir la densidad en un raster utilizando terra
mapa_congestion <- rast(im1)

# Convertir el objeto raster a un data.frame para usarlo en leaflet
df_congestion <- as.data.frame(mapa_congestion, xy = TRUE)
colnames(df_congestion) <- c("long", "lat", "intensity")

# Normalizar los valores de intensidad entre 0 y 1
df_congestion$intensity <- (df_congestion$intensity - min(df_congestion$intensity)) / 
                           (max(df_congestion$intensity) - min(df_congestion$intensity))

# Crear un mapa interactivo usando leaflet
leaflet(df_congestion) %>%
  addProviderTiles("OpenStreetMap") %>%  # Añadir la capa base
  addHeatmap(
    lng = ~long, lat = ~lat,              # Coordenadas de longitud y latitud
    intensity = ~intensity,               # Intensidad normalizada
    blur = 35,                            # Incrementar el desenfoque para suavizar el mapa
    max = max(df_congestion$intensity) * 2,  # Ajustar el valor máximo de intensidad
    radius = 25                           # Aumentar el radio para que se vea más suave
  ) %>%
  addLegend("bottomright",                # Añadir la leyenda para interpretar el mapa de calor
            title = "Mapa de Calor de Congestión",
            colors = c("blue", "green", "yellow", "red"),
            labels = c("Bajo", "Moderado", "Alto", "Muy Alto"))

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 (PELIGRO), accidentes (ACCIDENTE), congestión (CONGESTIÓN) y cierres de vías (VÍA CERRADA) 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(m28_peligro, m28_accidente, m28_congestion, m28_via_cerrada)

Hallazgos: Análisis comparativo entre Cuaderno de Movilidad Día 26 (jueves) y Día 28 (sábado)

De manera general se encuentra que tanto la frecuencia como la ubicación de los eventos por cada tipo es distinta cuando se analizan días diferentes de la semana. A continuación se describen los hallazgos por tipo de evento y sus patrones:

Peligro

El día 26 se presentaron 131 eventos, los cuales se concentraron particularmente en la vía Cajicá-Chía con Carrera 5 y la vía Bogotá -Tunja. Por su parte, el día 28 se reportaron 198 eventos de peligro, concentrados particularmente en la Variante de Cajicá (carretera 45A) y sector de Canelón.

Vías cerradas

El día 26 se presentaron 657 eventos relacionados con cierres de vías, 318 de ellos en la Calle 9 Sur con vía Cajicá-Chía (Carrera 6) y en la Entrada Los Leon Calle 12 (Municipio de Cajicá), mientras que el día 28 solamente se reportaron 32 ubicados en la Calle 1 con Carrera 4ta (Municipio de Cajicá). Entre estos dos días se observa que el día 26 los eventos se concentraron en los alrededores de la vía Cajicá - Chía, mientras que el día 28 se concentraron en el municipio de Cajicá. Esto indica que el cierre de vías con conectividad intermunicipal es más frecuente entre semana y no se encuentran en fin de semana, lo cual tiene coherencia por la potencial afluencia de habitantes por vías intermunicipales durante los fines de semana.

Accidentes

De manera opuesta a los otros eventos, los accidentes fueron menores en el día 26 (35) con respecto al día 28 (41), no obstante las diferencias son muy bajas. Los accidentes del día 26 se presentaron principalmente en la vía 9 con carrera 8 (Fagua-Cajicá) y en la variante de Cajicá, mientras que los accidentes del día 28 se presentaron en la variante de Cajicá y sus alrededores.

Congestión

Finalmente, en cuanto a la congestión, es el tipo de evento con mayor frecuencia. El día 26 se reportaron 923 eventos que se distribuyeron por zonas cercanas a Cajicá de la siguiente manera:

  • 171 eventos en la variante de Cajicá
  • 122 eventos en la cra 5ta (Canelón)
  • 113 eventos en el municipio de Cajicá
  • 148 eventos alrededor de la variante de Cajicá (Calle 7 y vía Cajicá-Hato Grande)
  • 87 eventos en la Diagonal 1 Cajicá
  • 4 eventos cerca de la Estación de tren de Cajicá
  • 201 eventos en la troncal Central
  • 10 eventos en la Carrera 6 (Cajicá)
  • 67 eventos en la vía Bogotá Tunja

Por su parte, en el día 28 se presentaron 693 eventos que se concentraron en las siguientes zonas

  • 286 eventos a lo largo de la variante de Cajicá
  • 123 eventos a lo largo de la Diagonal 1/ Vía Tabío- Cajicá
  • 115 eventos en la Troncal central
  • 95 eventos en la carrera 5/6 municipio de Cajicá
  • 62 eventos alrededor de la variante de Cajicá
  • 7 eventos en la vía Bogotá - Tunja
  • 5 eventos en la Carrera 6 (Cajicá)

Lo anterior indica que hay puntos comunes de congestión que se presentan durante días de la semana o fin de semana como la variante de Cajicá y la Troncal Central.

Conclusiones

El análisis realizado sobre los datos proporcionados por Waze para el día 28 permite obtener una visión integral de los eventos que afectan la movilidad urbana, como peligros en las vías (PELIGRO), congestión (CONGESTIÓN), accidentes (ACCIDENTE) y cierres de vías (VÍA CERRADA). 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.

Puntos clave

1. Distribución de Eventos: Se ha observado que la congestión y las vías cerradas son los eventos más frecuentes reportados por los usuarios, lo que resalta la necesidad de un enfoque coordinado en la gestión del tráfico y la coordinación de los actores involucrados en el cierre de vías para evitar que los cierren afecten de manera simultánea puntos críticos de movilidad, lo cual deriva en problemas de congestión vehicular.

2. Horas críticas: Se encuentra que todos los eventos analizados presentan un patrón común en el reporte de los usuarios dentro de la franja horaria de 12pm a 2-3pm. Los eventos de congestión y peligro tienen un segundo pico de reportes en la franja de 6pm a 7-8pm.

3. 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.

4. 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.

5. 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 y posibles intervenciones en la infraestructura para mitigar riesgos.

Recomendaciones

  • Planificación de Rutas Alternativas: Dado el alto volumen de trancones y cierres de vías en ciertas zonas, se recomienda la creación de rutas alternativas y la mejora en la señalización para desviar el tráfico de las áreas más congestionadas. Así mismo se recomienda la coordinación de los actores para que los cierres de vías se realicen de forma organizada y no simultáneamente sobre áreas críticas de movilidad, con el fin de evitar nuevos eventos de congestión.

  • 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.

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

  • Análisis de confiabilidad: es recomendable tener en cuenta no solo el número de reportes sino también un análisis complementario de las variables de confianza y confiabilidad de los reportes dado que Waze recopila información sobre la evaluación de los reportes por parte de otros usuarios, donde la mayor calificación en confiabilidad (10) indica la probabilidad de que el informe sea preciso. Esto es muy relevante toda vez que garantiza que la información recopilada sea útil para los análisis y la toma de decisiones respecto a la movilidad

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.