En este informe se analiza información proveniente de la aplicación Waze, recopilada de manera colaborativa por sus usuarios. Estos datos registran eventos relevantes para la movilidad, como reportes de peligros, congestión y cierres de vías. La información generada tiene un gran potencial para ser utilizada por las autoridades responsables de la gestión del tránsito, ya que puede integrarse con modelos de patrones puntuales para optimizar el flujo vehicular de manera ágil y segura.
Con el propósito de demostrar este potencial, se seleccionó un subconjunto específico de datos correspondientes a un día en particular, el 26 de septiembre. A partir de esta muestra, se implementaron distintas etapas de la metodología CRISP-DM para desarrollar un análisis estructurado que permita extraer conclusiones útiles para la mejora de la movilidad.
Para realizar este análisis, se llevó a cabo la lectura de los datos provenientes de la API de Waze correspondientes al día 26-09-2024, con el objetivo de identificar los diferentes eventos reportados por los usuarios. Estos datos serán utilizados para desarrollar modelos predictivos basados en dichos eventos.
En primer lugar, se instalan y cargan las librerías necesarias. Posteriormente, se procede a leer y procesar los datos del archivo Excel que contiene la información. Durante el procesamiento inicial, se formatea la fecha y se traducen los nombres de los eventos al español para facilitar su interpretación y análisis.
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 análisis 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/vicod/Documents/Maestria/analisis de datos espaciales y geograficos/ACTIVIDAD 4/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")Una vez cargados los datos, se procede a verificar la distribución de los mismos mediante una tabla de contingencia y un gráfico de barras, que se presentan en la siguiente sección. Este análisis permite identificar los eventos más reportados por los usuarios, lo que contribuye a una mejor comprensión del problema y a priorizar los aspectos más relevantes para su análisis y modelado.
# Cargar la librería lubridate
library(lubridate)
# 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
# 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 predefinidaUna vez identificados los tipos de eventos y la cantidad de reportes correspondientes al día 26, se procede a filtrar cada uno de estos eventos para realizar análisis separados. Esto permite reducir el número de datos a estudiar y facilita un análisis detallado de cada tipo de evento y sus ubicaciones espaciales.
En primer lugar, se realiza una separación de todos los eventos clasificados como Peligro, con el objetivo de identificar las zonas de la ciudad donde los conductores enfrentan mayores riesgos. Este análisis es crucial para optimizar la asignación de recursos de vigilancia y asistencia, mejorando la seguridad vial en las áreas identificadas como críticas.
Una vez filtrados los eventos clasificados como Peligro, estos se visualizan en un mapa mediante clusters. Esta representación facilita su interpretación y geolocalización, permitiendo identificar de manera clara las áreas con mayor concentración de reportes.
# 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_peligroSe lleva a cabo un análisis espacial de los eventos Peligro reportados el día 26, utilizando herramientas avanzadas como spatstat y terra. El objetivo principal es examinar la distribución geográfica de estos eventos y generar mapas de calor que resalten las áreas de mayor riesgo.
Este análisis permite identificar patrones de concentración y zonas críticas, proporcionando información valiosa para la gestión del tráfico y la 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"))Se genera un mapa de densidad para analizar la distribución espacial de los eventos de cierre de vías (Vía Cerrada) reportados el día 26. Este análisis destaca las zonas más afectadas, facilitando la identificación de áreas críticas para planificar desvíos y mejorar la movilidad urbana.
El mapa ofrece una visualización clara de los puntos con mayor incidencia de cierres, proporcionando información clave para que las autoridades optimicen 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,]Se presenta un mapa interactivo, desarrollado con leaflet, que muestra los eventos de cierre de vías (Vía Cerrada) reportados el día 26. Cada marcador en el mapa permite acceder a detalles como la hora y las coordenadas del evento.
Esta herramienta facilita la exploración geográfica de las áreas afectadas, ofreciendo un recurso visual práctico para apoyar la planificación y gestión eficiente del tráfico urbano.
# 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_cerradaSe realiza un análisis espacial de los eventos de cierre de vías reportados el día 26, utilizando herramientas como spatstat y terra. Este estudio examina la distribución geográfica y los posibles patrones de concentración de estos eventos.
El análisis proporciona información clave para identificar áreas críticas, facilitando intervenciones inmediatas y una mejor planificación a largo plazo de la movilidad urbana.
# 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")Se crea un mapa de densidad centrado en las áreas con mayor incidencia de eventos de cierre de vías (Vía Cerrada). Este análisis resalta las zonas más afectadas, proporcionando una visión más precisa de las áreas críticas.
El mapa es una herramienta esencial para evaluar el impacto de estos cierres en la movilidad urbana y planificar soluciones eficaces para mitigar su efecto.
# 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"))Se realiza un análisis específico de los accidentes reportados el día 26, filtrando exclusivamente estos eventos para estudiar su distribución espacial y su impacto en la movilidad.
Este análisis es fundamental para identificar zonas peligrosas y proponer medidas de seguridad vial, como mejorar la infraestructura o añadir señalización en áreas 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,]Se presenta un mapa interactivo que visualiza los accidentes reportados el día 26, utilizando leaflet. Los usuarios pueden hacer clic en los marcadores para obtener detalles de cada evento.
Este mapa es una herramienta útil para analizar la distribución espacial de los accidentes, ayudando a identificar áreas con mayor concentración de incidentes y a planificar mejoras en la 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_accidenteSe examina la distribución geográfica de los accidentes reportados el día 26 utilizando herramientas como spatstat y terra. Este análisis busca identificar patrones espaciales en su ocurrencia.
Los resultados permiten detectar áreas con mayor incidencia de accidentes, brindando información clave para implementar estrategias de mitigación, como mejoras en la señalización o ajustes en la infraestructura vial para reducir riesgos.
# 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" )Se genera un mapa de densidad para mostrar la distribución de los accidentes ocurridos el día 26, destacando las áreas con mayor concentración. Esto permite identificar zonas de alto riesgo en la ciudad.
El mapa de densidad es esencial para visualizar las áreas más afectadas por accidentes, facilitando la planificación de intervenciones de seguridad vial y revelando patrones espaciales que no se perciben fácilmente en 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"))Se analiza la congestión reportada el día 26, filtrando los eventos de congestión para enfocarse exclusivamente en esos reportes. El estudio examina su distribución espacial y temporal.
Este análisis es fundamental para la planificación del tráfico, ya que permite identificar las áreas con mayor densidad de tráfico y los horarios con mayores problemas de movilidad. Estos datos son útiles para optimizar la gestión de semáforos y las 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,]Se presenta un mapa interactivo de los eventos de congestión reportados el día 26, utilizando leaflet. Los puntos de congestión se muestran en un mapa, y los usuarios pueden interactuar con los marcadores para obtener más detalles sobre cada evento.
Este mapa es una herramienta útil para explorar visualmente las áreas más afectadas por el tráfico, proporcionando datos valiosos para los planificadores urbanos y las autoridades responsables 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_congestionSe realiza un análisis espacial de los eventos de congestión reportados el día 26, utilizando herramientas como spatstat y terra. El objetivo es estudiar la distribución geográfica de estos eventos y detectar patrones recurrentes en ciertas áreas.
Este análisis es clave para identificar las zonas más congestionadas de la ciudad, lo que facilita a las autoridades la toma de decisiones sobre mejoras en la infraestructura o ajustes en las rutas de tráfico para reducir 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")Se genera un mapa de densidad para mostrar los eventos de congestión reportados el día 26, destacando las áreas con mayor densidad de tráfico. Esto proporciona una visualización clara de los puntos críticos de congestión en la ciudad.
Este mapa es una herramienta valiosa para los planificadores urbanos y las autoridades de tránsito, permitiendo identificar las zonas más problemáticas y evaluar soluciones para mejorar la fluidez del tráfico.
# 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 sección, se consolidan los mapas interactivos de eventos de Peligro, Accidentes, Congestión y Cierres de Vías en una sola vista. Esta integración permite comparar los diferentes tipos de eventos en una interfaz única.
La sincronización de estos mapas ofrece a los usuarios una visión completa de los problemas de tráfico y riesgos en la ciudad, facilitando la planificación de soluciones integrales que aborden múltiples eventos de forma coordinada.
# Sincronizar los mapas interactivos de distintos tipos de eventos
leafsync::sync(m26_peligro, m26_accidente, m26_congestion, m26_via_cerrada)El análisis de los datos de Waze del día 26 proporciona una visión integral de los eventos que afectan la movilidad urbana, como peligros en las vías, congestión, accidentes y cierres de vías. Utilizando herramientas de análisis espacial y mapas interactivos, se identificaron patrones clave en la distribución de estos eventos.
Puntos clave:
Frecuencia de eventos: Los trancones y peligros son los eventos más comunes, lo que resalta la necesidad de mejorar la gestión del tráfico y aplicar medidas preventivas en zonas específicas.
Zonas críticas: Los mapas de densidad indican áreas con alta concentración de accidentes y cierres de vías, sugiriendo que estas zonas requieren mejoras en infraestructura vial.
Congestión: El análisis de la congestión revela áreas con tráfico persistente en horas pico, lo que resalta la necesidad de optimizar semáforos y crear rutas alternativas.
Riesgos en las vías: La visualización de eventos de peligro muestra áreas de alto riesgo, lo que sugiere la necesidad de intervenciones en infraestructura y campañas de concientización.