1. Presentación del tema

Objetivos

Los objetivos principales de una matriz origen y destino de cargas integrada son:

Uso de las Matrices

La utilización de las matrices permite:

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:

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

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.

2. Importación y revisión general de la base de datos a analizar

a. Cargo librería tidyverse y readxl e importo la base de datos

library(tidyverse)
library(readxl)
base_mod <- read_xlsx("../entradas/base_mod_cargas.xlsx")

b. Utilizo algunas funciones para darle una mirada general a la base de datos

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

3. Limpieza, tratamiento y transformación de datos con tidyverse

a. Reviso cantidad de registros por complejo, por producto y por modo

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

b. Genero un nuevo data.frame con la selección de variables de interés y filtro por las cargas que tienen como destino la Provincia de Buenos Aires

base_mod_seleccion <- base_mod %>% select(1, 3:14)%>% filter(provincia_destino == "BUENOS AIRES") ##se puede usar es igual a == o incluye %in%

c. Verifico las variables de mi nuevo data.frame “base_mod_seleccion”

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"

d. Agrego dos variables con los nombres de centroide_destino y centroide_origen en minúscula y recodifico la variable de provincia_origen en regiones

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"

e. Resumo la información en una nueva tabla

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.

f. Utilizo count() para ver cantidad de registros por provincia_origen

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

g. Genero un objeto con datos estadísticos por región

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)

h. Creo objeto y aplico pivot_longer para reestructurar la base, apilando varias columnas en una. De ancho a largo

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")

i. Aplico pivot_wider para invertir columnas de largo a ancho

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

4. Visualización de la información con ggplot() mediante gráficos

a. Grafico las cargas con destino en la Provincia de Buenos Aires por modo (con geom_segment y geom_point)

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())

b. Grafico las cargas por región con destino en la Provincia de Buenos Aires (con geom_col)

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()

c. Grafico las cargas por provincia con destino en la provincia de Buenos Aires, filtro la carga intraprovincial y la N/D (con geom_col)

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()