library(foreign)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(stringr)
ruta <- "Exportaciones"
enero <- read.dta(paste(ruta, "Enero.dta", sep = "/"))
febrero <- read.dta(paste(ruta, "Febrero.dta", sep = "/"))
marzo <- read.dta(paste(ruta, "Marzo.dta", sep = "/"))
abril <- read.dta(paste(ruta, "Abril.dta", sep = "/"))
mayo <- read.dta(paste(ruta, "Mayo.dta", sep = "/"))
junio <- read.dta(paste(ruta, "Junio.dta", sep = "/"))
julio <- read.dta(paste(ruta, "Julio.dta", sep = "/"))
agosto <- read.dta(paste(ruta, "Agosto.dta", sep = "/"))
septiembre <- read.dta(paste(ruta, "Septiembre.dta", sep = "/"))
octubre <- read.dta(paste(ruta, "Octubre.dta", sep = "/"))
noviembre <- read.dta(paste(ruta, "Noviembre.dta", sep = "/"))
diciembre <- read.dta(paste(ruta, "Diciembre.dta", sep = "/"))
export <- rbind(enero, febrero, marzo, abril, mayo, junio, julio, agosto, 
                septiembre, octubre, noviembre, diciembre)
rm(enero, febrero, marzo, abril, mayo, junio, julio, agosto, septiembre, octubre, 
   noviembre, diciembre, ruta)
names(export) <- names(export) %>% tolower()
names(export)[15] <- "posicion_arancelaria"
df_vias <- data.frame(cod = 1:9, vía = c("MARITIMO", "FERREO", "TERRESTRE", 
                    "AEREO", "CORREO", "MULTIMODAL", 
                    "INSTALACIONES DE TRANSPORTE FIJAS (TUBERIAS, CABLE, ETC.)", 
                    "VIAS NAVEGABLES INTERIORES", "OTRO MODO DE TRANSPORTE"))
df_vias$vía <- df_vias$vía %>% str_to_title()
df_puestos_control <- data.frame(cod = c("AXM", "BAQ", "BOG", "BGA", 
                                                 "CLO", "CTG", "CUC", "MZL", 
                                                 "MDE", "PEI", "SMR", "RCH", 
                                                 "ADZ", "AUC", "BUN", "CAR", 
                                                 "IPI", "LET", "MAI", "TCO",
                                                 "TRB", "PCR", "INI", "YOP", 
                                                 "PUU", "VUP", "PA_", "CVE", "MAM"), 
            lugar = c("ARMENIA", "BARRANQUILLA", "BOGOTA", "BUCARAMANGA", "CALI", 
                      "CARTAGENA", "CUCUTA", "MANIZALES", "MEDELLIN", "PEREIRA", 
                      "SANTA MARTA", "RIOHACHA", "SAN ANDRES", "ARAUCA", 
                      "BUENAVENTURA", "CARTAGO", "IPIALES", "LETICIA", "MAICAO", 
                      "TUMACO", "URABA", "PUERTO CARRENO", "INIRIDA", "YOPAL", 
                      "PUERTO ASIS", "VALLEDUPAR", "PAMPLONA", "OLEODUCTO COVEÑAS", 
                      "MAMONAL"))
df_puestos_control$lugar <- df_puestos_control$lugar %>% str_to_title()

df_cap27 <- data.frame(partida_arancelaria = c("2701", "2702", "2703", "2704", 
                    "2705", "2706", "2707", "2708", "2709", "2710", "2711", 
                    "2712", "2713", "2714", "2715", "2716"),
  descripcion = c("Hulla (carbón); briquetas y combustibles sólidos similares",
    "Lignitos, incluso aglomerados (excepto azabache)",
    "Turba, incluso aglomerada",
    "Coques y semicoques de hulla, lignito o turba; carbón de retorta",
    "Gas de hulla, gas de agua, gas pobre y gases similares",
    "Alquitranes de hulla, lignito o turba y demás alquitranes minerales",
    "Aceites y productos de la destilación de alquitranes de hulla de alta temperatura",
    "Brea y coque de brea de alquitrán de hulla u otros alquitranes minerales",
    "Aceites crudos de petróleo o de mineral bituminoso",
    "Aceites de petróleo, excepto crudos (refinados); preparaciones n.e.p.",
    "Gas de petróleo y demás hidrocarburos gaseosos",
    "Vaselina; parafina, ceras de petróleo y demás ceras minerales",
    "Coque de petróleo, betún de petróleo y demás residuos de aceites de petróleo",
    "Betunes y asfaltos naturales; pizarras y arenas bituminosas; rocas asfálticas",
    "Mezclas bituminosas a base de asfalto o betún naturales, de petróleo, etc.",
    "Energía eléctrica"))
posicion_arancelaria_chr <- export$posicion_arancelaria %>% str_pad(width = 10, 
                                                                    side = "left", 
                                                                    pad = "0")
capitulo <- str_sub(posicion_arancelaria_chr, 1, 2)
partida_arancelaria <- str_sub(posicion_arancelaria_chr, 1, 4)
fob27 <- export %>%
  mutate(partida_arancelaria = posicion_arancelaria %>%
           str_pad(width = 10, side = "left", pad = "0") %>%
           str_sub(start = 1, end = 4)) %>%
  filter(str_starts(partida_arancelaria, "27")) %>%
  group_by(partida_arancelaria) %>%
  summarise(fob = round(sum(as.numeric(fobdol), na.rm = TRUE) / 1e6, 2), .groups = "drop") %>%
  arrange(desc(fob))
## Warning: There were 13 warnings in `summarise()`.
## The first warning was:
## ℹ In argument: `fob = round(sum(as.numeric(fobdol), na.rm = TRUE)/1e+06, 2)`.
## ℹ In group 1: `partida_arancelaria = "2701"`.
## Caused by warning:
## ! NAs introduced by coercion
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 12 remaining warnings.
energia <- fob27 %>%
  left_join(df_cap27, by = "partida_arancelaria") %>%
  select(partida = partida_arancelaria, descripcion, fobdol = fob)
knitr::kable(energia, caption = "Exportación de energía en millones de dolares FOB")
Exportación de energía en millones de dolares FOB
partida descripcion fobdol
2709 Aceites crudos de petróleo o de mineral bituminoso 2395.86
2701 Hulla (carbón); briquetas y combustibles sólidos similares 990.49
2710 Aceites de petróleo, excepto crudos (refinados); preparaciones n.e.p. 449.34
2704 Coques y semicoques de hulla, lignito o turba; carbón de retorta 232.41
2716 Energía eléctrica 113.60
2713 Coque de petróleo, betún de petróleo y demás residuos de aceites de petróleo 57.12
2712 Vaselina; parafina, ceras de petróleo y demás ceras minerales 3.18
2707 Aceites y productos de la destilación de alquitranes de hulla de alta temperatura 0.68
2714 Betunes y asfaltos naturales; pizarras y arenas bituminosas; rocas asfálticas 0.62
2715 Mezclas bituminosas a base de asfalto o betún naturales, de petróleo, etc. 0.59
2706 Alquitranes de hulla, lignito o turba y demás alquitranes minerales 0.28
2711 Gas de petróleo y demás hidrocarburos gaseosos 0.03
2708 Brea y coque de brea de alquitrán de hulla u otros alquitranes minerales 0.02
2702 Lignitos, incluso aglomerados (excepto azabache) 0.01
2703 Turba, incluso aglomerada 0.00
petroleo <- c("2709","2710","2711")
salida <- sum(fob27[names(fob27) %in% petroleo])
salida <- fob27 %>%
  filter(partida_arancelaria %in% petroleo) %>%
  summarise(total = sum(fob)) %>%
  pull(total)
cat("Exportaciones petróleo: ", salida, "millones de dólares.")
## Exportaciones petróleo:  2845.23 millones de dólares.
temporales <- c(2, 4, 201, 202, 301:310, 403, 701)
export <- export %>% filter(!(modad %in% temporales))
res_xvia <- export %>% 
  group_by(via) %>% 
  summarise(exportaciones = round(sum(as.numeric(fobdol), na.rm = TRUE) / 1e6, 2))
## Warning: There were 10 warnings in `summarise()`.
## The first warning was:
## ℹ In argument: `exportaciones = round(sum(as.numeric(fobdol), na.rm =
##   TRUE)/1e+06, 2)`.
## ℹ In group 1: `via = 0`.
## Caused by warning:
## ! NAs introduced by coercion
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 9 remaining warnings.
names(res_xvia) <- names(res_xvia) %>% tolower()
res_xvia$via <- res_xvia$via %>% as.integer()
res_xvia <- res_xvia %>% left_join(df_vias, by = c("via" = "cod")) %>% 
    relocate(vía, .after = via) %>% 
    select(-via)
res_xvia$prop <- res_xvia$exportaciones %>% proportions()*100
res_xvia$prop <- res_xvia$prop %>% round(2)
salida <- res_xvia %>% arrange(desc(exportaciones))
names(salida) <- names(salida) %>% str_to_title()
knitr::kable(salida, caption = "Exportaciones por vía de salida. Millones de dólares FOB.")
Exportaciones por vía de salida. Millones de dólares FOB.
Vía Exportaciones Prop
NA 7551.26 64.60
Aereo 1425.23 12.19
Ferreo 922.82 7.89
Multimodal 641.38 5.49
Maritimo 576.25 4.93
Vias Navegables Interiores 564.62 4.83
Correo 6.71 0.06
Terrestre 0.88 0.01
Instalaciones De Transporte Fijas (Tuberias, Cable, Etc.) 0.00 0.00
Otro Modo De Transporte 0.00 0.00
maritima <- export %>% filter(via == 1) %>%
  group_by(cod_sal) %>%
  summarise(exportaciones = round(sum(as.numeric(fobdol), na.rm = TRUE) / 1e6, 2))
## Warning: There were 13 warnings in `summarise()`.
## The first warning was:
## ℹ In argument: `exportaciones = round(sum(as.numeric(fobdol), na.rm =
##   TRUE)/1e+06, 2)`.
## ℹ In group 1: `cod_sal = "AXM"`.
## Caused by warning:
## ! NAs introduced by coercion
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 12 remaining warnings.
maritima <- maritima %>% left_join(df_puestos_control, by = c("cod_sal" = "cod"))
maritima$prop <- maritima$exportaciones %>% proportions()*100
maritima$prop <- maritima$prop %>% round(2)
salida <- maritima %>% relocate(lugar) %>%
  arrange(desc(exportaciones))
names(salida) <- names(salida) %>% str_to_title()
knitr::kable(salida, caption = "Puertos de salida maritimos. Millones de dólares FOB.")
Puertos de salida maritimos. Millones de dólares FOB.
Lugar Cod_sal Exportaciones Prop
Santa Marta SMR 121.61 21.10
Cartagena CTG 114.80 19.92
Riohacha RCH 76.22 13.23
Bogota BOG 71.08 12.34
Barranquilla BAQ 65.73 11.41
Medellin MDE 57.95 10.06
Buenaventura BUN 39.81 6.91
Cali CLO 17.26 3.00
Uraba TRB 11.06 1.92
Bucaramanga BGA 0.49 0.09
Pereira PEI 0.22 0.04
Armenia AXM 0.01 0.00
Tumaco TCO 0.00 0.00
aerea <- export %>% filter(via == 4) %>%
  group_by(cod_sal) %>%
  summarise(exportaciones = round(sum(as.numeric(fobdol), na.rm = TRUE) / 1e6, 2))
## Warning: There were 16 warnings in `summarise()`.
## The first warning was:
## ℹ In argument: `exportaciones = round(sum(as.numeric(fobdol), na.rm =
##   TRUE)/1e+06, 2)`.
## ℹ In group 1: `cod_sal = "BAQ"`.
## Caused by warning:
## ! NAs introduced by coercion
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 15 remaining warnings.
aerea <- aerea %>% left_join(df_puestos_control, by = c("cod_sal" = "cod"))
aerea$prop <- aerea$exportaciones %>% proportions()*100
aerea$prop <- aerea$prop %>% round(2)
salida <- aerea %>% select(-cod_sal) %>% relocate(lugar) %>%
  arrange(desc(exportaciones))
names(salida) <- names(salida) %>% str_to_title()
knitr::kable(salida, caption = "Puertos de salida aéreos. Millones de dólares FOB.")
Puertos de salida aéreos. Millones de dólares FOB.
Lugar Exportaciones Prop
Buenaventura 442.31 31.03
Santa Marta 328.27 23.03
Cartagena 321.72 22.57
Bogota 105.55 7.41
Barranquilla 94.77 6.65
Riohacha 83.37 5.85
Uraba 34.47 2.42
Medellin 12.09 0.85
Cali 1.91 0.13
Ipiales 0.67 0.05
Maicao 0.06 0.00
Bucaramanga 0.04 0.00
Cucuta 0.00 0.00
Leticia 0.00 0.00
Pereira 0.00 0.00
Tumaco 0.00 0.00

Anàlisis

Energía.

El capítulo 27 suma 4.244,23 millones de dólares FOB. El crudo (2709) es la principal partida, con 2.395,86 millones (56,5 % del capítulo). Le siguen el carbón (2701), con 990,49 millones (23,3 %), los aceites refinados (2710), con 449,34, y los coques de hulla (2704), con 232,41. El petróleo consolidado (2709, 2710 y 2711) suma 2.845,23 millones, el 67,0 % del capítulo. La energía eléctrica (2716) aporta 113,60 millones.

Vías de salida.

El 64,60 % (7.551,26 millones) aparece sin vía asociada. Entre las vías identificadas, la aérea es la mayor (1.425,23 millones, 12,19 %), seguida de la férrea (922,82; 7,89 %), la multimodal (641,38; 5,49 %), la marítima (576,25; 4,93 %) y las vías navegables interiores (564,62; 4,83 %). La terrestre (0,88 millones) y el correo (6,71) son marginales.

Puertos marítimos.

Santa Marta (21,10 %) y Cartagena (19,92 %) encabezan la tabla, seguidos de Riohacha (13,23 %), Bogotá (12,34 %), Barranquilla (11,41 %) y Medellín (10,06 %). Aparecen también Cali, Bucaramanga, Pereira y Armenia. No aparece el Oleoducto Coveñas.

Puertos aéreos.

Lideran Buenaventura (31,03 %), Santa Marta (23,03 %) y Cartagena (22,57 %). Bogotá aporta 7,41 % y Medellín 0,85 %.

Inconsistencias

Casi dos tercios del valor no tienen vía. El NA corresponde a un código de vía que existe en la base, el 0 pero que n o estaba en la tabla auxiliar. No es una vía de transporte. Ciudades del interior como puertos marítimos. Bogotá, Medellín, Cali, Bucaramanga, Pereira y Armenia suman 147,01 millones, el 25,5 % del valor marítimo. Puertos marítimos como salidas aéreas: Buenaventura, Santa Marta, Cartagena, Barranquilla, Riohacha y Urabá suman 1.304,91 millones, el 91,6 % del valor de la vía aérea. Coveñas no aparece, a pesar de ser un punto de salida de crudo por oleoducto, y la vía de instalaciones fijas (tuberías) registra 0,00. La vía marítima es muy pequeña (4,93 %) para un país cuyo petróleo y carbón salen mayormente por mar.

Conclusión

#Declaratorio de uso de IA

Para el desarrollo de este taller, utilicé Inteligencia Artificial (Google Gemini) exclusivamente como un tutor de programación. Su uso se limitó a corregir errores de código en R para que el programa pudiera sumar los datos correctamente y ajustar las tablas al formato de millones de dólares.