Objetivos
Los objetivos principales de una matriz origen y destino de cargas integrada son:
Obtener una herramienta que permita representar los flujos de transporte y sus características entre pares OD de las zonas que se definen para la provincia de Buenos Aires
Estimar una matriz origen-destino para el transporte de cargas en el modo carretero
Contar una matriz origen-destino para el transporte de cargas en el modo ferroviario
Contar con una matriz origen-destino para el transporte de cargas en el modo fluvial y marítimo
Uso de las Matrices
La utilización de las matrices permite:
Comprender el reparto modal y la posibilidad de derivación de carga entre modos
Estudiar la relación entre la infraestructura de transporte y los desarrollos productivos
Estudiar la definición del hinterland de los puertos
Determinar zonas con necesidades de infraestructura logística, además de colaborar con el análisis de competitividad y conveniencia de localización de centros logísticos
Analizar el servicio transporte de cargas y su impacto en el PBG
Evaluar proyectos de transporte
Fuentes utilizadas:
La matriz OD consolidada se nutrió de 3 matrices que abarcan el movimiento doméstico para el total del país elaboradas por la Subsecretaría de Planificación de Transporte de Cargas y Logística, Ministerio de Transporte de la Nación:
MOD Vial (2016)
MOD Ferroviaria (2018)
MOD Fluvio-Marítima (2016)
La tres bases se encuentran homogeneizadas siguiendo a la MOD vial que consta de 106 grupos de productos y de 123 zonas para toda la Argentina.
La MOD vial no incluye cargas de distribución urbanas (última milla) y sí incluye, parcialmente, tramos cortos, básicamente rurales.
El tráfico estimado para el año 2016 es de 437,5 millones de toneladas.
[Matriz Vial Origen Destino de Cargas] https://www.argentina.gob.ar/transporte/cargas-y-logistica/estudio-nacional-de-cargas/matrices-od-ano-2016
Datos generales
MOD Vial: 392,3 millones de toneladas
MOD Ferroviaria: 19,5 millones de toneladas
MOD Fluvio-Marítima: 25,5 millones de toneladas
Las 3 matrices de este trabajo tienen 66 grupos de productos, a su vez agregados en 26 complejos y en 10 grupos: Granos, Ganado en pie, Carnes, Combustibles, Industrializados, Minería, Regionales, Semiterminados, Varios/Contenedores y Otros
Las zonas de la PBA son 34 “puras” y 1 zona que incluye a CABA y 34 partidos del conurbano en un área similar a la RMBA
Hay 7 zonas que incluyen a terminales portuarias: Bahía Blanca (Bahía Blanca y Rosales), CABA (CABA, Dock Sud y La Plata), Mar del Plata, Necochea (Quequén), San Nicolás, San Pedro (aunque no registra movimiento doméstico en 2016) y Zárate
En este trabajo se analizan las cargas con destino en la provincia de Buenos Aires. Se visualizan los movimientos totales (en toneladas) por modo, por región y por provincia.
library(tidyverse)
library(readxl)
base_mod <- read_xlsx("../entradas/base_mod_cargas.xlsx")
Cantidad de filas y columnas
dim(base_mod)
## [1] 72162 22
Nombres de variables
colnames(base_mod)
## [1] "id_base" "año" "id_origen"
## [4] "centroide_origen" "provincia_origen" "id_destino"
## [7] "centroide_destino" "provincia_destino" "grupo"
## [10] "complejo" "producto" "toneladas"
## [13] "toneladas_miles" "modo" "x_origen"
## [16] "y_origen" "x_destino" "y_destino"
## [19] "hubdist_m" "Long_m" "hubdist_km"
## [22] "long_km"
Vista preliminar de la estructura de las variables
str(base_mod)
## tibble [72,162 x 22] (S3: tbl_df/tbl/data.frame)
## $ id_base : num [1:72162] 1 2 3 4 5 6 7 8 9 10 ...
## $ año : num [1:72162] 2016 2016 2016 2016 2016 ...
## $ id_origen : chr [1:72162] "ECP" "ACP" "ECP" "AME" ...
## $ centroide_origen : chr [1:72162] "PARANÁ" "SALTA" "PARANÁ" "METAN" ...
## $ provincia_origen : chr [1:72162] "ENTRE RIOS" "SALTA" "ENTRE RIOS" "SALTA" ...
## $ id_destino : chr [1:72162] "ACA" "ACP" "ACP" "AME" ...
## $ centroide_destino: chr [1:72162] "CAFAYATE" "SALTA" "SALTA" "METAN" ...
## $ provincia_destino: chr [1:72162] "SALTA" "SALTA" "SALTA" "SALTA" ...
## $ grupo : chr [1:72162] "CARNES" "CARNES" "CARNES" "CARNES" ...
## $ complejo : chr [1:72162] "Granja" "Granja" "Granja" "Granja" ...
## $ producto : chr [1:72162] "Avicola" "Avicola" "Avicola" "Avicola" ...
## $ toneladas : num [1:72162] 2055 20778 9591 4635 4988 ...
## $ toneladas_miles : num [1:72162] 2.06 20.78 9.59 4.63 4.99 ...
## $ modo : chr [1:72162] "Vial" "Vial" "Vial" "Vial" ...
## $ x_origen : num [1:72162] -60.5 -65.4 -60.5 -65 -59.7 ...
## $ y_origen : num [1:72162] -31.8 -24.8 -31.8 -25.5 -29.2 ...
## $ x_destino : num [1:72162] -66 -65.4 -65.4 -65 -65 ...
## $ y_destino : num [1:72162] -26.1 -24.8 -24.8 -25.5 -25.5 ...
## $ hubdist_m : num [1:72162] 829249 0 912958 0 664996 ...
## $ Long_m : num [1:72162] 829249 0 912958 0 664996 ...
## $ hubdist_km : num [1:72162] 829 0 913 0 665 ...
## $ long_km : num [1:72162] 829 0 913 0 665 ...
Resumen de medidas centrales para variables numéricas y tipo texto
summary(base_mod)
## id_base año id_origen centroide_origen
## Min. : 1 Min. :2016 Length:72162 Length:72162
## 1st Qu.:18041 1st Qu.:2016 Class :character Class :character
## Median :36082 Median :2016 Mode :character Mode :character
## Mean :36084 Mean :2017
## 3rd Qu.:54129 3rd Qu.:2018
## Max. :72169 Max. :2018
## provincia_origen id_destino centroide_destino provincia_destino
## Length:72162 Length:72162 Length:72162 Length:72162
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## grupo complejo producto toneladas
## Length:72162 Length:72162 Length:72162 Min. : 0
## Class :character Class :character Class :character 1st Qu.: 25
## Mode :character Mode :character Mode :character Median : 240
## Mean : 6026
## 3rd Qu.: 1001
## Max. :24106765
## toneladas_miles modo x_origen y_origen
## Min. : 0.000 Length:72162 Min. :-71.85 Min. :-54.81
## 1st Qu.: 0.025 Class :character 1st Qu.:-64.61 1st Qu.:-36.94
## Median : 0.240 Mode :character Median :-62.00 Median :-34.14
## Mean : 6.026 Mean :-62.43 Mean :-33.98
## 3rd Qu.: 1.001 3rd Qu.:-60.23 3rd Qu.:-31.42
## Max. :24106.765 Max. :-54.56 Max. :-22.49
## x_destino y_destino hubdist_m Long_m
## Min. :-71.85 Min. :-54.81 Min. : 0 Min. : 0
## 1st Qu.:-63.78 1st Qu.:-35.55 1st Qu.: 254928 1st Qu.: 254928
## Median :-60.66 Median :-34.59 Median : 408722 Median : 408722
## Mean :-61.61 Mean :-33.89 Mean : 551563 Mean : 551563
## 3rd Qu.:-58.82 3rd Qu.:-32.40 3rd Qu.: 793366 3rd Qu.: 793366
## Max. :-54.56 Max. :-22.49 Max. :3615501 Max. :3615501
## hubdist_km long_km
## Min. : 0.0 Min. : 0.0
## 1st Qu.: 254.9 1st Qu.: 254.9
## Median : 408.7 Median : 408.7
## Mean : 551.6 Mean : 551.6
## 3rd Qu.: 793.4 3rd Qu.: 793.4
## Max. :3615.5 Max. :3615.5
Chequeo tipo de objeto (data.frame)
class(base_mod)
## [1] "tbl_df" "tbl" "data.frame"
Cantidad de columnas o variables del objeto
length(base_mod)
## [1] 22
base_mod$complejo %>% table()
## .
## Agroquímicos Aluminio
## 252 154
## Automotriz Azucarero
## 3095 139
## Cerealero Electrónica
## 10517 3198
## Forestal Frutícola
## 1295 1079
## Ganadero Granja
## 12388 201
## Hortícola Lácteo
## 200 345
## Maq. Agrícola Minero
## 198 24434
## Oleaginoso Otros
## 234 101
## Pecuario Pesca
## 191 153
## Petroquímico Química, caucho y plástico
## 876 1302
## Siderúrgico Tabaco
## 289 2414
## Textil Varios-Contenedores
## 70 4828
## Vitivinícola Yerba y Té
## 3937 272
base_mod$producto %>% table()
## .
## Aceites y deriv. Algodón
## 234 70
## Aluminio Arcillas
## 154 173
## Arena Arroz
## 11536 103
## Avicola Azúcar
## 201 139
## Caliza Canto Rodado
## 89 163
## Carbón vegetal Carnes - Bovinos
## 176 325
## Carnes - Caprinos Carnes - Ovinos
## 106 194
## Carnes - Porcinos Caucho
## 283 79
## Cebada Cemento
## 706 3965
## Cigarrillos Ciruela
## 2337 141
## Combustibles Durazno
## 582 138
## Electro y Tecno Fertilizantes
## 3198 252
## Forestales y Subproductos Ganado en pie - Bovinos
## 859 5548
## Ganado en Pie - Otros animales vivos Ganado en pie - Ovinos
## 2588 1381
## Ganado en pie - Porcinos Gas
## 1806 139
## Girasol Harinas y deriv.
## 728 333
## Ind. Maderera Lacteos y deriv.
## 135 345
## Lana Limón
## 157 167
## Lubricantes Maíz
## 147 2317
## Mandarina Maq. Agricola
## 160 198
## Miel Mineral de Hierro
## 191 69
## Motos Naranja
## 1004 161
## Otros granos Otros minerales
## 1696 8119
## Otros productos Papas
## 101 200
## Papel Peras y Manzana
## 125 143
## Pescados Petróleo
## 153 8
## Plástico Pomelo
## 1223 169
## Productos siderúrgicos Soja
## 289 2151
## Sorgo Tabaco
## 429 77
## Té Tosca
## 138 137
## Trigo Trit. Pétreo
## 2054 183
## Varios - Cargas Generales Vehículos
## 4828 2091
## Vinos y Mostos Yerba
## 3937 134
base_mod$modo %>% table()
## .
## Agua (Cabotaje Entrado) Ferroviario Vial
## 130 26033 45999
base_mod_seleccion <- base_mod %>% select(1, 3:14)%>% filter(provincia_destino == "BUENOS AIRES") ##se puede usar es igual a == o incluye %in%
colnames(base_mod_seleccion)
## [1] "id_base" "id_origen" "centroide_origen"
## [4] "provincia_origen" "id_destino" "centroide_destino"
## [7] "provincia_destino" "grupo" "complejo"
## [10] "producto" "toneladas" "toneladas_miles"
## [13] "modo"
base_mod_seleccion <- base_mod %>%
select(1, 3:14)%>%
filter(provincia_destino %in% "BUENOS AIRES")%>%
mutate(centroide_origen_minus = tolower(centroide_origen)) %>%
mutate(centroide_destino_minus = tolower(centroide_destino))%>%
mutate(region_origen = case_when(provincia_origen %in% c("NEUQUEN", "RIO NEGRO", "CHUBUT", "SANTA CRUZ", "TIERRA DEL FUEGO") ~ "Patagonia",
provincia_origen %in% c("MENDOZA", "SAN JUAN", "SAN LUIS") ~ "Cuyo",
provincia_origen %in% c("BUENOS AIRES", "LA PAMPA", "ENTRE RIOS", "CORDOBA", "SANTA FE") ~ "Pampeana",
provincia_origen %in% c("LA RIOJA", "CATAMARCA", "JUJUY", "TUCUMAN", "SANTIAGO DEL ESTERO", "SALTA") ~ "Noroeste",
provincia_origen %in% c("FORMOSA", "CHACO", "MISIONES", "CORRIENTES") ~ "Noreste"))
Verifico las nuevas variables creadas
colnames(base_mod_seleccion)
## [1] "id_base" "id_origen"
## [3] "centroide_origen" "provincia_origen"
## [5] "id_destino" "centroide_destino"
## [7] "provincia_destino" "grupo"
## [9] "complejo" "producto"
## [11] "toneladas" "toneladas_miles"
## [13] "modo" "centroide_origen_minus"
## [15] "centroide_destino_minus" "region_origen"
base_mod_seleccion %>%
summarise(ton_resumen= sum(toneladas_miles),
ton_min = min(toneladas_miles, na.rm = TRUE),
ton_max = max(toneladas_miles, na.rm = TRUE),
ton_media = mean(toneladas_miles, na.rm = TRUE),
ton_mediana = median(toneladas_miles, na.rm = TRUE),
ton_desvio = sd(toneladas_miles, na.rm = TRUE),
ton_cv = ton_desvio / ton_media * 100)
## # A tibble: 1 x 7
## ton_resumen ton_min ton_max ton_media ton_mediana ton_desvio ton_cv
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 171590. 0 5751. 5.19 0.3 75.7 1458.
base_mod_seleccion %>%
count(provincia_origen, sort = TRUE)
## # A tibble: 23 x 2
## provincia_origen n
## <chr> <int>
## 1 BUENOS AIRES 20862
## 2 CORDOBA 1782
## 3 SAN JUAN 1409
## 4 MENDOZA 1227
## 5 SANTA FE 1127
## 6 LA PAMPA 990
## 7 RIO NEGRO 848
## 8 CORRIENTES 658
## 9 ENTRE RIOS 585
## 10 SALTA 533
## # ... with 13 more rows
mod_regiones <-base_mod_seleccion %>%
select(provincia_origen, toneladas_miles) %>%
mutate(region_origen = case_when(provincia_origen %in% c("NEUQUEN", "RIO NEGRO", "CHUBUT", "SANTA CRUZ", "TIERRA DEL FUEGO") ~ "Patagonia",
provincia_origen %in% c("MENDOZA", "SAN JUAN", "SAN LUIS") ~ "Cuyo",
provincia_origen %in% c("BUENOS AIRES", "LA PAMPA", "ENTRE RIOS", "CORDOBA", "SANTA FE") ~ "Pampeana",
provincia_origen %in% c("LA RIOJA", "CATAMARCA", "JUJUY", "TUCUMAN", "SANTIAGO DEL ESTERO", "SALTA") ~ "Noroeste",
provincia_origen %in% c("FORMOSA", "CHACO", "MISIONES", "CORRIENTES") ~ "Noreste"))%>%
group_by(region_origen) %>%
summarise(ton_resumen= sum(toneladas_miles),
ton_min = min(toneladas_miles, na.rm = TRUE),
ton_max = max(toneladas_miles, na.rm = TRUE),
ton_media = mean(toneladas_miles, na.rm = TRUE),
ton_mediana = median(toneladas_miles, na.rm = TRUE),
ton_desvio = sd(toneladas_miles, na.rm = TRUE),
ton_cv = ton_desvio / ton_media * 100)
mod_regiones_baselargo <- mod_regiones %>%
select(region_origen,
ton_min, ton_max, ton_media) %>%
pivot_longer(cols = c(ton_min, ton_max, ton_media), #<<
names_to = "variable",
values_to = "valor")
mod_regiones_baselargo %>%
pivot_wider(names_from = "variable", #<<
values_from = "valor")
## # A tibble: 5 x 4
## region_origen ton_min ton_max ton_media
## <chr> <dbl> <dbl> <dbl>
## 1 Cuyo 0.0000000899 2487. 2.01
## 2 Noreste 0 1982. 5.36
## 3 Noroeste 0.000000188 531. 2.20
## 4 Pampeana 0.00000000590 5751. 5.54
## 5 Patagonia 0.0000000138 5475. 8.23
base_mod_seleccion %>%
select(modo, toneladas_miles) %>%
group_by(modo) %>%
summarise(ton_resumen= sum(toneladas_miles),
ton_min = min(toneladas_miles, na.rm = TRUE),
ton_max = max(toneladas_miles, na.rm = TRUE),
ton_media = mean(toneladas_miles, na.rm = TRUE),
ton_mediana = median(toneladas_miles, na.rm = TRUE),
ton_desvio = sd(toneladas_miles, na.rm = TRUE),
ton_cv = ton_desvio / ton_media * 100)%>%
ggplot(mapping = aes(x = modo,
y = ton_resumen)) +
geom_segment( aes(x=modo, xend=modo, y=0, yend=ton_resumen), color="deepskyblue", size=1) +
geom_point( color="darkorchid4", size=5, alpha=0.7) +
labs(title = "Cargas con destino en la Provincia de Buenos Aires",
subtitle = "Según distribución modal",
x = "Modo",
y = "Toneladas (en miles)",
fill = "Modo") +
theme_light() +
coord_flip()+
theme(
panel.grid.major.y = element_blank(),
panel.border = element_blank(),
axis.ticks.y = element_blank())
mod_regiones %>%
filter(region_origen %in% c("Pampeana", "Patagonia", "Noreste", "Cuyo","Noroeste")) %>%
ggplot(mapping = aes(x = fct_reorder (region_origen,+ton_resumen),
y = ton_resumen)) +
geom_col(aes(fill = region_origen)) +
scale_fill_manual(values=c("darkorchid4","deepskyblue","gold","deeppink1","chartreuse3"))+
labs(title = "Cargas con destino en la Provincia de Buenos Aires",
subtitle = "Según Región",
x = "Regiones Origen de carga",
y = "Toneladas (en miles)",
fill = "Regiones Origen de carga") +
geom_text(aes(label = round(ton_resumen)),
vjust = -0.5,
hjust= -0.5) +
theme_minimal() +
coord_flip()
base_mod_seleccion %>%
filter(provincia_origen != c("BUENOS AIRES")) %>%
filter(provincia_origen != c("N/D")) %>%
ggplot(mapping = aes(x = fct_reorder (provincia_origen,+toneladas_miles),
y = toneladas_miles)) +
geom_col(aes(fill = region_origen)) +
scale_fill_manual(values=c("darkorchid4","deepskyblue","gold","deeppink1","chartreuse3"))+
labs(title = "Cargas con destino en la Provincia de Buenos Aires",
subtitle = "Según Provincia (sin PBA)",
x = "Provincias Origen de carga",
y = "Toneladas (en miles)",
fill = "Regiones") +
theme_minimal() +
coord_flip()