El análisis de datos de tráfico constituye una herramienta esencial dentro del contexto urbano actual, ya que contribuye de manera directa a mejorar la movilidad y la seguridad vial. El crecimiento sostenido de las ciudades y el aumento progresivo del parque automotor hacen indispensable contar con metodologías y herramientas avanzadas que permitan gestionar el tráfico de forma eficiente.
Las aplicaciones de navegación colaborativa, como Waze, han transformado significativamente la manera en que se recopilan los datos de tráfico. Gracias a la participación activa de sus usuarios, Waze ofrece información en tiempo real sobre las condiciones de las vías, incluyendo reportes de congestión, accidentes, peligros y cierres viales. Esta información resulta sumamente valiosa para las autoridades y los planificadores urbanos, pues les permite tomar decisiones basadas en datos actuales y precisos.
Por otro lado, el análisis de datos geoespaciales y la minería de datos son fundamentales para extraer conocimiento a partir de grandes volúmenes de información. Herramientas como R y librerías especializadas como leaflet, spatstat y ggplot2 facilitan el procesamiento y la visualización de datos espaciales, lo que permite identificar patrones y tendencias que orientan estrategias para mejorar tanto la infraestructura vial como la gestión del tráfico.
El presente trabajo se centra en el estudio de los eventos reportados por los usuarios a través de la aplicación Waze. Esta plataforma de navegación colaborativa proporciona información valiosa sobre las condiciones del tráfico en tiempo real, incluyendo reportes de peligros, congestión, accidentes y cierres de vías. Dicha información resulta esencial para la planificación urbana y la gestión eficiente del tráfico, ya que permite a las autoridades tomar decisiones informadas orientadas a mejorar la movilidad y la seguridad vial.
El objetivo de este análisis es estudiar la distribución espacial y temporal de los eventos reportados en Waze, centrándonos específicamente en el día 26. Para ello, se evaluarán y visualizarán los eventos mediante mapas interactivos, analizando tanto sus patrones temporales como espaciales. El uso de herramientas de análisis espacial en R —como leaflet para la visualización geoespacial y spatstat para el estudio de la densidad y distribución de puntos— permitirá generar mapas de calor que resalten las áreas con mayor incidencia de eventos. A lo largo del documento se integrarán diversos gráficos y mapas que facilitarán la interpretación de los datos y aportarán insumos para mejorar la planificación y gestión del tráfico.
La metodología CRISP-DM (Cross-Industry Standard Process for Data Mining) es un estándar ampliamente utilizado para la ejecución de proyectos de minería de datos. Está compuesta por seis fases que guían el proceso desde la comprensión del negocio hasta el despliegue de los resultados.
1. Comprensión del negocio
2. Comprensión de los datos
3. Preparación de los datos
4. Modelado
5. Evaluación
6. Despliegue
Para garantizar un estudio estructurado y replicable de los eventos reportados por Waze el día 26, se siguió una serie de pasos metodológicos que se describen a continuación.
Los datos utilizados en este análisis provienen de la plataforma Waze, la cual permite la recopilación de eventos reportados por los 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). La información fue suministrada en un archivo de Excel que contiene datos clave como la fecha de creación del evento, el tipo de evento y las coordenadas geográficas correspondientes.
El conjunto de datos proporcionado por Waze incluye las siguientes variables:
Este catálogo permite comprender de manera detallada las variables que se utilizarán a lo largo del análisis, facilitando su manipulación e interpretación.
La primera etapa técnica consistió en la carga y limpieza de los datos. Para ello se empleó la librería readxl para importar el archivo de Excel y la librería lubridate para procesar y estandarizar la información temporal. Asimismo, las coordenadas geográficas (latitud y longitud) se ajustaron para garantizar su correcta representación en los mapas.
Adicionalmente, las fechas se transformaron al formato adecuado (YYYY-MM-DD HH:MM) con el fin de asegurar que las operaciones de filtrado temporal resultaran precisas.
Una vez cargados y depurados los datos, se realizó un análisis descriptivo inicial orientado a comprender las características básicas de los eventos. Se calculó la frecuencia de cada tipo de evento reportado, lo que permitió identificar cuáles eran los más comunes.
Para visualizar la distribución de los eventos y su prevalencia dentro de la muestra, se generaron gráficos de barras utilizando ggplot2. Esta etapa resultó fundamental para identificar patrones generales previo al análisis geoespacial.
Posteriormente, los eventos se filtraron de acuerdo con la fecha de interés (día 26). El análisis temporal se centró en estudiar la concentración de eventos a lo largo de las distintas franjas horarias del día, lo que permitió identificar momentos críticos, como las horas pico de congestión.
Mediante el uso de lubridate, se extrajeron la hora y el día de cada evento, lo cual facilitó tanto el análisis de patrones temporales como el filtrado de eventos en fechas específicas.
El análisis geoespacial se centró en la representación de los eventos filtrados sobre un mapa, utilizando la librería leaflet. De esta manera, se generaron mapas interactivos que muestran la distribución de los distintos tipos de eventos, tales como peligros, accidentes, cierres de vías y congestión.
Adicionalmente, se elaboraron mapas de densidad con las herramientas spatstat y terra, con el fin de estudiar las concentraciones geográficas de estos eventos y resaltar las áreas más afectadas dentro de la ciudad.
Una de las etapas más relevantes del análisis consistió en la elaboración de mapas de calor, los cuales permitieron identificar las zonas más críticas en términos de peligros, accidentes y congestión. Estos mapas se generaron a partir de patrones de puntos espaciales mediante funciones de estimación de densidad, lo que permitió resaltar visualmente las áreas con mayor incidencia de eventos y constituyó una herramienta clave para la toma de decisiones.
Finalmente, los resultados de los distintos análisis se consolidaron en un conjunto de mapas interactivos que integran los diferentes tipos de eventos. Esta consolidación facilita la comparación y el análisis conjunto de los eventos, ofreciendo una visión integral de los problemas de tráfico presentes en la ciudad.
A partir de la consolidación de los resultados, se interpretaron los hallazgos más relevantes, identificando las zonas de mayor riesgo y los patrones críticos de congestión y accidentes. Esta información se utilizó como base para formular recomendaciones prácticas orientadas a mitigar los problemas detectados y mejorar la movilidad urbana.
La metodología empleada permitió llevar a cabo un análisis detallado y replicable, sentando una base sólida para futuras investigaciones relacionadas con la gestión del tráfico y la seguridad vial.
En esta sección se realiza la carga y preparación de los datos obtenidos a partir de Waze, así como la carga de las librerías que se utilizarán a lo largo del documento. Los datos se encuentran almacenados en un archivo de Excel, y las fechas de creación de cada evento se procesan para garantizar que se encuentren en el formato adecuado para el análisis temporal.
El archivo de Excel contiene información clave como el tipo de evento, las coordenadas geográficas y la fecha de creación del evento. Para efectos del análisis, es necesario convertir las fechas al formato YYYY-MM-DD HH:MM, ya que esto permite realizar un análisis temporal preciso y ordenado.
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(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 de densidad.
library(terra) # terra: para el manejo de datos raster y análisis espacial.
library(leaflet.extras) # leaflet.extras: para añadir funciones adicionales a los mapas de leaflet.
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/ACER/Downloads/Trama Waze (1).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")
El análisis temporal constituye una de las primeras aproximaciones que se realiza sobre los datos, ya que permite identificar patrones en la distribución de los eventos a lo largo del día. En esta sección se extraen la hora y el día a partir de los datos originales, utilizando la librería lubridate, lo cual facilita el filtrado de eventos en fechas y horas específicas.
El propósito es analizar si existen concentraciones de eventos en determinadas franjas horarias y cómo se distribuyen a lo largo del día 26, lo que podría revelar horas pico de congestión o momentos críticos asociados a un mayor número 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)
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
# 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
En esta sección se presenta un análisis descriptivo de los tipos de eventos registrados en los datos de Waze. Para ello, se genera un 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 resulta clave para identificar cuáles 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, lo que 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
En este apartado se filtran los eventos de tipo PELIGRO correspondientes al día 26. El propósito de este filtrado es reducir el volumen de datos y centrarse en los eventos de riesgo, permitiendo así un análisis más profundo y detallado de estos incidentes.
Este filtrado resulta esencial para focalizar el análisis en los eventos que realmente representan peligros potenciales en las vías, facilitando 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,]
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 clústeres para mejorar su legibilidad.
Los usuarios pueden interactuar con el mapa, lo que facilita identificar visualmente los puntos con mayor concentración de eventos y reconocer patrones espaciales en la distribución de los peligros.
# Cargar librerías necesarias para visualización
library(mapview)
library(leaflet)
# Ajustar las coordenadas de latitud y longitud
peligro26$lat <- peligro26$location_y / 10^(nchar(peligro26$location_y) - 1)
peligro26$long <- peligro26$location_x / 10^(nchar(peligro26$location_x) - 3)
# Filtrar eventos dentro del rango geográfico adecuado
peligro26 <- peligro26[peligro26$lat > 4 & peligro26$lat < 5,]
# Crear un mapa interactivo con leaflet
m26_peligro <- leaflet() %>%
addTiles() %>%
addCircleMarkers(lng = peligro26$long,
lat = peligro26$lat,
clusterOptions = markerClusterOptions(),
label = peligro26$hora) %>%
addControl(html = "<h3>Mapa de Riesgos</h3>", position = "topleft")
# Mostrar el mapa
m26_peligro
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 resulta crucial para identificar patrones de concentración de eventos y zonas de alto riesgo, lo cual puede ser de gran utilidad para la toma de decisiones en materia de gestión del tráfico y planificación urbana.
# Cargar las librerías necesarias
library(leaflet)
library(dplyr)
library(leaflet.extras)
# Filtrar datos relevantes de peligro26
peligro26 <- peligro26 %>%
filter(lat > 4 & lat < 5, long > -75 & long < -73) # Ajustar las coordenadas de interés
# Crear un mapa interactivo con leaflet y addHeatmap
leaflet(peligro26) %>%
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"))
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 cual puede contribuir a la planificación de desvíos y a 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 resulta crucial para que las autoridades puedan tomar decisiones informadas sobre la gestión del tráfico en dichas áreas.
# 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 las coordenadas de latitud y longitud
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)
# Filtrar eventos dentro del rango geográfico adecuado
via_cerrada_26 <- via_cerrada_26[via_cerrada_26$lat > 4 & via_cerrada_26$lat < 5,]
En esta sección se presenta un mapa interactivo que muestra los eventos de cierre de vías (VÍA CERRADA) 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 información adicional 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, constituyendo una herramienta visual de gran utilidad para la planificación y gestión del tráfico en la ciudad.
# Cargar librería leaflet
require(leaflet)
# Crear el mapa interactivo
m26_via_cerrada = leaflet(via_cerrada_26) %>%
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
m26_via_cerrada
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 se distribuyen 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.
Este tipo de análisis permite comprender la extensión geográfica de los cierres de vías, lo cual puede ser útil para identificar áreas críticas que requieran intervenciones inmediatas o una planificación a largo plazo.
# Cargar las librerías necesarias
library(spatstat)
# 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_26$long, y = via_cerrada_26$lat, window = zona)
# 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")
Aquí se genera un segundo mapa de densidad basado en los eventos de cierre de vías (VÍA CERRADA), con un enfoque más detallado en las áreas de mayor afectación. Este mapa permite destacar las zonas con la mayor cantidad de eventos de este tipo, facilitando la identificación de las áreas donde los cierres de vías son más frecuentes.
El uso de este mapa resulta clave para comprender la severidad de los cierres de vías en ciertas zonas de la ciudad y cómo estos pueden afectar la movilidad en general.
# Cargar las librerías necesarias
library(terra)
library(leaflet)
library(spatstat)
# Asegurarse de que el objeto patron_via_cerrada esté correctamente definido
# Crear un patrón de puntos espaciales utilizando los datos correctos (via_cerrada_26)
zona <- owin(xrange = c(-74.04331, -73.9929), yrange = c(4.885736, 4.948562))
patron_via_cerrada <- ppp(x = via_cerrada_26$long, y = via_cerrada_26$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"))
En esta sección se realiza un análisis detallado de los eventos de accidentes (ACCIDENTE) ocurridos el día 26. Estos eventos se filtran con el fin de centrar el análisis exclusivamente en los accidentes reportados en esa fecha, buscando comprender mejor su distribución espacial y su impacto en la movilidad.
El análisis de accidentes resulta 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 las 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,]
# Ajustar las coordenadas de latitud y longitud
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)
# Filtrar eventos dentro del rango geográfico adecuado
accidente_26 <- accidente_26[accidente_26$lat > 4 & accidente_26$lat < 5,]
A continuación se presenta un mapa interactivo que muestra los eventos de accidentes (ACCIDENTE) del día 26. Al igual que en los mapas anteriores, se utiliza leaflet para visualizar los puntos donde ocurrieron los accidentes, permitiendo a los usuarios hacer clic sobre los marcadores para obtener información adicional sobre cada incidente.
Este mapa interactivo constituye una herramienta visual que permite comprender la distribución espacial de los accidentes, facilitando la identificación de las zonas donde se concentra un mayor número de incidentes y donde podrían implementarse mejoras en materia de seguridad vial.
# Cargar librerías necesarias
library(leaflet)
# Crear el mapa interactivo
m26_accidente <- leaflet(accidente_26) %>%
addTiles() %>%
addCircleMarkers(lng = ~long,
lat = ~lat,
clusterOptions = markerClusterOptions(),
label = ~hora) %>%
addControl(html = "<h3>Mapa de Accidentes</h3>", position = "topleft")
# Mostrar el mapa interactivo
m26_accidente
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 la distribución geográfica de los accidentes y determinar si existen patrones espaciales en su ocurrencia.
Este análisis resulta importante para identificar las áreas donde los accidentes son más frecuentes, lo que permite planificar estrategias de mitigación, como mejorar la señalización o realizar cambios en la infraestructura, con el fin de reducir la probabilidad de futuros accidentes en dichas zonas.
# Cargar las librerías necesarias
require(spatstat)
# 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_26$long, y = accidente_26$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))
En esta sección se genera un mapa de densidad basado en la distribución de los accidentes (ACCIDENTE) 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 dentro de la ciudad.
El uso de mapas de densidad en el análisis de accidentes resulta crucial para visualizar las áreas más afectadas y planificar intervenciones orientadas a mejorar la seguridad vial. Este tipo de visualización permite observar patrones espaciales que no siempre resultan evidentes a partir de simples tablas de datos.
# Cargar las librerías necesarias
library(terra)
library(leaflet)
library(spatstat)
# 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_26$long, y = accidente_26$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"))
En esta sección se analiza la congestión reportada (CONGESTIÓN) durante el día 26. Los eventos de congestión se filtran con el fin de centrar el análisis en los reportes de ese día, estudiando su distribución tanto espacial como temporal.
El análisis de la congestión resulta 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, así como los momentos del día en que se presentan mayores problemas de movilidad. Esta información puede utilizarse 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,]
# Ajustar las coordenadas de latitud y longitud
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)
# Filtrar eventos dentro del rango geográfico adecuado
congestion_26 <- congestion_26[congestion_26$lat > 4 & congestion_26$lat < 5,]
En esta sección se presenta un mapa interactivo de los eventos de congestión (CONGESTIÓN) reportados el día 26. Utilizando leaflet, se visualizan los puntos de congestión sobre un mapa geográfico, donde los usuarios pueden interactuar con los marcadores para obtener información adicional sobre cada evento.
Este mapa resulta útil para explorar visualmente las áreas de la ciudad más afectadas por el tráfico, proporcionando información valiosa tanto para los planificadores urbanos como para las autoridades encargadas de la gestión del tráfico.
# Cargar las librerías necesarias
library(leaflet)
# Crear el mapa interactivo
m26_congestion <- leaflet(congestion_26) %>%
addTiles() %>%
addCircleMarkers(lng = ~long,
lat = ~lat,
clusterOptions = markerClusterOptions(),
label = ~hora) %>%
addControl(html = "<h3>Mapa de Congestión</h3>", position = "topleft")
# Mostrar el mapa interactivo
m26_congestion
Esta sección está dedicada al análisis espacial de los eventos de congestión (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 determinar si existen patrones de congestión que se repitan en ciertas áreas.
Este tipo de análisis resulta 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, con el fin de aliviar la congestión.
# Cargar las librerías necesarias
library(spatstat)
# 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_26$long, y = congestion_26$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))
En esta sección se genera un mapa de densidad basado en los eventos de congestión (CONGESTIÓN) del día 26. Este mapa resalta las áreas con mayor densidad de tráfico, ofreciendo una visualización clara de los puntos críticos de congestión en la ciudad.
El mapa de densidad constituye una herramienta útil tanto para los planificadores urbanos como para 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 vehicular.
# Cargar las librerías necesarias
library(leaflet)
library(terra)
# 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_26$long, y = congestion_26$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"))
En esta última sección se consolidan los mapas interactivos elaborados previamente, con el fin de mostrar en una sola vista los eventos de peligros (PELIGRO), accidentes (ACCIDENTE), congestión (CONGESTIÓN) y cierres de vías (VÍA CERRADA). Esta consolidación facilita la comparación entre los diferentes tipos de eventos dentro de una misma interfaz.
La sincronización de estos mapas permite a los usuarios visualizar todos los eventos relevantes dentro de un mismo espacio geográfico, lo cual resulta útil para obtener una visión global de los problemas de tráfico y de los riesgos presentes en la ciudad, así como para la planificación de soluciones integrales que aborden de manera coordinada los distintos tipos de eventos.
# Sincronizar los mapas interactivos de distintos tipos de eventos
leafsync::sync(m26_peligro, m26_accidente, m26_congestion, m26_via_cerrada)
El análisis realizado sobre los datos proporcionados por Waze para el día 26 permite obtener una visión integral de los eventos que afectan la movilidad urbana, tales como los peligros en las vías (PELIGRO), la congestión (CONGESTIÓN), los accidentes (ACCIDENTE) y los cierres de vías (VÍA CERRADA). Mediante el uso de herramientas de análisis espacial y la visualización en mapas interactivos, se identificaron patrones relevantes en la distribución espacial y temporal de estos eventos.
El uso de datos de crowdsourcing, como los proporcionados por Waze, representa una herramienta valiosa para las autoridades encargadas de la gestión del tráfico. La capacidad de visualizar y analizar eventos en tiempo real permite no solo una respuesta rápida ante incidentes, sino también una planificación a largo plazo orientada a mejorar la infraestructura vial y la seguridad en las vías. Este tipo de análisis debería integrarse en los sistemas de gestión de tráfico de las ciudades, con el propósito de promover una movilidad más segura, eficiente y sostenible.