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")
| 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.")
| 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.")
| 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.")
| 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 |
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.
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.
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.
Lideran Buenaventura (31,03 %), Santa Marta (23,03 %) y Cartagena (22,57 %). Bogotá aporta 7,41 % y Medellín 0,85 %.
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.
#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.