Code
library(siebanxicor)
library(dplyr)
library(ggplot2)
library(lubridate)
library(tidyr)
library(scales)
library(plotly)
Roberto Valdez Rivera
April 6, 2025
Ante la reciente amenaza de la imposición de aranceles a las importaciones extadounidenses por parte del gobierno del Presidente Donald Trump –considerando que ya se han establecido a los autómoviles, acero y alumunio el 25% por parte de lo procedente de México– es necesario analizar el comportamiento histórico que ha tenido la relación comercial México-Estados Unidos.
El desarrollo del presente proyecto tiene como finalidad analizar el comportamiento histórico que ha tenido la balanza comercial de mercancías de México. El estudio se reduce a los principales países que desepeñan un rol considerable en la procedencia de las exportaciones e importaciones nacionales, por lo que resultó necesario agrupar a las demás naciones.
Las información se obtuvo por medio de la conexión de una API a los datos disponibles del Banco de México sobre la balanza comercial desagregada por países. Consúltese el catálogo de series para más información. La posterior limpieza, transformación y visualziación de los datos se realizó en R.
hoy <- Sys.Date()
token = "4985a72114493ee2710570247deb9745b39244dd5ec0855dbdea277277a23685"
setToken(token)
idSeries <- c("SE29146", #Total exportaciones
"SE27277", #Exportaciones a Estados Unidos
"SE27276", #Exportaciones a Canadá
"SE27342", #Exportaciones a China
"SE29147", #Total importaciones
"SE27544", #Importaciones de Estados Unidos
"SE27543", #Importaciones de Canadá
"SE27609" #Importaciones de China
)
metadatos <- getSeriesMetadata(idSeries)
series <- getSeriesData(idSeries, "2000-01-01", hoy)
df<- as.data.frame(series)
df <- df[,-c(3,5,7,9,11,13,15)]
df <- rename(df, "fecha"=colnames(df)[1],
"total_x"="SE29146.value", #Exportaciones Totales
"est_uni_x"="SE27277.value", #Exportaciones a Estados Unidos
"canada_x"="SE27276.value", #Exportaciones a Canadá
"china_x"= "SE27342.value", #Exportaciones a China
"total_m"="SE29147.value", #Total Importaciones
"est_uni_m"="SE27544.value", #Importaciones de Estados Unidos
"canada_m"="SE27543.value", #Importaciones de Canadá
"china_m"="SE27609.value" #Importaciones de China
)
# Transformar datos a millones de dólares
for (col in colnames(df)) {
if (col == "fecha") {
next # Salta esta iteración del bucle
}
# Operaciones para las demás columnas
df[[col]] <- (df[[col]] / 1000)
}
sumar_por_año_todas <- function(datos) {
datos %>%
mutate(Año = year(ymd(fecha))) %>% # Extraer el año
group_by(Año) %>% # Agrupar por año
summarize(across(where(is.numeric), sum, na.rm = TRUE)) # Sumar columnas numéricas
}
df <- sumar_por_año_todas(df)
df$Año <- as.Date(paste0(df$Año, "-01-01"))
df <- mutate(df, otro_x= total_x-(est_uni_x+canada_x+china_x),
otro_m=total_m-(est_uni_m+canada_m+china_m))
#======= Formato largo Exportaciones:
x <- df %>% select(Año, est_uni_x, canada_x, china_x,otro_x, total_x)
x_l <-x%>% select(-total_x)%>%
pivot_longer(cols=c(est_uni_x, canada_x, china_x, otro_x),
names_to = "variable",
values_to="Valor")
x_l <- mutate(x_l, Pais= case_when(variable == "est_uni_x" ~ "Estados Unidos",
variable == "canada_x" ~ "Canadá",
variable == "china_x" ~ "China",
TRUE ~ "Otros paises"))
#========= Formato largo importaciones:
m <- df %>% select(Año,est_uni_m,canada_m,china_m,otro_m, total_m)
m_l <-m%>% select(-total_m)%>%
pivot_longer(cols=c(est_uni_m, canada_m, china_m, otro_m),
names_to = "variable",
values_to="Valor")
m_l <- mutate(m_l, Pais= case_when(
variable == "est_uni_m" ~ "Estados Unidos",
variable == "canada_m" ~ "Canadá",
variable == "china_m" ~ "China",
TRUE ~ "Otros paises"
))
gx <- x_l %>% filter(Año<"2025-01-01") %>%
ggplot(aes(x=Año, y=Valor, fill=Pais))+geom_bar(stat="identity", alpha=0.6)+
theme_classic()+
scale_x_date(date_breaks = "3 years",
date_labels = "%Y")+
scale_y_continuous(labels=label_number())+
labs(title="Gráfica 1. Destino de las exportaciones mexicanas \nMillones de dólares",
caption= "Fuente: Elaboración propia con base en datos del SIE, Banxico.",
y=" ",x="")+
scale_fill_manual(values = c("Canadá"="red",
"Estados Unidos"="dodgerblue",
"China" = "gold",
"Otros paises"="green3"))+
theme(legend.position = "bottom",
legend.title = element_blank(),
panel.grid.major.y = element_line(),
panel.grid.minor.y = element_line(),
axis.text.x = element_text(size=10),
axis.text.y = element_text(size=10),
legend.text = element_text(size=10),
plot.title = element_text(size=12),
axis.line.y=element_line(color="azure4"),
axis.line.x = element_line(color="azure4"),
axis.title.y=element_text(size=10))
ggplotly(gx) %>%
layout(
legend = list(
x = 0.5, # Posición horizontal (0: izquierda, 1: derecha)
y = -0.2, # Posición vertical (0: abajo, 1: arriba)
xanchor = "center", # Anclar al centro
orientation = "h" # Cambiar a orientación horizontal
)
)
gm <- m_l%>% filter(Año<"2025-01-01") %>%
ggplot(aes(x=Año, y=Valor, fill=Pais))+geom_bar(stat="identity", alpha=0.6)+
theme_classic()+
scale_x_date(date_breaks = "3 years",
date_labels = "%Y")+
scale_y_continuous(labels=label_number())+
labs(title="Gráfica 2. Procedencia de las importaciones mexicanas \nMillones de dólares",
caption= "Fuente: Elaboración propia con base en datos del SIE, Banxico.",
y="",x="")+
scale_fill_manual(values = c("Canadá"="red",
"Estados Unidos"="dodgerblue",
"China" = "gold",
"Otros paises"="green3"))+
theme(legend.title = element_blank(),
panel.grid.major.y = element_line(),
panel.grid.minor.y = element_line(),
axis.text.x = element_text(size=10),
axis.text.y = element_text(size=10),
legend.text = element_text(size=10),
plot.title = element_text(size=12),
axis.line.y=element_line(color="azure4"),
axis.line.x = element_line(color="azure4"),
axis.title.y=element_text(size=10))
ggplotly(gm) %>%
layout(
legend = list(x = 0.5,y = -0.2,xanchor = "center", orientation = "h")
)
df1 <- df %>% mutate(total = (total_x-total_m), canada=(canada_x-canada_m),
est_uni=(est_uni_x-est_uni_m), china=(china_x-china_m)) %>%
select(Año, total, canada, est_uni, china)%>% filter(Año<"2025-01-01")
#====== Formato largo:
df1_l <- df1 %>% pivot_longer(cols= c(total, china, est_uni, canada),
values_to = "Valor", names_to = "Paises")
df1_l <- df1_l %>% mutate(Pais = case_when(Paises== "total"~ "Total",
Paises == "est_uni"~ "Estados Unidos",
Paises == "canada" ~ "Canadá",
TRUE ~ "China"))
gp <- ggplot(df1_l)+geom_line(aes(x=Año, y=Valor,color=Pais),linewidth=1, alpha=0.7)+
geom_hline(yintercept = 0, linetype = "dashed")+
theme_classic()+scale_x_date(date_breaks = "3 years",
date_labels = "%Y")+
labs(title = "Gráfica 3. Superávit y Déficit comercial de México con los países seleccionados \nMillones de dólares",
caption= "Fuente: Elaboración propia con base en datos del SIE, Banxico.",
x="",y="")+
scale_y_continuous(labels=label_number())+
scale_color_manual(values = c("Canadá"="red",
"Estados Unidos"="dodgerblue",
"China" = "gold",
"Otros paises"="green3",
"Total"= "black"))+
theme(legend.position = c(0.15,0.8),
legend.title = element_blank(),
axis.text.x = element_text(size=10),
axis.text.y = element_text(size=10),
legend.text = element_text(size=10),
plot.title = element_text(size=12),
axis.line.y=element_line(color="azure4"),
axis.line.x = element_line(color="azure4"),
plot.caption = element_text(hjust=0))
ggplotly(gp) %>%
layout(
legend = list(x = 0.5,y = -0.2,xanchor = "center", orientation = "h")
)