pacman::p_load(
httr, jsonlite, forcats, zoo, tidyverse, readxl, here,janitor, stringr,gt
)Datos para Capítulo 2 Nearshoring en los datos
Carga de librerías
Exportaciones de México por país
Descarga y almacenamiento de la base de datos original
api_url <- "https://www.economia.gob.mx/apidatamexico/tesseract/data.jsonrecords?cube=inegi_foreign_trade_country&drilldowns=Year%2CFlow%2CCountry&locale=es&measures=Trade+Value"
fetch_and_save_data(url = api_url, "RDS", "MexXMPaisINEGI.rds")Data saved successfully to: /cloud/project/RDS/MexXMPaisINEGI.rds
Ajustes a la base de datos original
# 1. Cargar la base de datos original
MexXMPaisINEGI <- readRDS(here::here("RDS", "MexXMPaisINEGI.rds"))
# 2. Guardar los atributos en un objeto separado (se pierden al usar summarize)
source <- attr(MexXMPaisINEGI, "source_info")
# 3. Procesar los datos
MexXMPaisINEGI <- MexXMPaisINEGI |>
select(Year, Flow, Country,`Trade Value`) |>
rename(
Año = Year,
Flujo = Flow,
Pais = Country,
Valor = `Trade Value`) |>
mutate(
Flujo = as.factor(Flujo),
País = as.factor(Pais)
) |>
mutate(
Pais = fct_relabel(Pais, \(level) str_replace_all(level, " ", "_"))
) |>
mutate(
Pais = fct_recode(
Pais,
"USA" = "Estados_Unidos",
"CoreaS" = "Corea_del_Sur"
)
) |>
pivot_wider(
names_from = Flujo, values_from = Valor
) |>
group_by(Año, Pais) |>
summarise(
Importaciones = sum(Importaciones),
Exportaciones = sum(Exportaciones),
.groups = "drop"
)
# 4. Adjuntar los metadatos
attr(MexXMPaisINEGI,"source_info") <- source
# 5 Verificar atributos
#gt_metadata(MexXMPaisINEGI)
# 6. Guardar los datos
saveRDS(MexXMPaisINEGI,here::here("RDS", "MexXMPaisINEGI.rds")) Exportaciones a Estados Unidos por sección del HS
Descarga y almacenamiento de la base de datos original
api_url <- "https://www.economia.gob.mx/apidatamexico/tesseract/data.jsonrecords?Country=usa&Flow=2&cube=economy_foreign_trade_mun&drilldowns=Year%2CCountry%2CChapter%2CFlow&locale=es&measures=Trade+Value"
fetch_and_save_data(url = api_url, "RDS", "Mex_X_USA_Sec.rds")Data saved successfully to: /cloud/project/RDS/Mex_X_USA_Sec.rds
Ajustes a la base de datos
Mex_X_USA_Sec <- readRDS(here::here("RDS", "Mex_X_USA_Sec.rds"))
source <- attr(Mex_X_USA_Sec, "source_info")
Mex_X_USA_Sec <- Mex_X_USA_Sec |>
# 1. Seleccionamos incluyendo el ID para que el macheo sea seguro
select(
Año = Year,
Sec_ID = `Chapter ID`,
Sección_Nombre = Chapter,
Exportaciones = `Trade Value`
) |>
# 2. Mapeo por ID (mucho más rápido y seguro)
mutate(Sec = case_match(
Sec_ID,
1 ~ "Carnes",
2 ~ "Vegetales",
3 ~ "Subproductos",
4 ~ "Alimentos",
5 ~ "Minerales",
6 ~ "Química",
7 ~ "Plásticos",
8 ~ "Pieles",
9 ~ "Madera",
10 ~ "Papel",
11 ~ "Textiles",
12 ~ "Calzado",
13 ~ "Cerámica",
14 ~ "Joyería",
15 ~ "Metales",
16 ~ "Maquinaria",
17 ~ "Equip_Transp",
18 ~ "Instrumentos",
19 ~ "Armas",
20 ~ "Varios",
21 ~ "Arte",
.default = "Otros"
)) |>
# 3. Convertir a factor y limpiar columnas innecesarias si prefieres
mutate(Sec = factor(Sec)) Warning: There was 1 warning in `mutate()`.
ℹ In argument: `Sec = case_match(...)`.
Caused by warning:
! `case_match()` was deprecated in dplyr 1.2.0.
ℹ Please use `recode_values()` instead.
saveRDS(Mex_X_USA_Sec,here::here("RDS", "Mex_X_USA_Sec.rds")) Exportaciones de México a Estados Unidos por Capítulo (HS”), secciones 16, 17 y 18
Descarga y almacenamiento de la base de datos principal
api_url <- "https://www.economia.gob.mx/apidatamexico/tesseract/data.jsonrecords?Chapter=16%2C17%2C18&Country=usa&Flow=2&cube=economy_foreign_trade_mun&drilldowns=Year%2CCountry%2CFlow%2CChapter%2CHS2&locale=es&measures=Trade+Value"
fetch_and_save_data(url = api_url, "RDS", "Mex_X_USA_Cap.rds")Data saved successfully to: /cloud/project/RDS/Mex_X_USA_Cap.rds
Mex_X_USA_Cap <- readRDS(here::here("RDS", "Mex_X_USA_Cap.rds"))
Mex_X_USA_Cap <- Mex_X_USA_Cap |>
# 1. Eliminamos las columnas innecesarias
select(-c(`Country ID`, Country, `Flow ID`, Flow)) |>
# 2. Renombramos las variables al castellano
rename(
Año = Year,
ID_Sección = `Chapter ID`,
Sección = Chapter,
ID_Capítulo = `HS2 ID`,
Capítulo = HS2,
Exportaciones = `Trade Value`
) |>
# 3. Creamos 'Cap' y convertimos a factor
mutate(
Cap = case_match(ID_Capítulo,
1684 ~ "Reactores/Maq",
1685 ~ "Electrónica",
1786 ~ "Ferroviario",
1787 ~ "Vehículos",
1788 ~ "Aeroespacial",
1789 ~ "Barcos",
1890 ~ "Óptica/Médico",
1891 ~ "Relojería",
1892 ~ "Musicales",
.default = as.character(ID_Capítulo)
),
# Convertimos a factor las variables solicitadas
Sección = as.factor(Sección),
Capítulo = as.factor(Capítulo),
Cap = as.factor(Cap)
) |>
# 4. Reorganizamos para que 'Cap' esté junto a su descripción
relocate(Cap, .after = Capítulo)
saveRDS(Mex_X_USA_Cap,here::here("RDS", "Mex_X_USA_Cap.rds")) Exportaciones de México a Estados Unidos por Partida de las Secciones 16, 17 y 18
Carga y almacenamiento de la base de datos original
api_url <- "https://www.economia.gob.mx/apidatamexico/tesseract/data.jsonrecords?Chapter=16%2C17%2C18&Country=usa&Flow=2&cube=economy_foreign_trade_mun&drilldowns=Year%2CCountry%2CFlow%2CChapter%2CHS2%2CProduct+Level%2CHS4&locale=es&measures=Trade+Value"
fetch_and_save_data(url = api_url, "RDS", "Mex_X_USA_Part.rds")Data saved successfully to: /cloud/project/RDS/Mex_X_USA_Part.rds
Ajustes a la base de datos.
Identificar las 10 partidas más importantes en cada capítulo
# 1. Load the original data
Mex_X_USA_Part <- readRDS(here::here("RDS", "Mex_X_USA_Part.rds"))
# 1.1 Save source info
source <- attr(MexXMPaisINEGI, "source_info")
# 2. Filter for specific Capítulos (HS2) and Clean Names
# We use numeric codes 1684, 1685, 1787, 1890
Mex_X_USA_topPart <- Mex_X_USA_Part |>
filter(`HS2 ID` %in% c(1684, 1685, 1787, 1890)) |>
subset(select = c(Year, Chapter, HS2, HS4, `Trade Value`)) |>
setNames(c("Año", "Sección", "Capítulo", "Partida", "Exportaciones"))
# 3. Identify Top 10 Partidas per Capítulo (HS2) based on 2020-2025
top_10_list <- Mex_X_USA_topPart |>
filter(Año >= 2020 & Año <= 2025) |>
group_by(Capítulo, Partida) |>
summarise(Recent_Total = sum(Exportaciones, na.rm = TRUE), .groups = "drop") |>
group_by(Capítulo) |>
slice_max(order_by = Recent_Total, n = 10) |>
select(Capítulo, Partida) |>
mutate(Is_Top_10 = TRUE)
# 4. Group the non-leaders as "Otras" across all years
Mex_X_USA_topPart <- Mex_X_USA_topPart |>
left_join(top_10_list, by = c("Capítulo", "Partida")) |>
mutate(
Partida_Final = ifelse(!is.na(Is_Top_10), as.character(Partida), "Otras")
) |>
select(-Is_Top_10)
# 5. Adjuntar los metadatos
attr(Mex_X_USA_topPart,"source_info") <- source
#6 Save the intermediate file
saveRDS(Mex_X_USA_topPart, here::here("RDS", "Mex_X_USA_topPart.rds"))
# 7. Sanity Check: Confirm we have the 4 Capítulos
unique(Mex_X_USA_topPart$Capítulo)[1] "Reactores Nucleares, Calderas, Maquinaria, Etc"
[2] "Equipos Eléctricos, Electrónicos"
[3] "Vehículos"
[4] "Aparatos Ópticos, Fotográficos, Técnicos, Médicos, Etc"
Crear nombres cortos para las partidas top
# 1. Load Step 1 data and preserve metadata
Mex_X_USA_topPart <- readRDS(here::here("RDS", "Mex_X_USA_topPart.rds"))
# 2. Comprehensive Cleaning and One-Word Mapping
Mex_X_USA_topPart <- Mex_X_USA_topPart |>
mutate(
# Rename Capítulo (HS2) for cleaner presentation
Capítulo = case_when(
Capítulo == "Reactores Nucleares, Calderas, Maquinaria, Etc" ~ "Reactores/Maq",
Capítulo == "Equipos Eléctricos, Electrónicos" ~ "Electrónica",
Capítulo == "Vehículos" ~ "Vehículos",
Capítulo == "Aparatos Ópticos, Fotográficos, Técnicos, Médicos, Etc" ~ "Óptica/Médico",
TRUE ~ as.character(Capítulo)
),
# Map Partida_Final to single-word short names (Part)
Part = case_when(
Partida_Final == "Otras" ~ "Otras",
# Recently identified items (2020-2025 leaders)
grepl("Piezas para Motores", Partida_Final) ~ "PiezasMotores",
Partida_Final == "Bombas para Líquidos" ~ "BombasLiq",
Partida_Final == "Bombas de Aire o Bombas de Vacío" ~ "BombasAire",
Partida_Final == "Refrigeradores, Congeladores y otros Equipos de Refrigeración o Congelación" ~ "Refrigeración",
Partida_Final == "Aparatos para Filtrar o Purificar Líquidos o Gases" ~ "Filtros",
Partida_Final == "Maquinaria y Aparatos Mecánicos que tienen Funciones Individuales, no Especificadas en otra Parte" ~ "MaqMecánica",
Partida_Final == "Iluminación Eléctrica o Equipos de Señalización" ~ "Iluminación",
Partida_Final == "Bicicletas y Demás Velocípedos (Incluidos los Triciclos de Reparto), sin Motor" ~ "Bicicletas",
Partida_Final == "Circuitos Electrónicos Integrados" ~ "Circuitos",
grepl("Carretillas Automóvil sin Dispositivo de Elevación", Partida_Final) ~ "Carretillas",
Partida_Final == "Partes y Accesorios de Máquinas" ~ "PartesMaq",
Partida_Final == "Máquinas y Aparatos no Especificados" ~ "OtrasMaq",
# Chapter: Reactores/Maq & Electrónica
Partida_Final == "Maquinaria para Aire Acondicionado" ~ "AireAcond",
Partida_Final == "Máquinas y Unidades de Procesamiento de Datos, no Especificados o Incluidos en otro Lugar" ~ "Computación",
Partida_Final == "Válvulas y Artículos Similares para Tuberías, Cubetas o Similares, Incluidas las Válvulas Reductoras de Presión y las Válvulas Controladas Termostáticamente" ~ "Válvulas",
Partida_Final == "Motores y Generadores" ~ "MotoresGen",
Partida_Final == "Transformadores de Potencia, Convertidores Estáticos e Inductores" ~ "Transformadores",
Partida_Final == "Teléfonos, Incluidos los Teléfonos Móviles y los de otras Redes Inalámbricas" ~ "Teléfonos",
Partida_Final == "Aparatos Eléctricos para Conmutar o Proteger Circuitos Eléctricos" ~ "Interruptores",
Partida_Final == "Tableros, Consolas y otras Bases para el Control o Distribución de Electricidad" ~ "Tableros",
Partida_Final == "Alambres y Cables Eléctricos" ~ "Cables",
# Chapter: Vehículos
Partida_Final == "Partes de Vehículos para Vías Férreas" ~ "PartesTren",
Partida_Final == "Tractores (Excepto las Carretillas Tractor de la Partida 87.09)" ~ "Tractores",
Partida_Final == "Automóviles y otros Vehículos Automóviles Diseñados Principalmente para el Transporte de Personas" ~ "Autos",
Partida_Final == "Vehículos de Motor para el Transporte de Mercancías" ~ "Carga",
Partida_Final == "Carrocerías de Vehículos Automóviles de las Partidas 87.01 a 87.05, Incluidas las Cabinas" ~ "Carrocerías",
Partida_Final == "Partes y Accesorios de Vehículos Automotores" ~ "PartesAutos",
Partida_Final == "Partes y Accesorios de Vehículos de las Partidas 87.11 a 87.13" ~ "PartesMotoBici",
Partida_Final == "Remolques y Semirremolques para Cualquier Vehículo; los Demás Vehículos no Automóviles; sus Partes" ~ "Remolques",
Partida_Final == "Vagones para Transporte de Mercancías sobre Carriles (Rieles)" ~ "Vagones",
# Chapter: Óptica/Médico
Partida_Final == "Partes de los Aparatos de las Partidas 88.01 u 88.02" ~ "Aeroespacial",
Partida_Final == "Dispositivos de Cristal Líquido que no Constituyen Artículos Previstos en otros Títulos" ~ "LCD",
Partida_Final == "Instrumentos y Aparatos Utilizados en Ciencias Médicas" ~ "DispMed",
Partida_Final == "Mecanoterapia, Aparatos de Masaje; Respiración Artificial u otro Aparato de Respiración Terapéutico" ~ "TerapiaResp",
Partida_Final == "Férulas u otros Artículos y Aparatos de Fractura; Artículos y Extremidades Artificiales; Audífonos" ~ "Ortopedia",
Partida_Final == "Instrumentos y Aparatos para la Medida o Control del Caudal, Nivel, Presión u otras Características Variables de Líquidos o Gases" ~ "MediciónFlujo",
Partida_Final == "Instrumentos y Aparatos para Medir la Viscosidad, la Porosidad, la Expansión, la Tensión Superficial o Similares para Mediciones de Calor, Sonido o Luz" ~ "ÓpticaFísica",
Partida_Final == "Contadores de Gas, Líquido o Electricidad. Incluye los de Calibración" ~ "Contadores",
Partida_Final == "Instrumentos y Aparatos para Medir o Detectar Radiación Alfa, Beta, Gamma, Rayos X, Cósmicos u otras Radiaciones Ionizantes" ~ "Radiación",
Partida_Final == "Instrumentos, Aparatos y Máquinas para Medir o Verificar, no Especificados en otra Parte" ~ "MediciónEspec",
Partida_Final == "Instrumentos y Aparatos de Regulación o Control" ~ "ControlReg",
Partida_Final == "Monitores y Proyectores, que no Incorporan Aparatos de Recepción de Televisión" ~ "Monitores",
TRUE ~ "Revisar"
)
)
# 3. Factorization
# Año remains numeric. Others converted to factors for plotting.
Mex_X_USA_topPart$Sección <- factor(Mex_X_USA_topPart$Sección)
Mex_X_USA_topPart$Capítulo <- factor(Mex_X_USA_topPart$Capítulo)
Mex_X_USA_topPart$Partida_Final <- factor(Mex_X_USA_topPart$Partida_Final)
Mex_X_USA_topPart$Part <- factor(Mex_X_USA_topPart$Part)
# 4. Re-attach metadata and save
attr(Mex_X_USA_topPart,"source_info") <- source
saveRDS(Mex_X_USA_topPart, here::here("RDS", "Mex_X_USA_topPart.rds"))