A partir de la base de datos “EncuestaOrigenDestino.xlsx” que contiene información sobre los viajes de personas realizados en la ciudad de Cali durante los meses de mayo y junio de 2015, se deben realizar 8 mapas que corresponden a:
Antes de desarrollar los puntos, realizamos un análisis exploratorio para limpiar la base de datos de datos faltantes y posibles inconsistencias, observemos que tipo de variables disponemos.
# Importar base de datos solicitada
OrigenDestino_Excel <- "C:/Users/Christian/Desktop/Carpeta del Todo/Cursos Maestria en Ciencia de Datos/07 - Análisis de datos geográficos y espaciales/Modulo 1 - Introducción a la Estadistica Espacial/EncuestaOrigenDestino.xlsx"
OrigenDestino= suppressMessages(suppressWarnings(read_excel(OrigenDestino_Excel)))
#Base de datos solicitada para este trabajo
names(OrigenDestino) <- substr(names(OrigenDestino), 1, 20)
str(OrigenDestino, give.attr = FALSE)
## tibble [35,054 × 28] (S3: tbl_df/tbl/data.frame)
## $ FECHA : POSIXct[1:35054], format: "2015-06-01" "2015-06-01" ...
## $ ID ESTACIÓN : num [1:35054] 1 1 1 1 1 1 1 1 1 1 ...
## $ ESTACIÓN : chr [1:35054] "Avenida 6N X Calle 70N" "Avenida 6N X Calle 70N" "Avenida 6N X Calle 70N" "Avenida 6N X Calle 70N" ...
## $ ACCESO : chr [1:35054] "NORTE" "NORTE" "NORTE" "NORTE" ...
## $ MOVIMIENTO : chr [1:35054] "MOV 1" "MOV 1" "MOV 1" "MOV 1" ...
## $ Hora de Encuesta : POSIXct[1:35054], format: "1899-12-31 06:10:00" "1899-12-31 06:11:00" ...
## $ MUNICIPIO...7 : chr [1:35054] "CALI" "CALIMA" "YUMBO" "YUMBO" ...
## $ DEPARTAMENTO / LOCAL: chr [1:35054] "B CHIPICHAPE" "DARIEN" "VALLE DEL CAUCA" "VALLE DEL CAUCA" ...
## $ Codigo Origen_SDG : chr [1:35054] "218" "4102" "3102" "3102" ...
## $ ¿QUE ESTABA HACIENDO: num [1:35054] 5 6 6 6 8 6 6 6 6 6 ...
## $ MUNICIPIO...11 : chr [1:35054] "CALI" "CALI" "CALI" "CALI" ...
## $ DEPARTAMENTO / LOCAL: chr [1:35054] "B PANCE" "TEQUENDAMA" "B EL PEÑON" "B OBRERO" ...
## $ Codigo Destino_SDG : chr [1:35054] "2216" "1904" "302" "910" ...
## $ ¿QUE VA HACER A ESE : num [1:35054] 1 4 1 1 1 1 2 1 1 2 ...
## $ ESTRATO EN SU VIVIEN: num [1:35054] 3 2 3 2 3 2 3 3 3 3 ...
## $ ¿DISPONIA DE UN VEHÍ: num [1:35054] 0 NA NA NA NA NA NA NA NA NA ...
## $ OTRO ¿CUÁL?...17 : logi [1:35054] NA NA NA NA NA NA ...
## $ ANTES : num [1:35054] NA NA NA NA NA NA NA NA NA NA ...
## $ DESPUES : logi [1:35054] NA NA NA NA NA NA ...
## $ EDAD : num [1:35054] 35 40 33 28 25 31 50 37 36 35 ...
## $ SEXO : num [1:35054] 2 2 2 2 2 2 2 2 2 2 ...
## $ PERSONAS EN EL VEHÍC: num [1:35054] 1 4 1 1 2 3 2 1 1 2 ...
## $ TIPO DE VEHÍCULO : num [1:35054] 2 3 2 2 2 3 3 2 2 3 ...
## $ OTRO ¿CUÁL?...24 : logi [1:35054] NA NA NA NA NA NA ...
## $ TIPO DE VIAJERO : chr [1:35054] "1" "1" "1" "1" ...
## $ comuna origen : chr [1:35054] "02" "Fuera de Cali" "Fuera de Cali" "Fuera de Cali" ...
## $ comuna destino : chr [1:35054] "22" "19" "03" "09" ...
## $ Intracomuna : chr [1:35054] "0" "0" "0" "0" ...
Iniciamos con una revisión de los datos faltantes. Dado que para esta actividad solo nos interesa los datos de comuna de origen y destino, y el tipo de vehículo, solo se realizará el análisis para estas variables.
#Calculando datos faltantes
Datos_faltantes <- data.frame(colnames(OrigenDestino), sapply(OrigenDestino, function(x) sum(is.na(x))))
Datos_faltantes <- Datos_faltantes[c(23, 26:27), ]
#Limpiando Dataframe
rownames(Datos_faltantes) <- NULL
colnames(Datos_faltantes) <- c("Variable", "Datos Faltantes")
#Presentando información en formato tabla
kable_classic(kbl(Datos_faltantes, caption = "<center><b>Tabla 1. Datos Faltantes por Variable</b></center>"), full_width = F)
| Variable | Datos Faltantes |
|---|---|
| TIPO DE VEHÍCULO | 115 |
| comuna origen | 0 |
| comuna destino | 0 |
Vemos que las variables “comuna origen” y “comuna destino” no presentan datos faltantes, si los tiene “TIPO DE VEHÍCULO”, y puede haber perdida de información allí, pero dado que solo se trabajará con los vehículos: bicicleta, moto y automóvil y que la cantidad de datos faltantes es 115/35.054 y esto a su vez es solo el 0,33% de los datos, no se realizará ninguna transformación de datos aquí.
A continuación revisaremos las consistencias de las categorías de las tres variables, empezando por “comuna origen”.
#Ver frecuencia de categorías en la variable "Comuna Origen"
kbl(addmargins(table(OrigenDestino$"comuna origen", useNA = "ifany")), caption = "<center><b>Tabla 2. Frecuencia de la variable 'Comuna Origen'</b></center>", col.names=c("Rotación","Frecuencia"))%>%
kable_classic(full_width = F)
| Rotación | Frecuencia |
|---|---|
| 0 | 672 |
| 01 | 794 |
| 02 | 2968 |
| 03 | 2121 |
| 04 | 1493 |
| 05 | 664 |
| 06 | 998 |
| 07 | 734 |
| 08 | 1124 |
| 09 | 952 |
| 10 | 1401 |
| 11 | 925 |
| 12 | 348 |
| 13 | 1238 |
| 14 | 685 |
| 15 | 1171 |
| 16 | 993 |
| 17 | 2377 |
| 18 | 1536 |
| 19 | 2850 |
| 20 | 733 |
| 21 | 818 |
| 22 | 1153 |
| Fuera de Cali | 6306 |
| Sum | 35054 |
Vemos que existe una categoría “0” en las comunas origen que no debería existir, la elección que se tomará acá es imputar por la moda, que como se puede apreciar en la tabla es la categoría “Fuera de Cali”, lo cual resulta muy conveniente, ya que al final estos datos no terminarán siendo graficados en el mapa. Los datos en la categoría “0” eran 672/35.054 lo que corresponden al 1,92% de los datos.
#Crear un dataframe nuevo para evitar destruir datos originales
OrigenDestino_Limpio <- OrigenDestino
#Imputar datos de la categoría "0" por "Fuera de Cali"
OrigenDestino_Limpio$"comuna origen"[OrigenDestino_Limpio$"comuna origen" == "0"] <- "Fuera de Cali"
#Ver frecuencia de categorías en la variable "Comuna Origen" tras correción
kbl(addmargins(table(OrigenDestino_Limpio$"comuna origen", useNA = "ifany")), caption = "<center><b>Tabla 3. Frecuencia de la variable 'Comuna Origen' tras Correción</b></center>", col.names=c("Rotación","Frecuencia"))%>%
kable_classic(full_width = F)
| Rotación | Frecuencia |
|---|---|
| 01 | 794 |
| 02 | 2968 |
| 03 | 2121 |
| 04 | 1493 |
| 05 | 664 |
| 06 | 998 |
| 07 | 734 |
| 08 | 1124 |
| 09 | 952 |
| 10 | 1401 |
| 11 | 925 |
| 12 | 348 |
| 13 | 1238 |
| 14 | 685 |
| 15 | 1171 |
| 16 | 993 |
| 17 | 2377 |
| 18 | 1536 |
| 19 | 2850 |
| 20 | 733 |
| 21 | 818 |
| 22 | 1153 |
| Fuera de Cali | 6978 |
| Sum | 35054 |
Tras la corrección comprobamos a través de la tabla que la categoría “0” ha desaparecido, continuamos la exploración con la variable “comuna destino”.
#Ver frecuencia de categorías en la variable "Comuna Destino"
kbl(addmargins(table(OrigenDestino_Limpio$"comuna destino", useNA = "ifany")), caption = "<center><b>Tabla 4. Frecuencia de la variable 'Comuna Destino'</b></center>", col.names=c("Rotación","Frecuencia"))%>%
kable_classic(full_width = F)
| Rotación | Frecuencia |
|---|---|
| 0 | 788 |
| 01 | 230 |
| 02 | 4810 |
| 03 | 3859 |
| 04 | 1856 |
| 05 | 522 |
| 06 | 716 |
| 07 | 748 |
| 08 | 1025 |
| 09 | 1279 |
| 10 | 927 |
| 11 | 564 |
| 12 | 246 |
| 13 | 673 |
| 14 | 379 |
| 15 | 579 |
| 16 | 743 |
| 17 | 2164 |
| 18 | 662 |
| 19 | 3158 |
| 20 | 351 |
| 21 | 515 |
| 22 | 1860 |
| Fuera de Cali | 6400 |
| Sum | 35054 |
Vemos que “comuna destino” tiene el mismo problema que “comuna origen” con la existencia de una categoría “0”, la moda en esta categoría también es “Fuera de Cali” por lo que procedemos de la misma forma. Los datos en la categoría “0” eran 788/35.054 lo que corresponden al 2,25% de los datos.
#Imputar datos de la categoría "0" por "Fuera de Cali"
OrigenDestino_Limpio$"comuna destino"[OrigenDestino_Limpio$"comuna destino" == "0"] <- "Fuera de Cali"
#Ver frecuencia de categorías en la variable "Comuna Destino" tras correción
kbl(addmargins(table(OrigenDestino_Limpio$"comuna destino", useNA = "ifany")), caption = "<center><b>Tabla 5. Frecuencia de la variable 'Comuna Destino' tras correción</b></center>", col.names=c("Rotación","Frecuencia"))%>%
kable_classic(full_width = F)
| Rotación | Frecuencia |
|---|---|
| 01 | 230 |
| 02 | 4810 |
| 03 | 3859 |
| 04 | 1856 |
| 05 | 522 |
| 06 | 716 |
| 07 | 748 |
| 08 | 1025 |
| 09 | 1279 |
| 10 | 927 |
| 11 | 564 |
| 12 | 246 |
| 13 | 673 |
| 14 | 379 |
| 15 | 579 |
| 16 | 743 |
| 17 | 2164 |
| 18 | 662 |
| 19 | 3158 |
| 20 | 351 |
| 21 | 515 |
| 22 | 1860 |
| Fuera de Cali | 7188 |
| Sum | 35054 |
Nuevamente comprobamos a través de la tabla que la categoría “0” desapareció de la variable “comuna destino”. Finalmente revisamos las categorías de la variable “TIPO DE VEHÍCULO”, pero antes debemos tener en cuenta que esta categoría está codificada y la codificación es la siguiente.
#Crear dataframe de los códigos de vehículos
ID_Vehiculos <- data.frame(ID=c("1","2","3","4","5","6","7","8","9","77"),Vehículo=c("Bicicleta","Moto","Automóvil","Campero","Taxi","Intermunicipal-Bus","Intermunicipal-Buseta","Intermunicipal-Van","Taxi Blanco","Otro"))
#Crear tabla para visualizar los códigos de los vehículos
kbl(ID_Vehiculos, caption = "<center><b>Tabla 6. Codificación de la variable 'Tipo de Vehículo'</b></center>", col.names=c("ID","Tipo de Vehículo"))%>%
kable_classic(full_width = F)
| ID | Tipo de Vehículo |
|---|---|
| 1 | Bicicleta |
| 2 | Moto |
| 3 | Automóvil |
| 4 | Campero |
| 5 | Taxi |
| 6 | Intermunicipal-Bus |
| 7 | Intermunicipal-Buseta |
| 8 | Intermunicipal-Van |
| 9 | Taxi Blanco |
| 77 | Otro |
Con ello ahora si procedemos a ver cómo están las categorías en esta variable.
#Ver frecuencia de categorías en la variable "Tipo de Vehículo"
kbl(addmargins(table(OrigenDestino_Limpio$"TIPO DE VEHÍCULO", useNA = "ifany")), caption = "<center><b>Tabla 7. Frecuencia de la variable 'Tipo de Vehículo'</b></center>", col.names=c("Rotación","Frecuencia"))%>%
kable_classic(full_width = F)
| Rotación | Frecuencia |
|---|---|
| 1 | 1731 |
| 2 | 16077 |
| 3 | 14100 |
| 4 | 459 |
| 5 | 1999 |
| 6 | 211 |
| 7 | 167 |
| 8 | 88 |
| 9 | 30 |
| 77 | 77 |
| NA | 115 |
| Sum | 35054 |
Podemos ver que, exceptuando por los datos faltantes, que ya habían sido identificados en la tabla 1, las categorías están correctamente demarcadas. Con respecto a los datos faltantes podrían plantearse dos alternativas, agregarlos a la clase “Otro” que es la clase “cajón” donde van a parar los datos no comunes, o imputar por la moda, en cuyo caso harían parte de la clase “Moto”, sin embargo como para esta actividad solo se graficarán adicionalmente las clases “Bicicleta”, “Moto” y “Automóvil”, no luce demasiado necesario hacer una transformación de los datos faltantes, ya que no entran en conflicto con la intención de la actividad a realizar.
Importamos el archivo de mapa de comunas y verificamos que este correcto.
#Importar archivo Shapefile
comunas_shapefile <- "C:/Users/Christian/Desktop/Carpeta del Todo/Cursos Maestria en Ciencia de Datos/07 - Análisis de datos geográficos y espaciales/Modulo 1 - Introducción a la Estadistica Espacial/cali/Comunas.shp"
comunas <- st_read(comunas_shapefile)
## Reading layer `Comunas' from data source
## `C:\Users\Christian\Desktop\Carpeta del Todo\Cursos Maestria en Ciencia de Datos\07 - Análisis de datos geográficos y espaciales\Modulo 1 - Introducción a la Estadistica Espacial\cali\Comunas.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 22 features and 4 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 1053868 ymin: 860190.2 xmax: 1068492 ymax: 879441.5
## Projected CRS: MAGNA_Colombia_Cali
#Mostrar el gráfico correspondiente a las comunas
plot(comunas$geometry)
A este shapefile que resulto de la exploración de los datos (comunas_limpio), lo ordenamos por el número de la columna para que podamos editarlo con facilidad posteriormente, y ya con ello podemos agregarle una columna por cada dato que vamos a gráficar, o crear un shapefile a partir del comuna.shp base para adicionar la columna a gráficar, pero en este momento ya podemos empezar con la resolución de los puntos solicitados.
#Ordenar el objeto SpatialPointsDataFrame por comuna
comunas_orden <- comunas[order(comunas$comuna), ]
A partir del shapefile que resulto de la exploración de los datos (comunas_orden), creamos uno nuevo (comunas_orden_origen) para graficar el origen de los viajes, esto lo hacemos añadiendo una columna que contenga la información que vimos en la exploración de los datos de los viajes por comuna de origen, y con ello graficamos este punto.
#Crear vector de datos de origen en general
datos_ComunaOrigen <- data.frame(table(OrigenDestino_Limpio$"comuna origen", useNA = "ifany"))[c(-23),c(2)]
#Agregar vector al SpatialPointsDataFrame
comunas_orden_origen <- comunas_orden
comunas_orden_origen$Comuna_Origen <- datos_ComunaOrigen
#Graficar datos por comuna de origen
plot(comunas_orden_origen[,6], main="Gráfico 1. Mapa de viajes por Comuna de Origen",
breaks=seq(0,3000,500))
En el mapa podemos ver que las comunas 2 y 19 son las que más registran viajes como punto de origen, las comunas 3, 17 y 18 también registran un alto nivel de viajes como punto de origen. Son puntos importantes a considerar en la movilidad de la ciudad.
Procedemos de la misma forma que el punto anterior, pero ahora filtramos los datos para el tipo de vehículo bicicleta para crear el nuevo objeto (comunas_orden_origen_bici), y graficamos los datos.
#Crear vector de datos de origen en bicicleta
datos_ComunaOrigen_Bici <- data.frame(table(OrigenDestino_Limpio$"comuna origen"[OrigenDestino_Limpio$"TIPO DE VEHÍCULO"==1], useNA = "ifany"))[c(-23,-24),c(2)]
#Agregar vector al SpatialPointsDataFrame
comunas_orden_origen_bici <- comunas_orden
comunas_orden_origen_bici$Comuna_Origen_Bici <- datos_ComunaOrigen_Bici
#Graficar datos por comuna de origen
plot(comunas_orden_origen_bici[,6], main="Gráfico 2. Mapa de viajes en Bicicleta por Comuna de Origen",
breaks=seq(0,175,25))
Con el filtro de comunas de origen en viajes en bicicleta, la comuna 2 se muestra como la de mayor cantidad de viajes como punto de origen, las comunas 19, 17 y 18 también se registran como puntos de alta actividad. Estos puntos son importantes a considerar en la infraestructura de ciclorutas de la ciudad.
Procedemos de la misma forma que el punto anterior, pero ahora filtramos los datos para el tipo de vehículo moto para crear el nuevo objeto (comunas_orden_origen_moto), y graficamos los datos.
#Crear vector de datos de origen en moto
datos_ComunaOrigen_Moto <- data.frame(table(OrigenDestino_Limpio$"comuna origen"[OrigenDestino_Limpio$"TIPO DE VEHÍCULO"==2], useNA = "ifany"))[c(-23,-24),c(2)]
#Agregar vector al SpatialPointsDataFrame
comunas_orden_origen_moto <- comunas_orden
comunas_orden_origen_moto$Comuna_Origen_Moto <- datos_ComunaOrigen_Moto
#Graficar datos por comuna de origen
plot(comunas_orden_origen_moto[,6], main="Gráfico 3. Mapa de viajes en Moto por Comuna de Origen",
breaks=seq(0,1500,250))
Con el filtro de comunas de origen en viajes en moto, las comunas 2 y 19 se muestran como las de mayor cantidad de viajes como puntos de origen, las comunas 3 y 17 también se registran como puntos de alta actividad. Estos son puntos importantes a considerar en las políticas de movilidad de motos.
Procedemos de la misma forma que el punto anterior, pero ahora filtramos los datos para el tipo de vehículo automóvil para crear el nuevo objeto (comunas_orden_origen_auto), y graficamos los datos.
#Crear vector de datos de origen en automóvil
datos_ComunaOrigen_Auto <- data.frame(table(OrigenDestino_Limpio$"comuna origen"[OrigenDestino_Limpio$"TIPO DE VEHÍCULO"==3], useNA = "ifany"))[c(-23,-24),c(2)]
#Agregar vector al SpatialPointsDataFrame
comunas_orden_origen_auto <- comunas_orden
comunas_orden_origen_auto$Comuna_Origen_Auto <- datos_ComunaOrigen_Auto
#Graficar datos por comuna de origen
plot(comunas_orden_origen_auto[,6], main="Gráfico 4. Mapa de viajes en Automóvil por Comuna de Origen",
breaks=seq(0,1200,200))
Con el filtro de comunas de origen en viajes en auto, las comunas 2 y 19 se muestran como las de mayor cantidad de viajes como puntos de origen, las comunas 3 y 17 también se registran como puntos de alta actividad. Estos son puntos importantes a considerar en las políticas de movilidad y vigilancia de las calles y autopistas para el transporte automotor.
Procedemos de la misma forma que el punto anterior, pero los datos usados corresponden ahora a la comuna de destino, no realizamos ningún filtro adicional y graficamos los datos.
#Crear vector de datos de origen en general
datos_ComunaDestino <- data.frame(table(OrigenDestino_Limpio$"comuna destino", useNA = "ifany"))[c(-23),c(2)]
#Agregar vector al SpatialPointsDataFrame
comunas_orden_destino <- comunas_orden
comunas_orden_destino$Comuna_Destino <- datos_ComunaDestino
#Graficar datos por comuna de origen
plot(comunas_orden_destino[,6], main="Gráfico 5. Mapa de viajes por Comuna de Destino",
breaks=seq(0,5000,500))
En el mapa podemos ver que la comuna 2 es la que más registra viajes como punto de destino, las comunas 3 y 19 también registran un alto nivel de viajes como punto de destino. Esas tres comunes también fueron notadas como puntos de origen importantes de viajes, son puntos de alta importancia a considerar en la movilidad de la ciudad.
Procedemos de la misma forma que el punto anterior, pero ahora filtramos los datos para el tipo de vehículo bicicleta para crear el nuevo objeto (comunas_orden_destino_bici), y graficamos los datos.
#Crear vector de datos de destino en bicicleta
datos_ComunaDestino_Bici <- data.frame(table(OrigenDestino_Limpio$"comuna destino"[OrigenDestino_Limpio$"TIPO DE VEHÍCULO"==1], useNA = "ifany"))[c(-23,-24),c(2)]
#Agregar vector al SpatialPointsDataFrame
comunas_orden_destino_bici <- comunas_orden
comunas_orden_destino_bici$Comuna_Destino_Bici <- datos_ComunaDestino_Bici
#Graficar datos por comuna de origen
plot(comunas_orden_destino_bici[,6], main="Gráfico 6. Mapa de viajes en Bicicleta por Comuna de Destino",
breaks=seq(0,225,25))
Con el filtro de comunas de destino en viajes en bicicleta, la comuna 2 se muestra como la de mayor cantidad de viajes como punto de destino, las comunas 3 y 19 también se registran como puntos de alta actividad. Las comunas 2 y 19 también fueron notadas como puntos de origen importantes de viajes en bicicletas, son puntos de alta importancia a considerar en la infraestructura de ciclorutas de la ciudad.
Procedemos de la misma forma que el punto anterior, pero ahora filtramos los datos para el tipo de vehículo moto para crear el nuevo objeto (comunas_orden_destino_moto), y graficamos los datos.
#Crear vector de datos de destino en moto
datos_ComunaDestino_Moto <- data.frame(table(OrigenDestino_Limpio$"comuna destino"[OrigenDestino_Limpio$"TIPO DE VEHÍCULO"==2], useNA = "ifany"))[c(-23,-24),c(2)]
#Agregar vector al SpatialPointsDataFrame
comunas_orden_destino_moto <- comunas_orden
comunas_orden_destino_moto$Comuna_Destino_Moto <- datos_ComunaDestino_Moto
#Graficar datos por comuna de origen
plot(comunas_orden_destino_moto[,6], main="Gráfico 7. Mapa de viajes en Moto por Comuna de Destino",
breaks=seq(0,2250,250))
Con el filtro de comunas de destino en viajes en moto, la comuna 2 se muestra como las de mayor cantidad de viajes como punto de destino, las comunas 3 y 19 también se registran como puntos de alta actividad. Estas tres comunas ya habían sido identificadas como puntos de origen importantes de viajes en moto. Estos son puntos importantes a considerar en las políticas de movilidad de motos.
Procedemos de la misma forma que el punto anterior, pero ahora filtramos los datos para el tipo de vehículo automóvil para crear el nuevo objeto (comunas_orden_destino_auto), y graficamos los datos.
#Crear vector de datos de origen en automóvil
datos_ComunaDestino_Auto <- data.frame(table(OrigenDestino_Limpio$"comuna destino"[OrigenDestino_Limpio$"TIPO DE VEHÍCULO"==3], useNA = "ifany"))[c(-23,-24),c(2)]
#Agregar vector al SpatialPointsDataFrame
comunas_orden_destino_auto <- comunas_orden
comunas_orden_destino_auto$Comuna_Destino_Auto <- datos_ComunaDestino_Auto
#Graficar datos por comuna de origen
plot(comunas_orden_destino_auto[,6], main="Gráfico 8. Mapa de viajes en Automóvil por Comuna de Destino",
breaks=seq(0,2250,250))
Con el filtro de comunas de destino en viajes en auto, la comuna 2 se muestra como las de mayor cantidad de viajes como puntos de destino, las comunas 3 y 19 también se registran como puntos de alta actividad. Estas tres comunas ya habían sido identificadas como puntos de destino importantes de viajes en auto. Estos son puntos importantes a considerar en las políticas de movilidad y vigilancia de las calles y autopistas para el transporte automotor.
A partir de los gráficos realizados se puede encontrar las siguientes observaciones: