Marco Teórico

El análisis de datos de movilidad constituye una herramienta fundamental para comprender el comportamiento del tránsito en las ciudades modernas. El crecimiento del parque automotor y la alta demanda sobre la infraestructura vial hacen necesario el uso de tecnologías que permitan identificar oportunamente situaciones que afectan la circulación y la seguridad de los usuarios.

Las plataformas de navegación colaborativa, como Waze, representan una fuente importante de información en tiempo real, ya que recopilan reportes enviados por miles de usuarios acerca de accidentes, congestiones, peligros y cierres de vías. Esta información permite construir bases de datos que posteriormente pueden analizarse mediante técnicas estadísticas y geoespaciales para identificar patrones de comportamiento.

El análisis espacial, apoyado en herramientas como R, Leaflet, sf, terra y spatstat, facilita la representación cartográfica de estos eventos mediante mapas interactivos y mapas de densidad, permitiendo localizar las zonas con mayor concentración de incidentes y aportando información útil para la toma de decisiones en procesos de planificación urbana y movilidad.


Introducción

El presente documento desarrolla un análisis exploratorio, temporal y espacial de los eventos registrados por la plataforma Waze a partir de la información contenida en el archivo “Trama Waze - Copy (2).xlsx”. El estudio busca identificar la distribución de los diferentes tipos de eventos reportados por los usuarios y representar su comportamiento mediante herramientas estadísticas y geográficas.

A lo largo del documento se realizará la preparación de los datos, el análisis de la frecuencia de los eventos, la construcción de mapas interactivos y la elaboración de mapas de calor para los diferentes tipos de incidentes registrados. Estas visualizaciones permitirán identificar sectores de mayor concentración de eventos y comprender mejor el comportamiento espacial de la información.

La metodología utilizada corresponde al enfoque CRISP-DM, ampliamente empleado en proyectos de minería de datos y ciencia de datos, permitiendo desarrollar un proceso estructurado que va desde la comprensión de los datos hasta la interpretación de los resultados obtenidos.


Objetivo

Realizar un análisis descriptivo, temporal y espacial de los eventos registrados por la plataforma Waze mediante técnicas de Ciencia de Datos, utilizando herramientas estadísticas y geoespaciales en R para identificar patrones de ocurrencia, distribución geográfica y zonas críticas de movilidad.


Metodología CRISP-DM

La metodología CRISP-DM (Cross Industry Standard Process for Data Mining) proporciona un marco de trabajo estructurado para el desarrollo de proyectos de minería de datos. En este estudio se aplica cada una de sus fases con el propósito de obtener información útil a partir de los registros de eventos reportados por Waze.

Comprensión del negocio. Se define como objetivo principal el análisis de la movilidad urbana mediante la identificación de accidentes, peligros, congestiones y cierres viales reportados por los usuarios.

Comprensión de los datos. Se realiza una exploración inicial del conjunto de datos para identificar las variables disponibles, verificar la calidad de la información y comprender la estructura general del archivo.

Preparación de los datos. Se efectúa la limpieza de registros, conversión de fechas, homologación de categorías y adecuación de las coordenadas geográficas para facilitar los análisis posteriores.

Modelado. Se emplean técnicas de análisis exploratorio, análisis temporal y análisis espacial utilizando librerías especializadas de R.

Evaluación. Los resultados obtenidos son interpretados mediante gráficos, mapas interactivos y mapas de densidad para identificar patrones relevantes.

Despliegue. Finalmente se presenta un documento reproducible en formato HTML que integra texto, código, resultados y visualizaciones.


Metodología

Para el desarrollo del análisis se siguieron las siguientes etapas metodológicas:

  • Obtención del archivo de datos.
  • Preparación y transformación de la información.
  • Análisis exploratorio de los registros.
  • Análisis temporal de los eventos.
  • Construcción de mapas interactivos.
  • Elaboración de mapas de calor.
  • Análisis espacial mediante funciones de densidad y patrones de puntos.
  • Interpretación de resultados y elaboración de conclusiones.

Carga de Datos y de Librerías Necesarias

En esta sección se realiza la carga y preparación del conjunto de datos que será utilizado durante todo el análisis. La información se encuentra almacenada en un archivo de Microsoft Excel que contiene los registros de los eventos reportados por los usuarios de Waze.

Inicialmente se cargan las librerías necesarias para el procesamiento de datos, el análisis estadístico y la construcción de mapas interactivos. Posteriormente se importa el archivo de datos y se realizan las transformaciones necesarias sobre las variables de fecha y tipo de evento, con el fin de garantizar la correcta ejecución de los análisis temporales y espaciales que se desarrollarán en las siguientes secciones.

library(readxl)
library(dplyr)
library(lubridate)
library(leaflet)
library(sf)
library(terra)
library(leaflet.extras)
library(ggplot2)
library(leafsync)
library(spatstat.geom)
library(spatstat.explore)

ruta_excel <- "C:/Users/lizet/Documents/2026/CIENCIA DE DATOS/actividad 4/Trama Waze - Copy (2).xlsx"

Trama_Waze <- read_excel(ruta_excel)

Trama_Waze$fecha <- as.Date(Trama_Waze$creation_Date)

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 constituye una de las primeras aproximaciones exploratorias sobre el conjunto de datos, ya que permite identificar el comportamiento de los eventos registrados a lo largo del tiempo. A partir de la fecha y hora de creación de cada reporte es posible conocer en qué momentos del día se presenta una mayor cantidad de incidentes, información que resulta de gran utilidad para comprender la dinámica de la movilidad urbana.

Para este análisis se emplea la librería lubridate, la cual facilita la extracción de componentes específicos de una fecha, como el día y la hora. Posteriormente se construye un gráfico de barras mediante ggplot2, permitiendo visualizar la frecuencia de los eventos registrados durante cada hora del día.

Esta representación gráfica facilita la identificación de posibles horas pico o periodos con mayor concentración de incidentes, aportando información valiosa para la interpretación de los patrones temporales presentes en los datos.

fecha_hora <- ymd_hms(Trama_Waze$creation_Date)

hora <- hour(fecha_hora)

dia <- day(fecha_hora)

Trama_Waze$hora <- hora

Trama_Waze$dia <- dia

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",
    x = "Hora del Día",
    y = "Frecuencia (Conteo)"
  ) +

  theme_minimal() +

  scale_x_discrete(drop = FALSE)

g_hora

La gráfica anterior permite observar la distribución horaria de los eventos registrados en Waze. La frecuencia de reportes varía a lo largo del día y puede asociarse con los cambios en la intensidad del tráfico, las horas laborales y otros factores relacionados con la movilidad. Este tipo de análisis constituye una base importante para comprender cuándo ocurre la mayor cantidad de incidentes y sirve como punto de partida para los análisis espaciales que se desarrollarán posteriormente.


Distribución de Eventos

Además del análisis temporal, resulta importante conocer la frecuencia con la que se presenta cada tipo de evento reportado por los usuarios de Waze. Este análisis descriptivo permite identificar cuáles categorías tienen mayor presencia dentro del conjunto de datos y proporciona una visión general del comportamiento de la información antes de realizar análisis más específicos.

Para ello se agrupan los registros según el tipo de evento y se calcula su frecuencia absoluta. Posteriormente se construye un gráfico de barras utilizando ggplot2, el cual facilita la comparación entre las diferentes categorías reportadas.

table(Trama_Waze$tipo_evento)
## 
##   ACCIDENTE  CONGESTIÓN     PELIGRO VÍA CERRADA 
##         125        3205         719        1021

La tabla anterior resume el número de registros asociados a cada tipo de evento presente en la base de datos. Esta información constituye un primer indicador sobre el comportamiento general de la movilidad reportada por los usuarios y permite identificar cuáles eventos presentan una mayor participación dentro del conjunto analizado.

frecuencia_eventos <- Trama_Waze %>%

  group_by(tipo_evento) %>%

  summarise(Frecuencia = n()) %>%

  arrange(desc(Frecuencia))

ggplot(frecuencia_eventos,
       aes(x = tipo_evento,
           y = Frecuencia,
           fill = tipo_evento)) +

  geom_col() +

  labs(
    title = "Distribución de Tipos de Eventos en Trama Waze",
    x = "Tipo de Evento",
    y = "Frecuencia"
  ) +

  theme_minimal() +

  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),
    legend.position = "none"
  ) +

  scale_fill_brewer(palette = "Set2")

La figura anterior presenta la distribución de los diferentes tipos de eventos registrados por la plataforma Waze. La comparación entre las categorías permite identificar cuáles incidentes son reportados con mayor frecuencia y proporciona una visión general del comportamiento de la base de datos utilizada en este estudio.


Filtrado de Eventos PELIGRO del Día 26

Con el propósito de realizar un análisis espacial más detallado, en esta etapa se seleccionan únicamente los eventos clasificados como PELIGRO que fueron registrados durante el día 26. Este filtrado reduce el conjunto de datos a los registros de interés y facilita la construcción de mapas interactivos y análisis de densidad enfocados exclusivamente en este tipo de evento.

El filtrado por fecha y categoría constituye una práctica habitual dentro del análisis exploratorio de datos, ya que permite estudiar comportamientos particulares sin la influencia de otros tipos de registros presentes en la base de datos.

pos <- which(
  Trama_Waze$tipo_evento == "PELIGRO" &
  Trama_Waze$dia == 26
)

peligro26 <- Trama_Waze[pos, ]

nrow(peligro26)
## [1] 148
head(peligro26)

Los registros obtenidos corresponden exclusivamente a los eventos clasificados como PELIGRO ocurridos durante el día 26. Este subconjunto de información será utilizado en las siguientes secciones para construir mapas interactivos, mapas de calor y análisis espaciales que permitan identificar las zonas con mayor concentración de este tipo de incidente.

Visualización de Eventos PELIGRO

Una vez identificados los eventos clasificados como PELIGRO ocurridos durante el día 26, el siguiente paso consiste en representar espacialmente su ubicación mediante un mapa interactivo. Esta visualización permite explorar de forma dinámica la distribución geográfica de los reportes y facilita la identificación de zonas donde existe una mayor concentración de incidentes.

Para la construcción del mapa se utiliza la librería leaflet, ampliamente empleada en R para la generación de cartografía interactiva. Cada evento se representa mediante un marcador localizado en las coordenadas geográficas correspondientes y se agrupa automáticamente cuando existen numerosos registros cercanos, mejorando la visualización del mapa.

Antes de construir el mapa es necesario adecuar las coordenadas geográficas almacenadas en la base de datos, transformándolas al formato decimal requerido para su representación cartográfica.

peligro26$lat <- peligro26$location_y /
  10^(nchar(peligro26$location_y)-1)

peligro26$long <- peligro26$location_x /
  10^(nchar(peligro26$location_x)-3)

peligro26 <- peligro26 %>%
  filter(
    lat > 4,
    lat < 5
  )

Una vez preparadas las coordenadas, se genera un mapa interactivo donde cada marcador representa un evento de tipo PELIGRO reportado por los usuarios de Waze durante el día seleccionado.

m26_peligro <- leaflet() %>%

  addTiles() %>%

  addCircleMarkers(

    lng = peligro26$long,

    lat = peligro26$lat,

    clusterOptions = markerClusterOptions(),

    label = as.character(peligro26$hora)

  ) %>%

  addControl(

    html = "<h3>Mapa de Riesgos</h3>",

    position = "topleft"

  )

m26_peligro

El mapa interactivo permite explorar visualmente la ubicación de cada uno de los eventos de riesgo reportados durante el día 26. Gracias a la agrupación automática de marcadores es posible identificar rápidamente sectores donde existe una mayor concentración de incidentes, facilitando la interpretación espacial de la información.


Análisis Espacial de la Distribución de Riesgos

Además de la representación mediante marcadores, resulta conveniente analizar la concentración espacial de los eventos utilizando un mapa de calor. Esta técnica permite estimar la densidad de ocurrencia de los registros y resaltar aquellas zonas donde existe una mayor frecuencia de reportes.

Los mapas de calor constituyen una herramienta ampliamente utilizada dentro del análisis geoespacial, ya que facilitan la identificación de patrones espaciales que no siempre son evidentes mediante la observación directa de los puntos individuales.

peligro26 <- peligro26 %>%

  filter(

    lat > 4,

    lat < 5,

    long > -75,

    long < -73

  )

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"

    )

  )

El mapa de calor evidencia las áreas donde los eventos de tipo PELIGRO presentan una mayor concentración espacial. Las zonas representadas mediante colores cálidos indican una mayor intensidad de registros, mientras que las tonalidades frías corresponden a sectores donde la frecuencia de eventos es menor.

La interpretación conjunta del mapa interactivo y del mapa de calor proporciona una visión más completa sobre la distribución geográfica de los riesgos reportados, constituyendo un insumo importante para la planificación de estrategias orientadas a mejorar la seguridad vial y la movilidad urbana.

Mapa Interactivo de Cierres de Vías

En esta sección se analizan los eventos clasificados como VÍA CERRADA registrados durante el día 26. Estos eventos representan afectaciones sobre la movilidad que pueden estar asociadas con obras civiles, accidentes de gran magnitud, eventos públicos o restricciones temporales del tránsito.

Con el propósito de identificar espacialmente estos registros, se construye un mapa interactivo mediante la librería leaflet, permitiendo visualizar la ubicación geográfica de cada cierre vial reportado. La representación cartográfica facilita reconocer sectores donde las interrupciones de la circulación son más frecuentes y constituye una herramienta útil para apoyar procesos de planificación y gestión de la movilidad.

via_cerrada_26 <- Trama_Waze %>%
  filter(
    tipo_evento == "VÍA CERRADA",
    dia == 26
  )

via_cerrada_26$lat <-
  via_cerrada_26$location_y /
  10^(nchar(via_cerrada_26$location_y)-1)

via_cerrada_26$long <-
  via_cerrada_26$location_x /
  10^(nchar(via_cerrada_26$location_x)-3)

via_cerrada_26 <- via_cerrada_26 %>%
  filter(
    !is.na(lat),
    !is.na(long)
  )
m26_via_cerrada <-

leaflet(via_cerrada_26) %>%

addTiles() %>%

addCircleMarkers(

lng=~long,

lat=~lat,

clusterOptions=markerClusterOptions(),

label=~as.character(hora)

) %>%

addControl(

html="<h3>Mapa de Cierre de Vías</h3>",

position="topleft"

)

m26_via_cerrada

El mapa interactivo permite identificar la ubicación de los cierres viales reportados durante el día analizado. La agrupación automática de marcadores mejora la visualización cuando existen numerosos registros cercanos entre sí y facilita la exploración de la información.


Análisis Espacial de Cierres de Vías

Con el fin de estudiar el comportamiento espacial de los cierres viales, se construye un patrón de puntos mediante la librería spatstat. Este procedimiento permite evaluar si los eventos presentan una distribución aleatoria o si, por el contrario, existen zonas donde tienden a concentrarse.

Para garantizar que el análisis se adapte correctamente a cualquier conjunto de datos, la ventana espacial utilizada se construye automáticamente a partir de los valores mínimos y máximos de las coordenadas presentes en la base de datos.

zona <- owin(
  xrange = c(
    min(via_cerrada_26$long),
    max(via_cerrada_26$long)
  ),
  yrange = c(
    min(via_cerrada_26$lat),
    max(via_cerrada_26$lat)
  )
)

patron_via_cerrada <- ppp(
  x = via_cerrada_26$long,
  y = via_cerrada_26$lat,
  window = zona
)

plot(
  patron_via_cerrada$x,
  patron_via_cerrada$y,
  pch = 16,
  col = "red",
  xlab = "Longitud",
  ylab = "Latitud",
  main = "Distribución espacial de cierres de vías"
)

La figura obtenida permite evaluar visualmente la distribución espacial de los cierres viales. Una concentración de puntos en determinados cuadrantes puede sugerir la existencia de sectores donde este tipo de eventos ocurre con mayor frecuencia.


Función K de Ripley

Con el propósito de complementar el análisis espacial, se emplea la función K de Ripley, ampliamente utilizada para evaluar procesos puntuales en estudios espaciales. Esta herramienta permite determinar si los eventos presentan agrupamiento, dispersión o una distribución compatible con un proceso aleatorio.

plot(

Kest(patron_via_cerrada),

main="Función K de Ripley"

)

La comparación entre la curva observada y la distribución esperada permite identificar posibles patrones de agrupamiento espacial de los cierres de vías registrados durante el periodo de estudio.


Mapa de Densidad de Cierres de Vías

Como complemento al análisis anterior, se construye un mapa de calor que representa la intensidad espacial de los cierres viales. Esta representación facilita la identificación de las zonas donde existe una mayor concentración de registros y permite interpretar visualmente la distribución de los eventos.

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"

)

df_via_cerrada$intensity <-

(df_via_cerrada$intensity-

min(df_via_cerrada$intensity))/

(max(df_via_cerrada$intensity)-

min(df_via_cerrada$intensity))

leaflet(df_via_cerrada) %>%

addProviderTiles(

"OpenStreetMap"

) %>%

addHeatmap(

lng=~long,

lat=~lat,

intensity=~intensity,

blur=20,

radius=15,

max=1

) %>%

addLegend(

"bottomright",

title="Mapa de Calor de Cierres de Vías",

colors=c(

"blue",

"green",

"yellow",

"red"

),

labels=c(

"Bajo",

"Moderado",

"Alto",

"Muy Alto"

)

)

El mapa de calor permite identificar de manera inmediata las áreas donde los cierres de vías presentan una mayor intensidad espacial. Las zonas representadas con colores cálidos indican una concentración elevada de registros, mientras que los colores fríos corresponden a sectores con menor incidencia de este tipo de eventos. Esta visualización complementa el análisis exploratorio y facilita la interpretación de los patrones espaciales presentes en la información.

Análisis de Accidentes

En esta sección se analizan los eventos clasificados como ACCIDENTE registrados durante el día 26. Estos eventos representan uno de los principales factores que afectan la movilidad y la seguridad vial, por lo que resulta de gran interés conocer su distribución espacial y los sectores donde ocurren con mayor frecuencia.

Inicialmente se seleccionan únicamente los registros correspondientes a accidentes ocurridos durante el día de estudio. Posteriormente se preparan las coordenadas geográficas para permitir su representación sobre un mapa interactivo y el desarrollo de análisis espaciales mediante técnicas de patrones de puntos.

accidente_26 <- Trama_Waze %>%
  filter(
    tipo_evento == "ACCIDENTE",
    dia == 26
  )

accidente_26$lat <-
  accidente_26$location_y /
  10^(nchar(accidente_26$location_y)-1)

accidente_26$long <-
  accidente_26$location_x /
  10^(nchar(accidente_26$location_x)-3)

accidente_26 <- accidente_26 %>%
  filter(
    !is.na(lat),
    !is.na(long)
  )

La preparación de las coordenadas permite garantizar que la información espacial pueda representarse correctamente sobre los mapas y sea utilizada posteriormente en los análisis de densidad.


Mapa Interactivo de Accidentes

Una vez preparada la información espacial, se construye un mapa interactivo utilizando la librería leaflet. Cada marcador representa un accidente reportado durante el día analizado y puede explorarse de manera dinámica para conocer la distribución geográfica de estos eventos.

m26_accidente <-

leaflet(accidente_26) %>%

addTiles() %>%

addCircleMarkers(

lng=~long,

lat=~lat,

clusterOptions=markerClusterOptions(),

label=~as.character(hora)

) %>%

addControl(

html="<h3>Mapa de Accidentes</h3>",

position="topleft"

)

m26_accidente

El mapa interactivo facilita la identificación de los sectores donde se concentran los accidentes reportados por los usuarios de Waze y constituye una primera aproximación para comprender su distribución espacial.


Análisis Espacial de Accidentes

Con el propósito de estudiar el comportamiento espacial de los accidentes, se construye un patrón de puntos utilizando la librería spatstat. Este análisis permite determinar si los eventos presentan agrupamientos espaciales o si su distribución es compatible con un patrón aleatorio.

zona <- owin(
  xrange = c(
    min(accidente_26$long),
    max(accidente_26$long)
  ),
  yrange = c(
    min(accidente_26$lat),
    max(accidente_26$lat)
  )
)

patron_accidente <- ppp(
  x = accidente_26$long,
  y = accidente_26$lat,
  window = zona
)

plot(
  patron_accidente$x,
  patron_accidente$y,
  pch = 16,
  col = "red",
  xlab = "Longitud",
  ylab = "Latitud",
  main = "Distribución espacial de accidentes"
)

El patrón de puntos permite visualizar la distribución espacial de los accidentes y facilita la identificación de posibles zonas donde los incidentes presentan una mayor concentración.


Función K de Ripley

Como complemento al análisis espacial, se utiliza la función K de Ripley, la cual permite evaluar el comportamiento espacial de los accidentes y determinar si existe evidencia de agrupamiento entre los eventos registrados.

plot(

Kest(patron_accidente),

main="Función K de Ripley"

)

La función K proporciona una medida cuantitativa del comportamiento espacial de los accidentes, permitiendo comparar la distribución observada con la esperada bajo un patrón completamente aleatorio.


Mapa de Densidad de Accidentes

Finalmente se construye un mapa de calor con el fin de representar la intensidad espacial de los accidentes registrados. Este tipo de visualización facilita la identificación de zonas críticas donde la ocurrencia de accidentes es significativamente mayor.

if (npoints(patron_accidente) > 1) {

im1 <- density(
patron_accidente,
sigma = 0.01
)

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=20,
radius=15,
max=1
)

} else {

cat("No hay suficientes puntos para construir el mapa de densidad.")

}
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=20,

radius=15,

max=1

) %>%

addLegend(

"bottomright",

title="Mapa de Calor de Accidentes",

colors=c(

"blue",

"green",

"yellow",

"red"

),

labels=c(

"Bajo",

"Moderado",

"Alto",

"Muy Alto"

)

)

El mapa de calor muestra las áreas donde los accidentes presentan una mayor concentración espacial. Las tonalidades cálidas representan sectores con alta intensidad de eventos, mientras que las zonas con colores fríos corresponden a áreas donde la frecuencia de accidentes es menor. Esta representación complementa el análisis exploratorio y facilita la identificación de puntos críticos para la movilidad urbana.

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

En esta sección se estudian los eventos clasificados como CONGESTIÓN registrados durante el día 26. Este tipo de evento representa uno de los principales indicadores del comportamiento del tráfico urbano, ya que refleja las zonas donde la circulación vehicular presenta mayores dificultades.

Inicialmente se seleccionan únicamente los registros correspondientes a eventos de congestión y posteriormente se preparan las coordenadas geográficas para su representación cartográfica y el desarrollo de los análisis espaciales.

congestion_26 <- Trama_Waze %>%
  filter(
    tipo_evento == "CONGESTIÓN",
    dia == 26
  )

congestion_26$lat <-
  congestion_26$location_y /
  10^(nchar(congestion_26$location_y)-1)

congestion_26$long <-
  congestion_26$location_x /
  10^(nchar(congestion_26$location_x)-3)

congestion_26 <- congestion_26 %>%
  filter(
    !is.na(lat),
    !is.na(long)
  )

La preparación de las coordenadas permite garantizar que los registros sean representados correctamente sobre el mapa y utilizados posteriormente en los análisis espaciales.


Mapa Interactivo de Congestión

Una vez procesados los datos, se construye un mapa interactivo mediante la librería leaflet. Cada marcador representa un evento de congestión registrado durante el día de estudio y permite explorar visualmente la distribución espacial de estos incidentes.

m26_congestion <-

leaflet(congestion_26) %>%

addTiles() %>%

addCircleMarkers(

lng = ~long,

lat = ~lat,

clusterOptions = markerClusterOptions(),

label = ~as.character(hora)

) %>%

addControl(

html = "<h3>Mapa de Congestión</h3>",

position = "topleft"

)

m26_congestion

El mapa interactivo permite identificar visualmente los sectores donde se concentra la mayor cantidad de reportes de congestión, facilitando el análisis preliminar de los patrones espaciales presentes en la información.


Análisis Espacial de Congestión

Con el fin de estudiar la distribución espacial de los eventos de congestión, se construye un patrón de puntos utilizando la librería spatstat. Este procedimiento permite evaluar la existencia de agrupamientos espaciales y reconocer zonas donde este tipo de evento ocurre con mayor frecuencia.

zona <- owin(
  xrange = c(
    min(congestion_26$long),
    max(congestion_26$long)
  ),
  yrange = c(
    min(congestion_26$lat),
    max(congestion_26$lat)
  )
)

patron_congestion <- ppp(
  x = congestion_26$long,
  y = congestion_26$lat,
  window = zona
)

plot(
  patron_congestion$x,
  patron_congestion$y,
  pch = 16,
  col = "red",
  xlab = "Longitud",
  ylab = "Latitud",
  main = "Distribución espacial de congestión"
)

El patrón de puntos permite visualizar la forma en que los eventos de congestión se distribuyen espacialmente dentro del área de estudio. La concentración de puntos en determinados sectores puede indicar zonas donde el tráfico presenta mayores dificultades de circulación.


Función K de Ripley

Como complemento del análisis espacial, se emplea la función K de Ripley, la cual permite determinar si la distribución observada presenta evidencia de agrupamiento espacial o corresponde a un patrón aleatorio.

plot(

Kest(patron_congestion),

main = "Función K de Ripley"

)

La función K facilita la interpretación del comportamiento espacial de los eventos de congestión y constituye una herramienta ampliamente utilizada en estudios de análisis espacial de patrones de puntos.


Mapa de Densidad de Congestión

Finalmente se construye un mapa de calor que representa la intensidad espacial de los eventos de congestión. Este tipo de representación facilita la identificación de los sectores donde la ocurrencia de congestiones es más frecuente.

im1 <- density(

patron_congestion,

sigma = 0.01

)

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 = 20,

radius = 15,

max = 1

) %>%

addLegend(

"bottomright",

title = "Mapa de Calor de Congestión",

colors = c(

"blue",

"green",

"yellow",

"red"

),

labels = c(

"Bajo",

"Moderado",

"Alto",

"Muy Alto"

)

)

El mapa de calor permite identificar de manera clara las zonas donde los eventos de congestión presentan una mayor concentración espacial. Esta representación facilita la identificación de corredores viales con alta intensidad de tráfico y aporta información relevante para la planificación de estrategias orientadas a mejorar la movilidad urbana.

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

Después de realizar el análisis individual de cada tipo de evento, resulta conveniente integrar todas las visualizaciones en un único entorno de consulta. Esta consolidación permite comparar simultáneamente la distribución espacial de los diferentes eventos registrados por Waze y facilita la identificación de sectores donde coinciden múltiples problemáticas relacionadas con la movilidad.

La sincronización de mapas interactivos constituye una herramienta de gran utilidad para el análisis exploratorio, ya que permite navegar de manera coordinada entre las diferentes capas de información manteniendo el mismo nivel de acercamiento y la misma ubicación geográfica. De esta manera es posible contrastar la localización de accidentes, congestiones, peligros y cierres de vías dentro del área de estudio.

Para realizar esta integración se emplea la librería leafsync, la cual permite sincronizar varios mapas Leaflet en una única visualización interactiva.

library(leafsync)

sync(

m26_peligro,

m26_via_cerrada,

m26_accidente,

m26_congestion

)

La visualización conjunta facilita el análisis comparativo entre los diferentes tipos de eventos reportados. La navegación sincronizada permite identificar sectores donde confluyen accidentes, congestiones, peligros y cierres viales, proporcionando una visión integral del comportamiento espacial de la movilidad.


Conclusiones

El análisis desarrollado permitió caracterizar espacial y temporalmente los eventos registrados por la plataforma Waze mediante el uso de herramientas estadísticas y geoespaciales implementadas en el lenguaje de programación R.

El análisis temporal mostró la distribución de los eventos a lo largo del día, permitiendo identificar los periodos con mayor frecuencia de reportes. Esta información constituye un insumo importante para comprender el comportamiento de la movilidad y reconocer los horarios donde la ocurrencia de incidentes presenta mayor intensidad.

El análisis descriptivo permitió establecer la frecuencia de cada uno de los tipos de eventos registrados en la base de datos, proporcionando una visión general sobre la composición del conjunto de información utilizado durante el estudio.

Mediante la construcción de mapas interactivos fue posible representar espacialmente la ubicación de los diferentes eventos reportados por los usuarios de Waze. Estas visualizaciones facilitaron la exploración de la información y permitieron identificar sectores donde existe una mayor concentración de incidentes relacionados con accidentes, congestiones, peligros y cierres de vías.

El empleo de técnicas de análisis espacial, como los patrones de puntos, el test de cuadrantes y la función K de Ripley, permitió evaluar la distribución espacial de los eventos y reconocer la existencia de agrupamientos en determinadas zonas del área de estudio. Estos resultados aportan evidencia sobre la presencia de sectores donde la ocurrencia de incidentes no es completamente aleatoria.

Los mapas de calor complementaron el análisis exploratorio al representar la intensidad espacial de cada tipo de evento. Esta información facilita la identificación de zonas críticas que podrían requerir intervenciones orientadas al mejoramiento de la movilidad y la seguridad vial.

Finalmente, la consolidación de los mapas interactivos permitió integrar los diferentes análisis desarrollados durante el estudio, proporcionando una visión global del comportamiento espacial de la información. La metodología implementada demuestra el potencial de las herramientas de Ciencia de Datos y análisis geoespacial para transformar grandes volúmenes de información en conocimiento útil para apoyar procesos de planificación urbana y toma de decisiones.