Introducción
El objetivo del presente reporte es presentar una composición de las exportaciones mexicanas por Capítulo HS2, específicamente, nos interesa conocer desagregaciones de los capítulos Máquinas y Transporte.
La primera sección de este artículo Base de datos prueba correra el código ya desplegado en los documentos anteriores, mientras que la sección Base de datos final buscará responder la pregunta planteada en el párrafo anterior.
Una vez establecido esto se procede a correr el código
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
## here() starts at C:/Users/emili/OneDrive/Documentos/DIRECTORIO R
##
## Adjuntando el paquete: 'zoo'
##
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
##
## Adjuntando el paquete: 'scales'
##
## The following object is masked from 'package:purrr':
##
## discard
##
## The following object is masked from 'package:readr':
##
## col_factor
##
## Adjuntando el paquete: 'jsonlite'
##
## The following object is masked from 'package:purrr':
##
## flatten
##
## Adjuntando el paquete: 'janitor'
##
## The following objects are masked from 'package:stats':
##
## chisq.test, fisher.test
##
## Adjuntando el paquete: 'kableExtra'
##
## The following object is masked from 'package:dplyr':
##
## group_rows
Base de datos prueba
### Extracción de los datos
api_url <- "https://www.economia.gob.mx/apidatamexico/tesseract/data.jsonrecords?cube=inegi_foreign_trade_product&drilldowns=Quarter%2CChapter+2+Digit%2CFlow&locale=es&measures=Trade+Value"
response <- GET(api_url)
status_code(response)
## [1] 200
data_json <- content(response, "text", encoding = "UTF-8")
data_list <- fromJSON(data_json)
df2 <- as.data.frame(data_list$data)
str(df2)
## 'data.frame': 4940 obs. of 7 variables:
## $ Quarter ID : int 19931 19931 19931 19931 19931 19931 19931 19931 19931 19931 ...
## $ Quarter : chr "1993-Q1" "1993-Q1" "1993-Q1" "1993-Q1" ...
## $ Chapter 2 Digit ID: int 1 1 2 2 3 3 4 4 5 5 ...
## $ Chapter 2 Digit : chr "Los Productos de Origen Animal" "Los Productos de Origen Animal" "Productos del Reino Vegetal" "Productos del Reino Vegetal" ...
## $ Flow ID : int 1 2 1 2 1 2 1 2 1 2 ...
## $ Flow : chr "Importaciones" "Exportaciones" "Importaciones" "Exportaciones" ...
## $ Trade Value : num 3.66e+08 2.00e+08 5.30e+08 8.84e+08 1.08e+08 ...
### Capítulos
chaps <- df2 |> filter(`Quarter ID`<19932,`Flow ID` == "1" )|>
select(`Chapter 2 Digit ID`,`Chapter 2 Digit`)
chaps
## Chapter 2 Digit ID Chapter 2 Digit
## 1 1 Los Productos de Origen Animal
## 2 2 Productos del Reino Vegetal
## 3 3 Animales y Vegetales Bi-Productos
## 4 4 Los Productos Alimenticios
## 5 5 Productos Minerales
## 6 6 Productos Químicos
## 7 7 Plásticos y Cauchos
## 8 8 Pieles de Animales
## 9 9 Productos de Madera
## 10 10 Artículos de Papel
## 11 11 Textiles
## 12 12 Calzado, y Sombreros
## 13 13 Piedra y Cristal
## 14 14 Metales Preciosos
## 15 15 Rieles
## 16 16 Máquinas
## 17 17 Transporte
## 18 18 Instrumentos
## 19 20 Diverso
### Traducciones y limpieza de variables con ID
df2 <- df2 |> select(!ends_with("ID")) |>
rename(Trimestre = Quarter,
Flujo = Flow,
Capítulo = `Chapter 2 Digit`,
Valor = `Trade Value`)
str(df2)
## 'data.frame': 4940 obs. of 4 variables:
## $ Trimestre: chr "1993-Q1" "1993-Q1" "1993-Q1" "1993-Q1" ...
## $ Capítulo : chr "Los Productos de Origen Animal" "Los Productos de Origen Animal" "Productos del Reino Vegetal" "Productos del Reino Vegetal" ...
## $ Flujo : chr "Importaciones" "Exportaciones" "Importaciones" "Exportaciones" ...
## $ Valor : num 3.66e+08 2.00e+08 5.30e+08 8.84e+08 1.08e+08 ...
### Reescalar importaciones y exportaciones
df2 <- df2 |> pivot_wider(
names_from = Flujo, values_from = Valor) |>
mutate(Importaciones = Importaciones/1000000,
Exportaciones = Exportaciones/1000000)
### Volver capítulo como factor
df2$Capítulo <- as.factor(df2$Capítulo)
### Recodificar capitulos
df2 <- df2 |>
mutate(Capítulo = fct_recode(Capítulo,
"Animales" = "Los Productos de Origen Animal",
"Vegetales" = "Productos del Reino Vegetal",
"Animal_Veg" = "Animales y Vegetales Bi-Productos",
"Alimentos" = "Los Productos Alimenticios",
"Minerales" = "Productos Minerales",
"Quimicos" = "Productos Químicos",
"Plásticos" = "Plásticos y Cauchos",
"Pieles" = "Pieles de Animales",
"Madera" = "Productos de Madera",
"Papel" = "Artículos de Papel",
"CalzSomb" = "Calzado, y Sombreros",
"Piedra" = "Piedra y Cristal",
"MPreciosos" = "Metales Preciosos",
"Otros" = "Diverso"))
## tibble [2,470 × 4] (S3: tbl_df/tbl/data.frame)
## $ Trimestre : 'yearqtr' num [1:2470] 1993 Q1 1993 Q1 1993 Q1 1993 Q1 ...
## $ Capítulo : Factor w/ 19 levels "Animal_Veg","Papel",..: 7 14 1 6 15 16 12 11 13 2 ...
## $ Importaciones: num [1:2470] 366 530 108 310 516 ...
## $ Exportaciones: num [1:2470] 200.12 883.67 3.45 198.75 1922.84 ...
Visualización
Procedimiento: En esl siguiente chunk de código primero se calculan los capítulos más importantes, usando como ponderación los valores exportados del 2020 en adelante. Posteriormente, se agregan todos los demás capítulos en una categoría residual: Otros.
prod_percentages <- xmp |>
mutate(
Year = as.numeric(format(Trimestre, "%Y")),
lump_weight = if_else(Year >= 2020, Exportaciones, 0),
Capítulo = fct_lump_n(
f = Capítulo,
n = 7,
w = lump_weight,
other_level = "Otros"
)
) |>
# Luego sumamos las exportaciones por capítulo
group_by(Trimestre, Capítulo) |>
summarise(Exportaciones = sum(Exportaciones, na.rm = TRUE), .groups = "drop") |>
#Posteriormente se dividen por el total de exportaciones por trimestre, para obtener los porcentajes que estamos buscando
group_by(Trimestre) |>
mutate(percent_valor = Exportaciones / sum(Exportaciones, na.rm = TRUE)) |>
ungroup() |>
mutate(Capítulo = fct_reorder(Capítulo, Exportaciones, .fun = sum, .desc = TRUE))
### Gráfico
prod_percentages |>
ggplot(aes(x = Trimestre, y = percent_valor, fill = Capítulo)) +
theme_bw() +
scale_fill_brewer(palette = "Dark2") +
geom_area(alpha = 0.9) +
geom_hline(
yintercept = seq(0.1, 0.9, by = 0.1),
color = "white",
linetype = "dotted",
linewidth = 0.5) +
scale_y_continuous(
breaks = seq(0, 1, by = 0.1),
labels = scales::percent,
expand = c(0, 0)) +
scale_x_yearqtr(
breaks = seq(from = as.yearqtr("1993 Q1"), to = as.yearqtr("2025 Q1"), by = 1),
expand = c(0,0))+
labs(
x = "",
y = "",
fill = "",
caption = "J.Cornick con base de Data Mexico") +
theme(
legend.position = "bottom",
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
panel.grid.major.y = element_blank(),
panel.grid.minor.y = element_blank()
)
Base de datos final
Para desagregar los prouductos a nivel capítulo se automatizó la siguiente consulta:
La api generada es la siguiente:https://www.economia.gob.mx/apidatamexico/tesseract/data.jsonrecords?cube=inegi_foreign_trade_product&drilldowns=Year%2CQuarter%2CChapter+2+Digit%2CHS2+2+Digit%2CFlow&locale=es&measures=Trade+Value
A continuación se replica el código de la sección anterior para extraer la información por capítulo HS2.
### Extracción de los datos"
api_url <- "https://www.economia.gob.mx/apidatamexico/tesseract/data.jsonrecords?cube=inegi_foreign_trade_product&drilldowns=Year%2CQuarter%2CChapter+2+Digit%2CHS2+2+Digit%2CFlow&locale=es&measures=Trade+Value"
response <- GET(api_url)
status_code(response)
## [1] 200
data_json <- content(response, "text", encoding = "UTF-8")
data_list <- fromJSON(data_json)
df_chapters <- as.data.frame(data_list$data)
str(df_chapters)
## 'data.frame': 20280 obs. of 10 variables:
## $ Year : int 1993 1993 1993 1993 1993 1993 1993 1993 1993 1993 ...
## $ Quarter ID : int 19931 19931 19931 19931 19931 19931 19931 19931 19931 19931 ...
## $ Quarter : chr "1993-Q1" "1993-Q1" "1993-Q1" "1993-Q1" ...
## $ Chapter 2 Digit ID: int 1 1 1 1 1 1 1 1 1 2 ...
## $ Chapter 2 Digit : chr "Los Productos de Origen Animal" "Los Productos de Origen Animal" "Los Productos de Origen Animal" "Los Productos de Origen Animal" ...
## $ HS2 2 Digit ID : int 101 101 102 102 103 103 104 104 105 206 ...
## $ HS2 2 Digit : chr "Animales Vivos" "Animales Vivos" "Carne y Despojos Comestibles" "Carne y Despojos Comestibles" ...
## $ Flow ID : int 1 2 1 2 1 2 1 2 1 1 ...
## $ Flow : chr "Importaciones" "Exportaciones" "Importaciones" "Exportaciones" ...
## $ Trade Value : num 4.28e+07 1.15e+08 1.64e+08 8.79e+06 1.57e+07 ...
df_chapters <- df_chapters |>
clean_names() # Esto facilita el trabajo al simplificar los nombres de las columnas quitándole los espacios y las mayúsculas.
Se realizan algunos procesos de limpieza y preparación de la BD.
### Convertir trimestre a fecha
df_chapters$quarter <- as.yearqtr(df_chapters$quarter,format = "%Y-Q%q")
### Realizar traducciones: Al descargar los datos mediante la API estos se descargan automáticamente en inglés.
df_chapters <- df_chapters |>
select(!ends_with("ID")) |>
rename(trimestre = quarter,
flujo = flow,
capitulo = chapter_2_digit,
valor_comercio = trade_value) |>
mutate(capitulo = as.factor(capitulo))
### Reescalar importaciones y exportaciones y convertir a formato ancho
df_chapters <- df_chapters |> pivot_wider(
names_from = flujo, values_from = valor_comercio) |>
mutate(Importaciones = Importaciones/1000000,
Exportaciones = Exportaciones/1000000)
### Recodificar capitulos
df_chapters <- df_chapters |>
mutate(capitulo = fct_recode(capitulo,
"Animales" = "Los Productos de Origen Animal",
"Vegetales" = "Productos del Reino Vegetal",
"Animal_Veg" = "Animales y Vegetales Bi-Productos",
"Alimentos" = "Los Productos Alimenticios",
"Minerales" = "Productos Minerales",
"Quimicos" = "Productos Químicos",
"Plásticos" = "Plásticos y Cauchos",
"Pieles" = "Pieles de Animales",
"Madera" = "Productos de Madera",
"Papel" = "Artículos de Papel",
"CalzSomb" = "Calzado, y Sombreros",
"Piedra" = "Piedra y Cristal",
"MPreciosos" = "Metales Preciosos",
"Otros" = "Diverso"))
A continuación se generará un dataframe con los productos HS2 contenidos en cada capítulo:
### Tabla capítulos
chapters <- df_chapters |>
select(capitulo) |>
distinct()
# Código para generar una tabla desplegable en html
chapters |>
kbl(
caption = "Tabla 1: Capítulos identificados en las exportaciones e importaciones de México",
align = "l"
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
full_width = TRUE,
font_size = 14
)
## Warning in attr(x, "align"): 'xfun::attr()' está en desuso.
## Utilizar 'xfun::attr2()' en su lugar.
## Ver help("Deprecated")
capitulo |
---|
Animales |
Vegetales |
Animal_Veg |
Alimentos |
Minerales |
Quimicos |
Plásticos |
Pieles |
Madera |
Papel |
Textiles |
CalzSomb |
Piedra |
MPreciosos |
Rieles |
Máquinas |
Transporte |
Instrumentos |
Otros |
# Tabla productos
products <- df_chapters |>
group_by(capitulo) |>
summarise(productos_hs2_en_capitulo = unique(hs2_2_digit))
## Warning: Returning more (or less) than 1 row per `summarise()` group was deprecated in
## dplyr 1.1.0.
## ℹ Please use `reframe()` instead.
## ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()`
## always returns an ungrouped data frame and adjust accordingly.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `summarise()` has grouped output by 'capitulo'. You can override using the
## `.groups` argument.
# Código para generar una tabla desplegable en html
products |>
kbl(
caption = "Tabla 2: Productos HS2 identificados por capítulo en las exportaciones e importaciones de México",
align = "l"
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
full_width = TRUE,
font_size = 14
)
## Warning in attr(x, "align"): 'xfun::attr()' está en desuso.
## Utilizar 'xfun::attr2()' en su lugar.
## Ver help("Deprecated")
capitulo | productos_hs2_en_capitulo |
---|---|
Animal_Veg | Grasas y Aceites Animales o Vegetales |
Papel | Pulpa de Madera, Material Celulósico Fibroso, Residuos, Etc |
Papel | Productos a Base de Papel |
Papel | Libros Impresos, Periódicos, Fotos, Etc |
CalzSomb | Calzado, Polainas y Artículos Análogos; Partes de estos Artículos |
CalzSomb | Sombreros, Demás Tocados y sus Partes |
Otros | Muebles, Iluminación, Letreros, Construcciones Prefabricadas |
Otros | Juguetes, Juegos y Artículos para Recreo o Deporte; sus Partes y Accesorios |
Otros | Manufacturas Diversas |
Instrumentos | Aparatos Ópticos, Fotográficos, Técnicos, Médicos, Etc |
Instrumentos | Aparatos de Relojería y sus Partes |
Instrumentos | Instrumentos Musicales; sus Partes y Accesorios |
Alimentos | Preparaciones de Peces, Crustáceos y otros Invertebrados Acuáticos |
Alimentos | Azucares y Artículos de Confitería |
Alimentos | Cacao y sus Preparaciones |
Alimentos | Preparaciones a Base de Cereales, Harina, Almidón, Fécula o Leche; Productos de Pastelería |
Alimentos | Preparaciones de Hortalizas, Frutos u otros Frutos o Demás Partes de Plantas |
Alimentos | Preparaciones Alimenticias Diversas |
Alimentos | Bebidas, Líquidos Alcohólicos y Vinagre |
Alimentos | Residuos y Desperdicios de las Industrias Alimentarias; Alimentos Preparados para Animales |
Alimentos | Tabaco y Sucedáneos del Tabaco, Elaborados |
Animales | Animales Vivos |
Animales | Carne y Despojos Comestibles |
Animales | Pescados y Crustáceos, Moluscos y Demás Invertebrados Acuáticos |
Animales | Productos Lácteos; Productos Comestibles de Origen Animal, no Especificados |
Animales | Los Demás Productos de Origen Animal, no Expresados ni Comprendidos en otra Parte |
Máquinas | Reactores Nucleares, Calderas, Maquinaria, Etc |
Máquinas | Equipos Eléctricos, Electrónicos |
MPreciosos | Perlas, Piedras Preciosas, Metales, Monedas, Etc |
Piedra | Manufacturas de Piedra, Yeso Fraguable, Cemento, Amianto (Asbesto), Mica o Materias Análogas |
Piedra | Productos Cerámicos |
Piedra | Vidrio y sus Manufacturas |
Pieles | Pieles (Excepto la Peletería) y Cueros |
Pieles | Artículos de Cuero; Guarnicionería y Arneses; Artículos de Viaje, Bolsos y Contenedores Similares |
Plásticos | Plásticos y sus Manufacturas |
Plásticos | Caucho y sus Manufacturas |
Madera | Madera, Carbón Vegetal y Manufacturas de Madera |
Vegetales | Plantas Vivas y Productos de la Floricultura |
Vegetales | Hortalizas, Plantas, Raíces y Tubérculos Alimenticios |
Vegetales | Frutas Comestibles, Nueces y Melones |
Vegetales | Café, Té, Yerba Mate y Especias |
Vegetales | Cereales |
Vegetales | Productos de la Molinería; Malta; Almidón y Fécula; Inulina; Gluten de Trigo |
Vegetales | Semillas Oleaginosas, Frutos Oleagicos, Granos, Semillas, Etc |
Vegetales | Gomas, Resinas y Demás Jugos y Extractos Vegetales |
Vegetales | Materiales de Trenzado y otros Productos de Origen Vegetal no Especificados |
Minerales | Sal; Azufre; Tierras y Piedras; Yesos, Cales y Cementos |
Minerales | Minerales Metalíferos, Escorias y Cenizas |
Minerales | Combustibles Minerales, Aceites, Etc |
Quimicos | Productos Químicos Inorgánicos, Compuestos de Metales Preciosos, Isótopos |
Quimicos | Productos Químicos Orgánicos |
Quimicos | Productos Farmacéuticos |
Quimicos | Abonos |
Quimicos | Extractos Curtientes, Tintóreos, Pigmentos, Etc |
Quimicos | Aceites Esenciales, Perfumes, Cosméticos, Artículos de Tocador |
Quimicos | Jabones, Lubricantes, Ceras, Velas, Pastas de Modelar |
Quimicos | Materias Albuminoideas; Productos a Base de Almidón o de Fécula Modificados; Colas; Enzimas |
Quimicos | Productos Fotográficos o Cinematográficos |
Quimicos | Productos Diversos de las Industrias Químicas |
Rieles | Fundición, Hiero y Acero |
Rieles | Artículos de Hierro o Acero |
Rieles | Cobre y sus Manufacturas |
Rieles | Níquel y sus Manufacturas |
Rieles | Aluminio y sus Manufacturas |
Rieles | Plomo y sus Manufacturas |
Rieles | Cinc y sus Manufacturas |
Rieles | Los Demás Metales Comunes; Cermets; Manufacturas de estas Materias |
Rieles | Herramientas, Implementos, Cubiertos, Etc |
Rieles | Manufacturas Diversas de Metal Común |
Textiles | Lana y Pelo Fino u Ordinario; Hilados y Tejidos de Crin |
Textiles | Algodón |
Textiles | Filamentos Sintéticos o Artificiales; Tiras y Formas Similares de Materia Textil Sintética o Artifical |
Textiles | Fibras Sintéticas o Artificiales Discontinuas |
Textiles | Hilados Especiales; Cordeles, Cuerdas y Cables |
Textiles | Alfombras y Demás Revestimientos para el Suelo, de Materia Textil |
Textiles | Tejidos Especiales; Superficies Textiles con Mechón Insertado; Encajes; Tapicería; Pasamanería; Bordados |
Textiles | Telas Impregnadas, Recubiertas, Revestidas o Estratificadas; Artículos Técnicos de Materia Textil |
Textiles | Tejidos de Punto |
Textiles | Prendas y Complementos (Accesorios), de Vestir, de Punto |
Textiles | Prendas y Complementos (Accesorios), de Vestir, Excepto los de Punto |
Textiles | Otros Artículos Textiles Hechos, Conjuntos, Ropa Gastada, Etc |
Transporte | Equipos y Vehículos Ferroviarios (Trenes) |
Transporte | Vehículos |
Al observar esta tabla notamos que los productos HS2 en los capítulos Máquinas y Transporte son los siguientes:
ma_tr <- df_chapters |>
group_by(capitulo) |>
summarise(productos_hs2_en_capitulo = unique(hs2_2_digit)) |>
filter(capitulo %in% c("Máquinas", "Transporte"))
## Warning: Returning more (or less) than 1 row per `summarise()` group was deprecated in
## dplyr 1.1.0.
## ℹ Please use `reframe()` instead.
## ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()`
## always returns an ungrouped data frame and adjust accordingly.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `summarise()` has grouped output by 'capitulo'. You can override using the
## `.groups` argument.
# Código para generar una tabla desplegable en html
ma_tr |>
kbl(
caption = "Tabla 3: Productos HS2 identificados en Maquinaria y Transporte",
align = "l"
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
full_width = TRUE,
font_size = 14
)
## Warning in attr(x, "align"): 'xfun::attr()' está en desuso.
## Utilizar 'xfun::attr2()' en su lugar.
## Ver help("Deprecated")
capitulo | productos_hs2_en_capitulo |
---|---|
Máquinas | Reactores Nucleares, Calderas, Maquinaria, Etc |
Máquinas | Equipos Eléctricos, Electrónicos |
Transporte | Equipos y Vehículos Ferroviarios (Trenes) |
Transporte | Vehículos |
A continuación se presentará una visualización de la evolución del comercio de los productos HS2 en esas categorías. Para esto se crearan dos bases de datos, una que contenga únicamente los capítulos Maquinaria y Transporte y otro que contenga todos los capítulos para hacer un análisis más completo.
### Base solo con capítulos de maquinaria y transporte:
hs2_mq_tr <- df_chapters |>
filter(capitulo %in% c("Máquinas", "Transporte"))
### Base con todos los capítulos:
hs2_chapters <- df_chapters
Primero recordemos nuestro punto de partida:
prod_percentages <- xmp |>
mutate(Capítulo = if_else(Capítulo %in% c("Máquinas", "Transporte"), Capítulo, "Otros")) |>
# Primero calculamos los capítulos más importantes, usando como ponderación los valores exportados del 2020 en adelante, y agregamos todos los demás capítulos en una categoría residual, Otros.
mutate(
Year = as.numeric(format(Trimestre, "%Y")),
lump_weight = if_else(Year >= 2020, Exportaciones, 0),
Capítulo = fct_lump_n(
f = Capítulo,
n = 7,
w = lump_weight,
other_level = "Otros"
)
) |>
# Luego sumamos las exportaciones por capítulo
group_by(Trimestre, Capítulo) |>
summarise(Exportaciones = sum(Exportaciones, na.rm = TRUE), .groups = "drop") |>
# Y ahora dividimos por el total de exportaciones por trimestre, para obtener los porcentajes que estábamos buscando
group_by(Trimestre) |>
mutate(percent_valor = Exportaciones / sum(Exportaciones, na.rm = TRUE)) |>
ungroup() |>
mutate(Capítulo = fct_reorder(Capítulo, Exportaciones, .fun = sum, .desc = TRUE))
### Gráfico modificado
prod_percentages |>
ggplot(aes(x = Trimestre, y = percent_valor, fill = Capítulo)) +
theme_bw() +
scale_fill_brewer(palette = "Dark2") +
geom_area(alpha = 0.9) +
geom_hline(
yintercept = seq(0.1, 0.9, by = 0.1),
color = "white",
linetype = "dotted",
linewidth = 0.5) +
scale_y_continuous(
breaks = seq(0, 1, by = 0.1),
labels = scales::percent,
expand = c(0, 0)) +
scale_x_yearqtr(
breaks = seq(from = as.yearqtr("1993 Q1"), to = as.yearqtr("2025 Q1"), by = 1),
expand = c(0,0))+
labs(title = "Figura 2: Mexico, distribución porcencual de las exportaciones de Máquinas y Transporte, 1993 - 2024")+
labs(
x = "",
y = "",
fill = "",
caption = "E. Montalvo con base de Data Mexico") +
theme(
legend.position = "bottom",
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
panel.grid.major.y = element_blank(),
panel.grid.minor.y = element_blank()
)
Visualización productos H2S Transporte y Maquinaria
NOTA: Se omitió el calculo de los productos H2S más importantes, pues solo nos interesa conocer la evolución de los capítuos Maquinaria y Transporte. Este calculo se integrará en un análisis posterior.
hs2_mq_tr_percentage <- hs2_mq_tr |>
group_by(trimestre, hs2_2_digit) |>
summarise(Exportaciones = sum(Exportaciones, na.rm = TRUE), .groups = "drop") |>
group_by(trimestre) |>
mutate(percent_valor = Exportaciones / sum(Exportaciones, na.rm = TRUE)) |>
ungroup() |>
mutate(hs2_2_digit = fct_reorder(hs2_2_digit, Exportaciones, .fun = sum, .desc = TRUE))
Con esto se genera el siguiente gráfico
hs2_mq_tr_percentage |>
ggplot(aes(x = trimestre, y = percent_valor, fill = hs2_2_digit)) +
theme_bw() +
scale_fill_brewer(palette = "Dark2") +
geom_area(alpha = 0.9) +
geom_hline(
yintercept = seq(0.1, 0.9, by = 0.1),
color = "white",
linetype = "dotted",
linewidth = 0.5) +
labs(title = "Figura 3: Evolución de los productos H2S de Maquinaria y Transporte , 1993 - 2024")+
scale_y_continuous(
breaks = seq(0, 1, by = 0.1),
labels = scales::percent,
expand = c(0, 0)) +
scale_x_yearqtr(
breaks = seq(from = as.yearqtr("1993 Q1"), to = as.yearqtr("2025 Q1"), by = 1),
expand = c(0,0))+
labs(
x = "",
y = "",
fill = "",
caption = "E. Montalvo con base de Data Mexico") +
theme(
legend.position = "bottom",
legend.text = element_text(size = 8), # tamaño del texto de la leyenda
legend.key.size = unit(0.5, "cm"), # tamaño de las cajitas de color
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
panel.grid.major.y = element_blank(),
panel.grid.minor.y = element_blank()
)
Análisis:pendiente
Los códigos id de cada producto HS2 son los siguientes: 1684: Reactores Nucleares 1685: Equipos Eléctricos, Electrónicos 1786: Trenes 1787: Vehículos
Se reporta que este es el máximo nivel de desagregación en el portal Data México
Visualización productos H2S Capítulos
hs2_chapters_percentage <- hs2_chapters |>
mutate(
Year = as.numeric(format(trimestre, "%Y")),
lump_weight = if_else(Year >= 2020,
coalesce(Exportaciones, 0), # reemplaza NA por 0
0),
hs2_2_digit = fct_lump_n(
f = hs2_2_digit,
n = 7, #83
w = lump_weight,
other_level = "Otros"
)
) |>
group_by(trimestre, hs2_2_digit) |>
summarise(Exportaciones = sum(Exportaciones, na.rm = TRUE), .groups = "drop") |>
group_by(trimestre) |>
mutate(percent_valor = Exportaciones / sum(Exportaciones, na.rm = TRUE)) |>
ungroup() |>
mutate(hs2_2_digit = fct_reorder(hs2_2_digit, Exportaciones, .fun = sum, .desc = TRUE))
hs2_chapters_percentage |>
ggplot(aes(x = trimestre, y = percent_valor, fill = hs2_2_digit)) +
theme_bw() +
scale_fill_brewer(palette = "Dark2") +
geom_area(alpha = 0.9) +
geom_hline(
yintercept = seq(0.1, 0.9, by = 0.1),
color = "white",
linetype = "dotted",
linewidth = 0.5) +
scale_y_continuous(
breaks = seq(0, 1, by = 0.1),
labels = scales::percent,
expand = c(0, 0)) +
scale_x_yearqtr(
breaks = seq(from = as.yearqtr("1993 Q1"), to = as.yearqtr("2025 Q1"), by = 1),
expand = c(0,0))+
labs(title = "Figura 4: Evolución de los productos H2S por capítulo , 1993 - 2024")+
labs(
x = "",
y = "",
fill = "",
caption = "E. Montalvo con base de Data Mexico") +
theme(
legend.position = "bottom",
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
panel.grid.major.y = element_blank(),
panel.grid.minor.y = element_blank()
)