Áreas de la estadística Espacial y conceptos de cartografía
Presentado por: Juan Sebastián Henao Aguirre
A continuación, se presenta el ejercicio de análisis de la encuesta origen destino en Cali. El objetivo de este es construir una serie de mapas sobre origen y destino de las personas en su movimientos en la ciudad. Pero antes de entrar en el caso, se deben preparar y organizar los datos. Por lo que este taller se divide en:
El primer paso será cargar las librerías y archivos con los cuales se construirá el caso.
Estas son las librerías requeridas para hacer el ejercicio:
library(raster)
## Loading required package: sp
library(rgdal)
## Please note that rgdal will be retired during 2023,
## plan transition to sf/stars/terra functions using GDAL and PROJ
## at your earliest convenience.
## See https://r-spatial.org/r/2022/04/12/evolution.html and https://github.com/r-spatial/evolution
## rgdal: version: 1.6-5, (SVN revision 1199)
## Geospatial Data Abstraction Library extensions to R successfully loaded
## Loaded GDAL runtime: GDAL 3.4.2, released 2022/03/08
## Path to GDAL shared files: /Users/juansebastianhenaoaguirre/Library/R/x86_64/4.2/library/rgdal/gdal
## GDAL binary built with GEOS: FALSE
## Loaded PROJ runtime: Rel. 8.2.1, January 1st, 2022, [PJ_VERSION: 821]
## Path to PROJ shared files: /Users/juansebastianhenaoaguirre/Library/R/x86_64/4.2/library/rgdal/proj
## PROJ CDN enabled: FALSE
## Linking to sp version:1.6-0
## To mute warnings of possible GDAL/OSR exportToProj4() degradation,
## use options("rgdal_show_exportToProj4_warnings"="none") before loading sp or rgdal.
library(sp)
library(readxl)
library(ggmap)
## Loading required package: ggplot2
## ℹ Google's Terms of Service: <https://mapsplatform.google.com>
## ℹ Please cite ggmap if you use it! Use `citation("ggmap")` for details.
library(RColorBrewer)
Para el desarrollo de este caso, se requiere de un archivo que contiene la cartografía en archivo .shp y otro que está en .xlsx. Se procede a cargar cada uno de los archivos.
mapacomunas=shapefile("~/Desktop/Casos/cali/Comunas.shp")
mapacomunas
## class : SpatialPolygonsDataFrame
## features : 22
## extent : 1053868, 1068492, 860190.2, 879441.5 (xmin, xmax, ymin, ymax)
## crs : +proj=tmerc +lat_0=3.441883333 +lon_0=-76.5205625 +k=1 +x_0=1061900.18 +y_0=872364.63 +a=6379137 +rf=298.257222101 +units=m +no_defs
## variables : 4
## names : OBJECTID, gid, comuna, nombre
## min values : 1, 89, 1, Comuna 1
## max values : 22, 110, 22, Comuna 9
Se procede a visualizar que se haya cargado correctamente el archivo.
plot(mapacomunas)
Ahora se procede a cargar la base de datos de la encuesta sobre la cual se analizarán los viajes de los habitantes de la ciudad.
require(readxl)
datosod = read_excel("~/Desktop/Casos/EncuestaOrigenDestino.xlsx")
## New names:
## • `MUNICIPIO` -> `MUNICIPIO...7`
## • `DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO /
## DIRECCIÓN` -> `DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA
## / HITO / DIRECCIÓN...8`
## • `MUNICIPIO` -> `MUNICIPIO...11`
## • `DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO /
## DIRECCIÓN` -> `DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA
## / HITO / DIRECCIÓN...12`
## • `OTRO ¿CUÁL?` -> `OTRO ¿CUÁL?...17`
## • `OTRO ¿CUÁL?` -> `OTRO ¿CUÁL?...24`
head(datosod)
## # A tibble: 6 × 28
## FECHA `ID ESTACIÓN` ESTACIÓN ACCESO MOVIMIENTO
## <dttm> <dbl> <chr> <chr> <chr>
## 1 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 2 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 3 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 4 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 5 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 6 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## # ℹ 23 more variables: `Hora de Encuesta` <dttm>, MUNICIPIO...7 <chr>,
## # `DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO / DIRECCIÓN...8` <chr>,
## # `Codigo Origen_SDG` <chr>, `¿QUE ESTABA HACIENDO EN ESE LUGAR?` <dbl>,
## # MUNICIPIO...11 <chr>,
## # `DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO / DIRECCIÓN...12` <chr>,
## # `Codigo Destino_SDG` <chr>, `¿QUE VA HACER A ESE LUGAR?` <dbl>,
## # `ESTRATO EN SU VIVIENDA` <dbl>, …
Para poder obtener los datos para hacer el análisis, es necesario hacer una limpieza de los datos de la encuesta. Para esto se hará una limpieza que incluye la transformación de las comunas a datos numéricos, la limpieza de datos vacíos, la asignación de coordenadas a los datos de la encuesta y filtrar los datos para que se incluyan solo aquellos que son solo dentro de Cali. Este es el primer paso que se realizará.
El primer paso será filtrar los datos para que sean solo los viajes al interior de Cali.
fueracali = which(datosod$`comuna origen`!="Fuera de Cali" & datosod$`comuna destino`!="Fuera de Cali" & datosod$`comuna origen`!="0" & datosod$`comuna destino`!="0")
datoscali=datosod[fueracali,]
head(datoscali)
## # A tibble: 6 × 28
## FECHA `ID ESTACIÓN` ESTACIÓN ACCESO MOVIMIENTO
## <dttm> <dbl> <chr> <chr> <chr>
## 1 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 2 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 3 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 4 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 5 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 6 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## # ℹ 23 more variables: `Hora de Encuesta` <dttm>, MUNICIPIO...7 <chr>,
## # `DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO / DIRECCIÓN...8` <chr>,
## # `Codigo Origen_SDG` <chr>, `¿QUE ESTABA HACIENDO EN ESE LUGAR?` <dbl>,
## # MUNICIPIO...11 <chr>,
## # `DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO / DIRECCIÓN...12` <chr>,
## # `Codigo Destino_SDG` <chr>, `¿QUE VA HACER A ESE LUGAR?` <dbl>,
## # `ESTRATO EN SU VIVIENDA` <dbl>, …
Luego, se procederá a hacer la transformación de los valores de comunas a valores numéricos para poder hacer la función que le asigne las coordenadas.
datoscali$comuna_origen <- as.numeric(datoscali$`comuna origen`)
datoscali$comuna_destino <- as.numeric(datoscali$`comuna destino`)
head(datoscali)
## # A tibble: 6 × 30
## FECHA `ID ESTACIÓN` ESTACIÓN ACCESO MOVIMIENTO
## <dttm> <dbl> <chr> <chr> <chr>
## 1 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 2 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 3 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 4 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 5 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 6 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## # ℹ 25 more variables: `Hora de Encuesta` <dttm>, MUNICIPIO...7 <chr>,
## # `DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO / DIRECCIÓN...8` <chr>,
## # `Codigo Origen_SDG` <chr>, `¿QUE ESTABA HACIENDO EN ESE LUGAR?` <dbl>,
## # MUNICIPIO...11 <chr>,
## # `DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO / DIRECCIÓN...12` <chr>,
## # `Codigo Destino_SDG` <chr>, `¿QUE VA HACER A ESE LUGAR?` <dbl>,
## # `ESTRATO EN SU VIVIENDA` <dbl>, …
Para realizar el cálculo con los datos provenientes de Excel, que no poseen coordenadas y solo se identifican comunas, se asigna la coordenada de la comuna desde el shape file con una pequeña función. Esto se hace para la comuna origen, como para la comuna destino
datoscali$latitud_comuna_origen = as.numeric(apply(datoscali["comuna_origen"], 1, function(x)
{
return(coordinates(mapacomunas)[x,2][1])
}))
datoscali$longitud_comuna_origen = as.numeric(apply(datoscali["comuna_origen"], 1, function(x)
{
return(coordinates(mapacomunas)[x,1][1])
}))
datoscali$latitud_comuna_destino = as.numeric(apply(datoscali["comuna_destino"], 1, function(x)
{
return(coordinates(mapacomunas)[x,2][1])
}))
datoscali$longitud_comuna_destino = as.numeric(apply(datoscali["comuna_destino"], 1, function(x)
{
return(coordinates(mapacomunas)[x,1][1])
}))
head(datoscali)
## # A tibble: 6 × 34
## FECHA `ID ESTACIÓN` ESTACIÓN ACCESO MOVIMIENTO
## <dttm> <dbl> <chr> <chr> <chr>
## 1 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 2 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 3 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 4 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 5 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 6 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## # ℹ 29 more variables: `Hora de Encuesta` <dttm>, MUNICIPIO...7 <chr>,
## # `DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO / DIRECCIÓN...8` <chr>,
## # `Codigo Origen_SDG` <chr>, `¿QUE ESTABA HACIENDO EN ESE LUGAR?` <dbl>,
## # MUNICIPIO...11 <chr>,
## # `DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO / DIRECCIÓN...12` <chr>,
## # `Codigo Destino_SDG` <chr>, `¿QUE VA HACER A ESE LUGAR?` <dbl>,
## # `ESTRATO EN SU VIVIENDA` <dbl>, …
Antes de proceder con los mapas, se hace una verificación de que no tengamos datos nulos en las coordenadas. Para esto se cuenta en cada una de las variables el número de valores nulos.
# Contar los nulos para las 4 variables
nulos_latitud_origen <- sum(is.na(datoscali$latitud_comuna_origen))
nulos_longitud_origen <- sum(is.na(datoscali$longitud_comuna_origen))
nulos_latitud_destino <- sum(is.na(datoscali$latitud_comuna_destino))
nulos_longitud_destino <- sum(is.na(datoscali$longitud_comuna_destino))
# Mostrar los resultados
print("Cantidad de valores nulos en latitud_comuna_origen:")
## [1] "Cantidad de valores nulos en latitud_comuna_origen:"
print(nulos_latitud_origen)
## [1] 0
print("Cantidad de valores nulos en longitud_comuna_origen:")
## [1] "Cantidad de valores nulos en longitud_comuna_origen:"
print(nulos_longitud_origen)
## [1] 0
print("Cantidad de valores nulos en latitud_comuna_destino:")
## [1] "Cantidad de valores nulos en latitud_comuna_destino:"
print(nulos_latitud_destino)
## [1] 0
print("Cantidad de valores nulos en longitud_comuna_destino:")
## [1] "Cantidad de valores nulos en longitud_comuna_destino:"
print(nulos_longitud_destino)
## [1] 0
Con todo correcto, se procede a hacer los filtros para hacer las cartografías.
El primer ejercicio que se hará, es mostrar el mapa por el origen de comuna para quienes realizan viajes en carro, motos y bicicleta. Luego se hará uno para cada medio de transporte:
origentotal=SpatialPointsDataFrame(coords = datoscali[,31:32],
data = datoscali,
proj4string = crs(mapacomunas)
)
origentotal
## class : SpatialPointsDataFrame
## features : 22151
## extent : 862283.3, 877232, 1056762, 1067421 (xmin, xmax, ymin, ymax)
## crs : +proj=tmerc +lat_0=3.441883333 +lon_0=-76.5205625 +k=1 +x_0=1061900.18 +y_0=872364.63 +a=6379137 +rf=298.257222101 +units=m +no_defs
## variables : 34
## names : FECHA, ID ESTACIÓN, ESTACIÓN, ACCESO, MOVIMIENTO, Hora de Encuesta, MUNICIPIO...7, DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO / DIRECCIÓN...8, Codigo Origen_SDG, ¿QUE ESTABA HACIENDO EN ESE LUGAR?, MUNICIPIO...11, DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO / DIRECCIÓN...12, Codigo Destino_SDG, ¿QUE VA HACER A ESE LUGAR?, ESTRATO EN SU VIVIENDA, ...
## min values : 1430697600, 1, Autopista Cali-Jamundí, NORTE, MOV 1, -2209053600, CALI, 1 DE MAYO, 1001, 1, CALI, 1 A N GRANADA, 1001, 1, 1, ...
## max values : 1433808000, 30, Diagonal 15 X Av. Ciudad de Cali, SUR, MOV 4, -2209030260, POPAYAN, ZUPIANO LLOREDA, 914, 77, POPAYAN, ZOOLOGICO OESTE, 914, 77, 6, ...
Sobre estos datos, se realiza la primera intersección a partir de la importancia de la comuna de origen:
#copia del dataframe de origen
origen1=origentotal
# Establecer el CRS de origen1 como el mismo que tiene mapacomunas
crs(origen1) <- crs(mapacomunas)
# Realizar el conteo de registros por comuna
conteo_por_comuna <- table(origen1$comuna_origen)
# nueva variable en mapacomunas y asignar los resultados del conteo
mapacomunas$origen1 <- conteo_por_comuna[match(mapacomunas$comuna, names(conteo_por_comuna))]
mapacomunas$origen1 <- as.numeric(mapacomunas$origen1)
# Mostrar el resultado
head(mapacomunas@data, 25)
## OBJECTID gid comuna nombre origen1
## 1 1 107 2 Comuna 2 2250
## 2 2 108 1 Comuna 1 626
## 3 3 109 3 Comuna 3 1610
## 4 4 110 19 Comuna 19 2241
## 5 5 103 15 Comuna 15 974
## 6 6 104 17 Comuna 17 1762
## 7 7 105 18 Comuna 18 1208
## 8 8 106 22 Comuna 22 985
## 9 9 89 6 Comuna 6 797
## 10 10 90 4 Comuna 4 1193
## 11 11 91 5 Comuna 5 521
## 12 12 92 7 Comuna 7 583
## 13 13 93 8 Comuna 8 862
## 14 14 94 9 Comuna 9 737
## 15 15 95 21 Comuna 21 693
## 16 16 96 13 Comuna 13 1031
## 17 17 97 12 Comuna 12 257
## 18 18 98 14 Comuna 14 575
## 19 19 99 11 Comuna 11 717
## 20 20 100 10 Comuna 10 1094
## 21 21 101 20 Comuna 20 599
## 22 22 102 16 Comuna 16 836
Ahora se procede a hacer el mapa.
# Generamos el mapa utilizando spplot
spplot(mapacomunas,"origen1", cuts = 6, main = "Comunas Origen para viajes en Carro, moto y bicicleta")
Ahora sobre estos, se realiza el filtro para carros y se procede al mapa.
carros=which(origentotal@data$`TIPO DE VEHÍCULO`==3)
origen2=origentotal[carros,]
Se realiza la intersección para realizar el mapa
origencarro=origen2
# Establecer el CRS de origen1 como el mismo que tiene mapacomunas
crs(origencarro) <- crs(mapacomunas)
# Realizar el conteo de registros por comuna
conteo_por_comuna2 <- table(origencarro$comuna_origen)
# nueva variable en mapacomunas y asignar los resultados del conteo
mapacomunas$origencarro <- conteo_por_comuna2[match(mapacomunas$comuna, names(conteo_por_comuna2))]
mapacomunas$origencarro <- as.numeric(mapacomunas$origencarro)
# Mostrar el resultado
head(mapacomunas@data, 25)
## OBJECTID gid comuna nombre origen1 origencarro
## 1 1 107 2 Comuna 2 2250 860
## 2 2 108 1 Comuna 1 626 234
## 3 3 109 3 Comuna 3 1610 679
## 4 4 110 19 Comuna 19 2241 923
## 5 5 103 15 Comuna 15 974 377
## 6 6 104 17 Comuna 17 1762 662
## 7 7 105 18 Comuna 18 1208 433
## 8 8 106 22 Comuna 22 985 424
## 9 9 89 6 Comuna 6 797 314
## 10 10 90 4 Comuna 4 1193 443
## 11 11 91 5 Comuna 5 521 185
## 12 12 92 7 Comuna 7 583 229
## 13 13 93 8 Comuna 8 862 319
## 14 14 94 9 Comuna 9 737 295
## 15 15 95 21 Comuna 21 693 272
## 16 16 96 13 Comuna 13 1031 412
## 17 17 97 12 Comuna 12 257 88
## 18 18 98 14 Comuna 14 575 236
## 19 19 99 11 Comuna 11 717 268
## 20 20 100 10 Comuna 10 1094 404
## 21 21 101 20 Comuna 20 599 228
## 22 22 102 16 Comuna 16 836 320
Con esto en mente, se realiza el mapa
spplot(mapacomunas,"origencarro", cuts = 6, main = "Comunas Origen para viajes en Carro")
Ahora , se realiza el filtro para bicicleta .
bicicleta=which(origentotal@data$`TIPO DE VEHÍCULO`==1)
origen3=origentotal[bicicleta,]
Se realiza la intersección
origenbicicleta=origen3
# Establecer el CRS de origen1 como el mismo que tiene mapacomunas
crs(origenbicicleta) <- crs(mapacomunas)
# Realizar el conteo de registros por comuna
conteo_por_comuna3 <- table(origenbicicleta$comuna_origen)
# nueva variable en mapacomunas y asignar los resultados del conteo
mapacomunas$origenbicicleta <- conteo_por_comuna3[match(mapacomunas$comuna, names(conteo_por_comuna3))]
mapacomunas$origenbicicleta <- as.numeric(mapacomunas$origenbicicleta)
# Mostrar el resultado
head(mapacomunas@data, 25)
## OBJECTID gid comuna nombre origen1 origencarro origenbicicleta
## 1 1 107 2 Comuna 2 2250 860 122
## 2 2 108 1 Comuna 1 626 234 32
## 3 3 109 3 Comuna 3 1610 679 84
## 4 4 110 19 Comuna 19 2241 923 113
## 5 5 103 15 Comuna 15 974 377 55
## 6 6 104 17 Comuna 17 1762 662 103
## 7 7 105 18 Comuna 18 1208 433 85
## 8 8 106 22 Comuna 22 985 424 52
## 9 9 89 6 Comuna 6 797 314 29
## 10 10 90 4 Comuna 4 1193 443 58
## 11 11 91 5 Comuna 5 521 185 28
## 12 12 92 7 Comuna 7 583 229 30
## 13 13 93 8 Comuna 8 862 319 46
## 14 14 94 9 Comuna 9 737 295 36
## 15 15 95 21 Comuna 21 693 272 35
## 16 16 96 13 Comuna 13 1031 412 62
## 17 17 97 12 Comuna 12 257 88 10
## 18 18 98 14 Comuna 14 575 236 32
## 19 19 99 11 Comuna 11 717 268 42
## 20 20 100 10 Comuna 10 1094 404 71
## 21 21 101 20 Comuna 20 599 228 33
## 22 22 102 16 Comuna 16 836 320 65
Ahora se crea el mapa
spplot(mapacomunas, "origenbicicleta", main = "Comunas Origen para viajes en bicicleta")
Ahora , se realiza el filtro para moto .
moto=which(origentotal@data$`TIPO DE VEHÍCULO`==2)
origen4=origentotal[moto,]
Se mira ahora para la frecuncia de los viajes:
origenmoto=origen3
# Establecer el CRS de origen1 como el mismo que tiene mapacomunas
crs(origenmoto) <- crs(mapacomunas)
# Realizar el conteo de registros por comuna
conteo_por_comuna4 <- table(origenmoto$comuna_origen)
# nueva variable en mapacomunas y asignar los resultados del conteo
mapacomunas$origenmoto <- conteo_por_comuna4[match(mapacomunas$comuna, names(conteo_por_comuna4))]
mapacomunas$origenmoto <- as.numeric(mapacomunas$origenmoto)
# Mostrar el resultado
head(mapacomunas@data, 25)
## OBJECTID gid comuna nombre origen1 origencarro origenbicicleta origenmoto
## 1 1 107 2 Comuna 2 2250 860 122 122
## 2 2 108 1 Comuna 1 626 234 32 32
## 3 3 109 3 Comuna 3 1610 679 84 84
## 4 4 110 19 Comuna 19 2241 923 113 113
## 5 5 103 15 Comuna 15 974 377 55 55
## 6 6 104 17 Comuna 17 1762 662 103 103
## 7 7 105 18 Comuna 18 1208 433 85 85
## 8 8 106 22 Comuna 22 985 424 52 52
## 9 9 89 6 Comuna 6 797 314 29 29
## 10 10 90 4 Comuna 4 1193 443 58 58
## 11 11 91 5 Comuna 5 521 185 28 28
## 12 12 92 7 Comuna 7 583 229 30 30
## 13 13 93 8 Comuna 8 862 319 46 46
## 14 14 94 9 Comuna 9 737 295 36 36
## 15 15 95 21 Comuna 21 693 272 35 35
## 16 16 96 13 Comuna 13 1031 412 62 62
## 17 17 97 12 Comuna 12 257 88 10 10
## 18 18 98 14 Comuna 14 575 236 32 32
## 19 19 99 11 Comuna 11 717 268 42 42
## 20 20 100 10 Comuna 10 1094 404 71 71
## 21 21 101 20 Comuna 20 599 228 33 33
## 22 22 102 16 Comuna 16 836 320 65 65
Ahora se realiza el mapa.
spplot(mapacomunas,"origenmoto", main = "Comunas Origen para viajes en moto")
Para finalizar se realizan los mapas de las comunas de destino dentro. Ya se presentaron los datos por comuna de origen, ahora es por destino y la estructura que se seguirá es igual a la anterior.
destinototal=SpatialPointsDataFrame(coords = datoscali[,33:34],
data = datoscali,
proj4string = crs(mapacomunas)
)
destinototal
## class : SpatialPointsDataFrame
## features : 22151
## extent : 862283.3, 877232, 1056762, 1067421 (xmin, xmax, ymin, ymax)
## crs : +proj=tmerc +lat_0=3.441883333 +lon_0=-76.5205625 +k=1 +x_0=1061900.18 +y_0=872364.63 +a=6379137 +rf=298.257222101 +units=m +no_defs
## variables : 34
## names : FECHA, ID ESTACIÓN, ESTACIÓN, ACCESO, MOVIMIENTO, Hora de Encuesta, MUNICIPIO...7, DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO / DIRECCIÓN...8, Codigo Origen_SDG, ¿QUE ESTABA HACIENDO EN ESE LUGAR?, MUNICIPIO...11, DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO / DIRECCIÓN...12, Codigo Destino_SDG, ¿QUE VA HACER A ESE LUGAR?, ESTRATO EN SU VIVIENDA, ...
## min values : 1430697600, 1, Autopista Cali-Jamundí, NORTE, MOV 1, -2209053600, CALI, 1 DE MAYO, 1001, 1, CALI, 1 A N GRANADA, 1001, 1, 1, ...
## max values : 1433808000, 30, Diagonal 15 X Av. Ciudad de Cali, SUR, MOV 4, -2209030260, POPAYAN, ZUPIANO LLOREDA, 914, 77, POPAYAN, ZOOLOGICO OESTE, 914, 77, 6, ...
#copia del dataframe de origen
destino1=destinototal
# Establecer el CRS de origen1 como el mismo que tiene mapacomunas
crs(destino1) <- crs(mapacomunas)
# Realizar el conteo de registros por comuna
conteo_por_comuna5 <- table(destino1$comuna_destino)
# nueva variable en mapacomunas y asignar los resultados del conteo
mapacomunas$destino1 <- conteo_por_comuna5[match(mapacomunas$comuna, names(conteo_por_comuna5))]
mapacomunas$destino1 <- as.numeric(mapacomunas$destino1)
# Mostrar el resultado
head(mapacomunas@data, 25)
## OBJECTID gid comuna nombre origen1 origencarro origenbicicleta origenmoto
## 1 1 107 2 Comuna 2 2250 860 122 122
## 2 2 108 1 Comuna 1 626 234 32 32
## 3 3 109 3 Comuna 3 1610 679 84 84
## 4 4 110 19 Comuna 19 2241 923 113 113
## 5 5 103 15 Comuna 15 974 377 55 55
## 6 6 104 17 Comuna 17 1762 662 103 103
## 7 7 105 18 Comuna 18 1208 433 85 85
## 8 8 106 22 Comuna 22 985 424 52 52
## 9 9 89 6 Comuna 6 797 314 29 29
## 10 10 90 4 Comuna 4 1193 443 58 58
## 11 11 91 5 Comuna 5 521 185 28 28
## 12 12 92 7 Comuna 7 583 229 30 30
## 13 13 93 8 Comuna 8 862 319 46 46
## 14 14 94 9 Comuna 9 737 295 36 36
## 15 15 95 21 Comuna 21 693 272 35 35
## 16 16 96 13 Comuna 13 1031 412 62 62
## 17 17 97 12 Comuna 12 257 88 10 10
## 18 18 98 14 Comuna 14 575 236 32 32
## 19 19 99 11 Comuna 11 717 268 42 42
## 20 20 100 10 Comuna 10 1094 404 71 71
## 21 21 101 20 Comuna 20 599 228 33 33
## 22 22 102 16 Comuna 16 836 320 65 65
## destino1
## 1 3773
## 2 187
## 3 2887
## 4 2441
## 5 481
## 6 1616
## 7 526
## 8 1561
## 9 570
## 10 1497
## 11 440
## 12 598
## 13 830
## 14 1055
## 15 434
## 16 560
## 17 207
## 18 316
## 19 483
## 20 741
## 21 303
## 22 645
Para finalizar, se realiza la visualización de un mapa de coropletas
num_colors <- 9
color_paleta <- brewer.pal(num_colors, "OrRd")
# Generamos el mapa utilizando spplot
spplot(mapacomunas,"destino1", col.regions = color_paleta, cuts = 6, main = "Comunas destino para viajes en Carro, moto y bicicleta")
Ahora sobre estos, se realiza el filtro para carros y se procede al mapa.
carros2=which(destinototal@data$'TIPO DE VEHÍCULO'==3)
destino2=destinototal[carros2,]
Se realiza la intersección para realizar el mapa
destinocarro=destino2
# Establecer el CRS de origen1 como el mismo que tiene mapacomunas
crs(destinocarro) <- crs(mapacomunas)
# Realizar el conteo de registros por comuna
conteo_por_comuna6 <- table(destinocarro$comuna_origen)
# nueva variable en mapacomunas y asignar los resultados del conteo
mapacomunas$destinocarro <- conteo_por_comuna6[match(mapacomunas$comuna, names(conteo_por_comuna6))]
mapacomunas$destinocarro <- as.numeric(mapacomunas$destinocarro)
# Mostrar el resultado
head(mapacomunas@data, 25)
## OBJECTID gid comuna nombre origen1 origencarro origenbicicleta origenmoto
## 1 1 107 2 Comuna 2 2250 860 122 122
## 2 2 108 1 Comuna 1 626 234 32 32
## 3 3 109 3 Comuna 3 1610 679 84 84
## 4 4 110 19 Comuna 19 2241 923 113 113
## 5 5 103 15 Comuna 15 974 377 55 55
## 6 6 104 17 Comuna 17 1762 662 103 103
## 7 7 105 18 Comuna 18 1208 433 85 85
## 8 8 106 22 Comuna 22 985 424 52 52
## 9 9 89 6 Comuna 6 797 314 29 29
## 10 10 90 4 Comuna 4 1193 443 58 58
## 11 11 91 5 Comuna 5 521 185 28 28
## 12 12 92 7 Comuna 7 583 229 30 30
## 13 13 93 8 Comuna 8 862 319 46 46
## 14 14 94 9 Comuna 9 737 295 36 36
## 15 15 95 21 Comuna 21 693 272 35 35
## 16 16 96 13 Comuna 13 1031 412 62 62
## 17 17 97 12 Comuna 12 257 88 10 10
## 18 18 98 14 Comuna 14 575 236 32 32
## 19 19 99 11 Comuna 11 717 268 42 42
## 20 20 100 10 Comuna 10 1094 404 71 71
## 21 21 101 20 Comuna 20 599 228 33 33
## 22 22 102 16 Comuna 16 836 320 65 65
## destino1 destinocarro
## 1 3773 860
## 2 187 234
## 3 2887 679
## 4 2441 923
## 5 481 377
## 6 1616 662
## 7 526 433
## 8 1561 424
## 9 570 314
## 10 1497 443
## 11 440 185
## 12 598 229
## 13 830 319
## 14 1055 295
## 15 434 272
## 16 560 412
## 17 207 88
## 18 316 236
## 19 483 268
## 20 741 404
## 21 303 228
## 22 645 320
Con esto, se procede a crear el mapa
# Generamos el mapa utilizando spplot
spplot(mapacomunas,"destinocarro", col.regions = color_paleta, cuts = 6, main = "Comunas destino para viajes en Carro")
Ahora sobre estos, se realiza el filtro para carros y se procede al mapa.
moto2=which(destinototal@data$'TIPO DE VEHÍCULO'==2)
destino3=destinototal[moto2,]
Se realiza la intersección para realizar el mapa
destinomoto=destino3
# Establecer el CRS de origen1 como el mismo que tiene mapacomunas
crs(destinomoto) <- crs(mapacomunas)
# Realizar el conteo de registros por comuna
conteo_por_comuna7 <- table(destinomoto$comuna_origen)
# nueva variable en mapacomunas y asignar los resultados del conteo
mapacomunas$destinomoto <- conteo_por_comuna7[match(mapacomunas$comuna, names(conteo_por_comuna7))]
mapacomunas$destinomoto <- as.numeric(mapacomunas$destinomoto)
# Mostrar el resultado
head(mapacomunas@data, 25)
## OBJECTID gid comuna nombre origen1 origencarro origenbicicleta origenmoto
## 1 1 107 2 Comuna 2 2250 860 122 122
## 2 2 108 1 Comuna 1 626 234 32 32
## 3 3 109 3 Comuna 3 1610 679 84 84
## 4 4 110 19 Comuna 19 2241 923 113 113
## 5 5 103 15 Comuna 15 974 377 55 55
## 6 6 104 17 Comuna 17 1762 662 103 103
## 7 7 105 18 Comuna 18 1208 433 85 85
## 8 8 106 22 Comuna 22 985 424 52 52
## 9 9 89 6 Comuna 6 797 314 29 29
## 10 10 90 4 Comuna 4 1193 443 58 58
## 11 11 91 5 Comuna 5 521 185 28 28
## 12 12 92 7 Comuna 7 583 229 30 30
## 13 13 93 8 Comuna 8 862 319 46 46
## 14 14 94 9 Comuna 9 737 295 36 36
## 15 15 95 21 Comuna 21 693 272 35 35
## 16 16 96 13 Comuna 13 1031 412 62 62
## 17 17 97 12 Comuna 12 257 88 10 10
## 18 18 98 14 Comuna 14 575 236 32 32
## 19 19 99 11 Comuna 11 717 268 42 42
## 20 20 100 10 Comuna 10 1094 404 71 71
## 21 21 101 20 Comuna 20 599 228 33 33
## 22 22 102 16 Comuna 16 836 320 65 65
## destino1 destinocarro destinomoto
## 1 3773 860 1063
## 2 187 234 296
## 3 2887 679 702
## 4 2441 923 995
## 5 481 377 455
## 6 1616 662 853
## 7 526 433 593
## 8 1561 424 430
## 9 570 314 377
## 10 1497 443 571
## 11 440 185 260
## 12 598 229 272
## 13 830 319 421
## 14 1055 295 317
## 15 434 272 323
## 16 560 412 453
## 17 207 88 133
## 18 316 236 258
## 19 483 268 339
## 20 741 404 535
## 21 303 228 278
## 22 645 320 383
Con esto, se crea el mapa
# Generamos el mapa utilizando spplot
spplot(mapacomunas,"destinomoto", col.regions = color_paleta, cuts = 6, main = "Comunas destino para viajes en moto")
Ahora sobre estos, se realiza el filtro para carros y se procede al mapa.
bicicleta2=which(destinototal@data$'TIPO DE VEHÍCULO'==1)
destino4=destinototal[bicicleta2,]
Se realiza la intersección para realizar el mapa
destinobicicleta=destino4
# Establecer el CRS de origen1 como el mismo que tiene mapacomunas
crs(destinobicicleta) <- crs(mapacomunas)
# Realizar el conteo de registros por comuna
conteo_por_comuna8 <- table(destinobicicleta$comuna_origen)
# nueva variable en mapacomunas y asignar los resultados del conteo
mapacomunas$destinobicicleta <- conteo_por_comuna8[match(mapacomunas$comuna, names(conteo_por_comuna8))]
mapacomunas$destinobicicleta <- as.numeric(mapacomunas$destinobicicleta)
# Mostrar el resultado
head(mapacomunas@data, 25)
## OBJECTID gid comuna nombre origen1 origencarro origenbicicleta origenmoto
## 1 1 107 2 Comuna 2 2250 860 122 122
## 2 2 108 1 Comuna 1 626 234 32 32
## 3 3 109 3 Comuna 3 1610 679 84 84
## 4 4 110 19 Comuna 19 2241 923 113 113
## 5 5 103 15 Comuna 15 974 377 55 55
## 6 6 104 17 Comuna 17 1762 662 103 103
## 7 7 105 18 Comuna 18 1208 433 85 85
## 8 8 106 22 Comuna 22 985 424 52 52
## 9 9 89 6 Comuna 6 797 314 29 29
## 10 10 90 4 Comuna 4 1193 443 58 58
## 11 11 91 5 Comuna 5 521 185 28 28
## 12 12 92 7 Comuna 7 583 229 30 30
## 13 13 93 8 Comuna 8 862 319 46 46
## 14 14 94 9 Comuna 9 737 295 36 36
## 15 15 95 21 Comuna 21 693 272 35 35
## 16 16 96 13 Comuna 13 1031 412 62 62
## 17 17 97 12 Comuna 12 257 88 10 10
## 18 18 98 14 Comuna 14 575 236 32 32
## 19 19 99 11 Comuna 11 717 268 42 42
## 20 20 100 10 Comuna 10 1094 404 71 71
## 21 21 101 20 Comuna 20 599 228 33 33
## 22 22 102 16 Comuna 16 836 320 65 65
## destino1 destinocarro destinomoto destinobicicleta
## 1 3773 860 1063 122
## 2 187 234 296 32
## 3 2887 679 702 84
## 4 2441 923 995 113
## 5 481 377 455 55
## 6 1616 662 853 103
## 7 526 433 593 85
## 8 1561 424 430 52
## 9 570 314 377 29
## 10 1497 443 571 58
## 11 440 185 260 28
## 12 598 229 272 30
## 13 830 319 421 46
## 14 1055 295 317 36
## 15 434 272 323 35
## 16 560 412 453 62
## 17 207 88 133 10
## 18 316 236 258 32
## 19 483 268 339 42
## 20 741 404 535 71
## 21 303 228 278 33
## 22 645 320 383 65
Con esto, se crea el mapa
# Generamos el mapa utilizando spplot
spplot(mapacomunas,"destinobicicleta", col.regions = color_paleta, cuts = 6, main = "Comunas destino para viajes en bicicleta")