Caso específico:

Se requiere graficar por medio de mapas el uso de medio de transporte, origen y destino en la ciudad de Cali.

Cargar el mapa de la ciudad de Cali:

library(sf)
## Linking to GEOS 3.11.2, GDAL 3.8.2, PROJ 9.3.1; sf_use_s2() is TRUE
library(sp)
library(raster)
library(leaflet)

Despues de las librerías:

comunascali = shapefile("~/Unidad1_AnaGeoEsp/Comunascali/Comunas_up.shp")

comunascali
## class       : SpatialPolygonsDataFrame 
## features    : 22 
## extent      : -76.59284, -76.46125, 3.331802, 3.505871  (xmin, xmax, ymin, ymax)
## crs         : +proj=longlat +datum=WGS84 +no_defs 
## variables   : 8
## names       : casos, comuna,   nombre, zona_recol,         area, perimetro, covid, viajes 
## min values  :     1,      1, Comuna 1,         NA,  2329397.941,  7983.949,     5,    348 
## max values  :    39,     22, Comuna 9,         NA, 12555929.024, 26480.361,    54,   2968

Nota: Es importante tener en cuenta que el sistema de coordenadas es ‘WGS84’ - (“World Geodetic System 1984”).

Se grafíca el shapefile comuna.shp

El mapa tiene 22 comunas de la ciudad de Cali.

plot(comunascali)

Graficando las comunas cali usando la función spplot.

spplot(comunascali)

Ahora se procede a cargar los datos requeridos, de la hoja con nombre “Sheet4”:

require(readxl)
## Loading required package: readxl
encuesta_od = read_excel("~/Unidad1_AnaGeoEsp/EncuestaOrigenDestino.xlsx", sheet = "Sheet4")
## 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`

Preparación de datos:

comunas_ori <- encuesta_od
comunascaliOri <- comunascali

comunascali$comuna
##  [1]  6  4  5  7  8  9 21 13  1  3 19 12 10 20 16 15 17 18 14 11  2 22
tablaOri=comunas_ori$comunaorigen

casos=table(tablaOri)

Se obtiene el número de comunas de la ciudad de Cali, en este caso sabemos son 22, pero se tiene en su orden específico.

Nota: se tienen dos valores diferentes a las 22 comunas, estos son ‘0’ y ‘Fueradecali’

De igual forma se hace un agrupamiento de personas por comuna origen.

Comunas Origen

comunascaliOri$TotaltrasOri=NA

tablaOri=comunas_ori$comunaorigen

casos=table(tablaOri)

comunaorigen=table(tablaOri)

comunascali$comuna[1]
## [1] 6
which(comunascali$comuna[1]==as.numeric(names(comunaorigen)))
## [1] 7
ordenorig=match(comunascali$comuna,as.numeric(names(comunaorigen)))

casos[ordenorig]
## tablaOri
##   06   04   05   07   08   09   21   13   01   03   19   12   10   20   16   15 
##  998 1493  664  734 1124  952  818 1238  794 2121 2850  348 1401  733  993 1171 
##   17   18   14   11   02   22 
## 2377 1536  685  925 2968 1153
comunascaliOri$TotaltrasOri=as.numeric(casos[ordenorig])

comunascaliOri
## class       : SpatialPolygonsDataFrame 
## features    : 22 
## extent      : -76.59284, -76.46125, 3.331802, 3.505871  (xmin, xmax, ymin, ymax)
## crs         : +proj=longlat +datum=WGS84 +no_defs 
## variables   : 9
## names       : casos, comuna,   nombre, zona_recol,         area, perimetro, covid, viajes, TotaltrasOri 
## min values  :     1,      1, Comuna 1,         NA,  2329397.941,  7983.949,     5,    348,          348 
## max values  :    39,     22, Comuna 9,         NA, 12555929.024, 26480.361,    54,   2968,         2968

Mapa conteo general por comunas origen

spplot(comunascaliOri[,8])

Se puede observar el gráfico por comuna con el total de traslados desde cada una de las comunas origen.

Tipo de vehículo bicicleta por comuna origen

comunascaliOri$TotalBiciOri=NA

tablaOribici <- table(comunas_ori$comunaorigen, comunas_ori$TIPODEVEHÍCULO == 1)

tablaOribici2=tablaOribici[,2]

casosbici=table(tablaOribici2)

comunascali$comuna[1]
## [1] 6
which(comunascali$comuna[1]==as.numeric(names(tablaOribici2)))
## [1] 7
ordenorig=match(comunascali$comuna,as.numeric(names(tablaOribici2)))

tablaOribici2[ordenorig]
##  06  04  05  07  08  09  21  13  01  03  19  12  10  20  16  15  17  18  14  11 
##  44  74  38  35  52  53  44  76  36  99 141  14  82  46  73  70 141 111  37  52 
##  02  22 
## 159  55
comunascaliOri$TotalBiciOri=as.numeric(tablaOribici2[ordenorig])

comunascaliOri
## class       : SpatialPolygonsDataFrame 
## features    : 22 
## extent      : -76.59284, -76.46125, 3.331802, 3.505871  (xmin, xmax, ymin, ymax)
## crs         : +proj=longlat +datum=WGS84 +no_defs 
## variables   : 10
## names       : casos, comuna,   nombre, zona_recol,         area, perimetro, covid, viajes, TotaltrasOri, TotalBiciOri 
## min values  :     1,      1, Comuna 1,         NA,  2329397.941,  7983.949,     5,    348,          348,           14 
## max values  :    39,     22, Comuna 9,         NA, 12555929.024, 26480.361,    54,   2968,         2968,          159

Mapa conteo general por comunas origen y tipo de vehículo - Bicicleta

lbls = as.character(comunascaliOri$comuna)
spl = list('sp.text', coordinates(comunascaliOri), lbls, cex=.6)
spl[[2]][10,]=spl[[2]][10,]+0.005 

biciOri <- spplot(comunascaliOri[,10], 
             col.regions = colorRampPalette(c("lightgreen", "darkgreen"))(20), 
             sp.layout = spl)
biciOri

Tipo de vehículo Moto por comuna origen

comunascaliOri$TotalMotoOri=NA

tablaOriMoto <- table(comunas_ori$comunaorigen, comunas_ori$TIPODEVEHÍCULO == 2)

tablaOriMoto2=tablaOriMoto[,2]

casosMoto=table(tablaOriMoto2)

comunascali$comuna[1]
## [1] 6
which(comunascali$comuna[1]==as.numeric(names(tablaOriMoto2)))
## [1] 7
ordenorig=match(comunascali$comuna,as.numeric(names(tablaOriMoto2)))

tablaOriMoto2[ordenorig]
##   06   04   05   07   08   09   21   13   01   03   19   12   10   20   16   15 
##  473  720  319  350  552  413  378  554  375  970 1280  176  675  339  450  536 
##   17   18   14   11   02   22 
## 1136  746  310  431 1414  515
comunascaliOri$TotalMotoOri=as.numeric(tablaOriMoto2[ordenorig])

comunascaliOri
## class       : SpatialPolygonsDataFrame 
## features    : 22 
## extent      : -76.59284, -76.46125, 3.331802, 3.505871  (xmin, xmax, ymin, ymax)
## crs         : +proj=longlat +datum=WGS84 +no_defs 
## variables   : 11
## names       : casos, comuna,   nombre, zona_recol,         area, perimetro, covid, viajes, TotaltrasOri, TotalBiciOri, TotalMotoOri 
## min values  :     1,      1, Comuna 1,         NA,  2329397.941,  7983.949,     5,    348,          348,           14,          176 
## max values  :    39,     22, Comuna 9,         NA, 12555929.024, 26480.361,    54,   2968,         2968,          159,         1414

Mapa conteo general por comunas origen y tipo de vehículo - Moto

lbls = as.character(comunascaliOri$comuna)
spl = list('sp.text', coordinates(comunascaliOri), lbls, cex=.6)
spl[[2]][11,]=spl[[2]][11,]+0.005 

MotoOri <- spplot(comunascaliOri[,11], 
             col.regions = colorRampPalette(c("lightblue", "darkblue"))(20), 
             sp.layout = spl)
MotoOri

### Tipo de vehículo Carro por comuna origen

comunascaliOri$TotalCarrOri=NA

tablaOriCarr <- table(comunas_ori$comunaorigen, comunas_ori$TIPODEVEHÍCULO == 3)

tablaOriCarr2=tablaOriCarr[,2]

casosCarr=table(tablaOriCarr2)

comunascali$comuna[1]
## [1] 6
which(comunascali$comuna[1]==as.numeric(names(tablaOriCarr2)))
## [1] 7
ordenorig=match(comunascali$comuna,as.numeric(names(tablaOriCarr2)))

tablaOriCarr2[ordenorig]
##   06   04   05   07   08   09   21   13   01   03   19   12   10   20   16   15 
##  389  551  241  283  420  382  328  486  301  854 1165  123  529  272  385  456 
##   17   18   14   11   02   22 
##  899  559  272  361 1121  489
comunascaliOri$TotalCarrOri=as.numeric(tablaOriCarr2[ordenorig])

comunascaliOri
## class       : SpatialPolygonsDataFrame 
## features    : 22 
## extent      : -76.59284, -76.46125, 3.331802, 3.505871  (xmin, xmax, ymin, ymax)
## crs         : +proj=longlat +datum=WGS84 +no_defs 
## variables   : 12
## names       : casos, comuna,   nombre, zona_recol,         area, perimetro, covid, viajes, TotaltrasOri, TotalBiciOri, TotalMotoOri, TotalCarrOri 
## min values  :     1,      1, Comuna 1,         NA,  2329397.941,  7983.949,     5,    348,          348,           14,          176,          123 
## max values  :    39,     22, Comuna 9,         NA, 12555929.024, 26480.361,    54,   2968,         2968,          159,         1414,         1165

Mapa conteo general por comunas origen y tipo de vehículo - Carro

lbls = as.character(comunascaliOri$comuna)
spl = list('sp.text', coordinates(comunascaliOri), lbls, cex=.6)
spl[[2]][12,]=spl[[2]][12,]+0.005 

CarrOri <- spplot(comunascaliOri[,12], 
             col.regions = colorRampPalette(c("lightyellow", "darkorange"))(20), 
             sp.layout = spl)
CarrOri

Compendio de mapas por comunas origen

TotalOri <- spplot(comunascaliOri[,9:12], 
             col.regions = terrain.colors(20,.95,.4),
             sp.layout = spl)
TotalOri

Comunas Destino

Se hace un agrupamiento de personas por comuna destino

comunascaliDes <- comunascali
comunas_des <- encuesta_od
comunascaliDes$TotaltrasDes=NA

tablaDes=comunas_des$comunadestino

casos=table(tablaDes)

comunadestino=table(tablaDes)

comunascali$comuna[1]
## [1] 6
which(comunascali$comuna[1]==as.numeric(names(comunadestino)))
## [1] 7
ordendest=match(comunascali$comuna,as.numeric(names(comunadestino)))

casos[ordendest]
## tablaDes
##   06   04   05   07   08   09   21   13   01   03   19   12   10   20   16   15 
##  716 1856  522  748 1025 1279  515  673  230 3859 3158  246  927  351  743  579 
##   17   18   14   11   02   22 
## 2164  662  379  564 4810 1860
comunascaliDes$TotaltrasDes=as.numeric(casos[ordendest])

comunascaliDes
## class       : SpatialPolygonsDataFrame 
## features    : 22 
## extent      : -76.59284, -76.46125, 3.331802, 3.505871  (xmin, xmax, ymin, ymax)
## crs         : +proj=longlat +datum=WGS84 +no_defs 
## variables   : 9
## names       : casos, comuna,   nombre, zona_recol,         area, perimetro, covid, viajes, TotaltrasDes 
## min values  :     1,      1, Comuna 1,         NA,  2329397.941,  7983.949,     5,    348,          230 
## max values  :    39,     22, Comuna 9,         NA, 12555929.024, 26480.361,    54,   2968,         4810

Mapa conteo general por comunas destino

spplot(comunascaliDes[,9])

comunascaliDes$TotalBiciDes=NA

tablaDesbici <- table(comunas_ori$comunadestino, comunas_des$TIPODEVEHÍCULO == 1)

tablaDesbici2=tablaDesbici[,2]

casosbici=table(tablaDesbici2)

comunascali$comuna[1]
## [1] 6
which(comunascali$comuna[1]==as.numeric(names(tablaDesbici2)))
## [1] 7
ordendest=match(comunascali$comuna,as.numeric(names(tablaDesbici2)))

tablaDesbici2[ordendest]
##  06  04  05  07  08  09  21  13  01  03  19  12  10  20  16  15  17  18  14  11 
##  34  85  41  41  54  65  26  33  12 189 147  15  43  25  35  20 115  31  22  29 
##  02  22 
## 218 100
comunascaliDes$TotalBiciDes=as.numeric(tablaDesbici2[ordendest])

comunascaliDes
## class       : SpatialPolygonsDataFrame 
## features    : 22 
## extent      : -76.59284, -76.46125, 3.331802, 3.505871  (xmin, xmax, ymin, ymax)
## crs         : +proj=longlat +datum=WGS84 +no_defs 
## variables   : 10
## names       : casos, comuna,   nombre, zona_recol,         area, perimetro, covid, viajes, TotaltrasDes, TotalBiciDes 
## min values  :     1,      1, Comuna 1,         NA,  2329397.941,  7983.949,     5,    348,          230,           12 
## max values  :    39,     22, Comuna 9,         NA, 12555929.024, 26480.361,    54,   2968,         4810,          218

Mapa conteo general por comunas destino y tipo de vehículo - Bicicleta

lbls = as.character(comunascaliDes$comuna)
spl = list('sp.text', coordinates(comunascaliDes), lbls, cex=.6)
spl[[2]][10,]=spl[[2]][10,]+0.005 

biciDes <- spplot(comunascaliDes[,10], 
             col.regions = colorRampPalette(c("lightgreen", "darkgreen"))(20), 
             sp.layout = spl)
biciDes

Tipo de vehículo Moto por comuna destino

comunascaliDes$TotalMotoDes=NA

tablaDesMoto <- table(comunas_des$comunadestino, comunas_des$TIPODEVEHÍCULO == 2)

tablaDesMoto2=tablaDesMoto[,2]

casosMoto=table(tablaDesMoto2)

comunascali$comuna[1]
## [1] 6
which(comunascali$comuna[1]==as.numeric(names(tablaDesMoto2)))
## [1] 7
ordendest=match(comunascali$comuna,as.numeric(names(tablaDesMoto2)))

tablaDesMoto2[ordendest]
##   06   04   05   07   08   09   21   13   01   03   19   12   10   20   16   15 
##  323  846  215  353  470  608  243  346  112 1734 1421  128  419  151  327  271 
##   17   18   14   11   02   22 
##  927  302  188  254 2177  911
comunascaliDes$TotalMotoDes=as.numeric(tablaDesMoto2[ordendest])

comunascaliDes
## class       : SpatialPolygonsDataFrame 
## features    : 22 
## extent      : -76.59284, -76.46125, 3.331802, 3.505871  (xmin, xmax, ymin, ymax)
## crs         : +proj=longlat +datum=WGS84 +no_defs 
## variables   : 11
## names       : casos, comuna,   nombre, zona_recol,         area, perimetro, covid, viajes, TotaltrasDes, TotalBiciDes, TotalMotoDes 
## min values  :     1,      1, Comuna 1,         NA,  2329397.941,  7983.949,     5,    348,          230,           12,          112 
## max values  :    39,     22, Comuna 9,         NA, 12555929.024, 26480.361,    54,   2968,         4810,          218,         2177

Mapa conteo general por comunas origen y tipo de vehículo - Moto

lbls = as.character(comunascaliDes$comuna)
spl = list('sp.text', coordinates(comunascaliDes), lbls, cex=.6)
spl[[2]][11,]=spl[[2]][11,]+0.005 

MotoDes <- spplot(comunascaliDes[,11], 
             col.regions = colorRampPalette(c("lightblue", "darkblue"))(20), 
             sp.layout = spl)
MotoDes

Tipo de vehículo Carro por comuna destino

comunascaliDes$TotalCarrDes=NA

tablaDesCarr <- table(comunas_des$comunadestino, comunas_des$TIPODEVEHÍCULO == 3)

tablaDesCarr2=tablaDesCarr[,2]

casosCarr=table(tablaDesCarr2)

comunascali$comuna[1]
## [1] 6
which(comunascali$comuna[1]==as.numeric(names(tablaDesCarr2)))
## [1] 7
ordendest=match(comunascali$comuna,as.numeric(names(tablaDesCarr2)))

tablaDesCarr2[ordendest]
##   06   04   05   07   08   09   21   13   01   03   19   12   10   20   16   15 
##  275  757  225  286  403  489  198  226   86 1557 1302   85  384  144  321  245 
##   17   18   14   11   02   22 
##  959  276  138  239 2006  694
comunascaliDes$TotalCarrDes=as.numeric(tablaDesCarr2[ordendest])

comunascaliDes
## class       : SpatialPolygonsDataFrame 
## features    : 22 
## extent      : -76.59284, -76.46125, 3.331802, 3.505871  (xmin, xmax, ymin, ymax)
## crs         : +proj=longlat +datum=WGS84 +no_defs 
## variables   : 12
## names       : casos, comuna,   nombre, zona_recol,         area, perimetro, covid, viajes, TotaltrasDes, TotalBiciDes, TotalMotoDes, TotalCarrDes 
## min values  :     1,      1, Comuna 1,         NA,  2329397.941,  7983.949,     5,    348,          230,           12,          112,           85 
## max values  :    39,     22, Comuna 9,         NA, 12555929.024, 26480.361,    54,   2968,         4810,          218,         2177,         2006

Mapa conteo general por comunas origen y tipo de vehículo - Carro

lbls = as.character(comunascaliDes$comuna)
spl = list('sp.text', coordinates(comunascaliDes), lbls, cex=.6)
spl[[2]][12,]=spl[[2]][12,]+0.005 

CarrDes <- spplot(comunascaliDes[,11], 
             col.regions = colorRampPalette(c("lightyellow", "darkorange"))(20), 
             sp.layout = spl)
CarrDes

Compendio de mapas por comunas destino.

TotalDes <- spplot(comunascaliDes[,9:12], 
             col.regions = terrain.colors(20,.95,.4),
             sp.layout = spl)
TotalDes

Conclusiones:

  • Las comunas origen y destino con mayor traslado de población son: 2, 19, 17 y 3.

  • Las comunas donde más movimiento se ve por origen y tipo de vehículo bicicleta son: 2, 17, 19 y 18.

  • Las comunas donde más movimiento se ve por origen y tipo de vehículo moto son: 2, 19 y 17.

  • Las comunas donde más movimiento se ve por origen y tipo de vehículo carro son: 2 y 19.

  • Las comunas con mayor población destino son: 2, 3, 19, y 17

  • Las comunas donde más movimiento se ve por destino y tipo de vehículo bicicleta son: 2, 3, y 19

  • Las comunas donde más movimiento se ve por destino y tipo de vehículo moto son: 2, 3 y 19.

  • Las comunas donde más movimiento se ve por destino y tipo de vehículo carro son: 2, 3 y 19

  • Se observa que el entendimiento por medio de gráficos y mapas es más puntual y efectivo que solo tablas o matrices o vectores.