library(tidyverse)
library(here)
library(forcats)
Visualizaciones base datos comercio, inversion en Mexico y empleo IMMEX
Exportaciones totales
El paquete here
que fue cargado en el paso anterior nos ahorra dolores de cabeza al especificar el “path” en donde están los archvivos que necesitemos: simplemente pasamos el nombre de la carpeta y del archivo que nos interesan como argumentos a here
, y esta determina el “path” y lo pasa a load()
.
load(here("Data", "MexXMtotpais.RData"))
El nombre del data frame es un poco extenso, lo cual es conveniente para recordar su contenido, pero inconveniente a la hora de escribir código, así que creamos una base de datos temporal con un nombre mucho más corto. Para evitar ocupar espacio de memoria con dos bases de datos idénticas, eliminamos MexXMtotpais una vez que hemos creado xm
<- MexXMtotpais
xm names(xm)
[1] "Año" "Pais" "Importaciones" "Exportaciones"
rm(MexXMtotpais)
Los nombres de variables de dos palabras requieren de manejo especial en R, así que para simplificar, reducimos el nombre de Estados Unidos a USA. Nótese que en la línea de código que sigue la variable País se ha escrito entre comillas. Ello es necesario debido al uso de la tilde, que puede confundir a R.
Un detalle importante. El título y subtítulo del gráfico están definidos en la parte superior, que son instrucciones para Quarto a la hora de reproducir (render) el documento, pero no aparecen en la consola cuando el código se ejecuta dentro de Quarto.
A USA
1993-2024
Código
|>
xm filter(Pais == "USA", Año < 2025) |>
ggplot(aes(Año, Exportaciones/1000))+
theme_bw()+
scale_color_brewer(palette = "Dark2")+
scale_x_continuous(breaks = seq(from =1993, to = 2024, by = 2)) +
geom_line(linewidth = 1, color = "steelblue4")+
geom_smooth(color = "steelblue1",
fill = "steelblue1", alpha = 0.4)+
labs(
x = "",
y = "",
caption = "J.Cornick con base en Data Mexico "
)
(En miles de millones de US $)
2015-2024
Código
|>
xm filter(Pais == "USA", Año > 2014 & Año < 2025) |>
ggplot(aes(Año, Exportaciones/1000))+
theme_bw()+
scale_color_brewer(palette = "Dark2")+
scale_x_continuous(breaks = seq(from =2015, to = 2024, by = 1)) +
geom_line(linewidth = 1, color = "steelblue4")+
geom_smooth(color = "steelblue1",
fill = "steelblue1", alpha = 0.4)+
labs(
x = "",
y = "",
caption = "J.Cornick con base en Data Mexico"
+
)theme(legend.position = "bottom")
(En miles de millones de US $)
Otros socios comericales
1993-2024
Código
|>
xm filter(Pais != "USA" & Pais != "Otros", Año < 2025) |>
ggplot(aes(Año, Exportaciones/1000, color = Pais))+
theme_bw()+
scale_color_brewer(palette = "Dark2")+
scale_x_continuous(breaks = seq(from =1993, to = 2024, by = 2)) +
geom_line(linewidth = 1)+
geom_smooth(aes(fill = Pais), alpha = 0.2, linetype = 3)+
labs(
x = "",
y = "",
fill = "",
color = "",
caption = "J.Cornick con base en Data Mexico"
+
)theme(legend.position = "bottom")
(En miles de millones de US $)
2015-2024
Código
|>
xm filter(Pais != "USA" & Pais != "Otros", Año >2014 & Año < 2025) |>
ggplot(aes(Año, Exportaciones/1000, color = Pais))+
theme_bw()+
scale_color_brewer(palette = "Dark2")+
scale_x_continuous(breaks = seq(from =2015, to = 2024, by = 1)) +
geom_line(linewidth = 1)+
geom_smooth(aes(fill = Pais), alpha = 0.2, linetype = 3)+
labs(
x = "",
y = "",
fill = "",
color = "",
caption = "J.Cornick con base de Data Mexico"
+
)theme(legend.position = "bottom")
(En miles de millones de US $)
USA y resto del mundo, proporciones
1993-2024
Código
<- xm |>
xm_percentages filter(Pais %in% c("USA", "Otros")) |>
group_by(Año) |>
mutate(percent_valor = Exportaciones / sum(Exportaciones, na.rm = TRUE)) |>
ungroup()
ggplot(xm_percentages, aes(x = Año, y = percent_valor, fill = Pais)) +
theme_bw() + # Use a clean black-and-white theme
scale_fill_brewer(palette = "Dark2") + # Use the specified color palette for fill
geom_col(position = "stack") + # Stacks the pre-calculated percentages
scale_x_continuous(breaks = seq(from = 1995, to = 2025, by = 5)) + # Display labels every 5 years
scale_y_continuous(
breaks = seq(0, 1, by = 0.1), # Set breaks at 10% increments
labels = scales::percent # Formats the y-axis as percentages
+
) geom_hline(
yintercept = seq(0.1, 0.9, by = 0.1), # Add horizontal lines for each break
color = "white",
linetype = "dashed",
linewidth = 0.5
+
) labs(
x = "",
y = "",
fill = "",
color = "",
caption = "J.Cornick con base de Data Mexico"
+
)theme(legend.position = "bottom")
(Estados Unidos y resto del mundo)
2015-2024
Código
<- xm |>
xm_percentages filter(Pais %in% c("USA", "Otros"), Año >2014 & Año < 2025) |>
group_by(Año) |>
mutate(percent_valor = Exportaciones / sum(Exportaciones, na.rm = TRUE)) |>
ungroup()
ggplot(xm_percentages, aes(x = Año, y = percent_valor, fill = Pais)) +
theme_bw() + # Use a clean black-and-white theme
scale_fill_brewer(palette = "Dark2") + # Use the specified color palette for fill
geom_col(position = "stack") + # Stacks the pre-calculated percentages
scale_x_continuous(breaks = seq(from = 2015, to = 2025, by = 1)) + # Display labels every 5 years
scale_y_continuous(
breaks = seq(0, 1, by = 0.1), # Set breaks at 10% increments
labels = scales::percent # Formats the y-axis as percentages
+
) geom_hline(
yintercept = seq(0.1, 0.9, by = 0.1), # Add horizontal lines for each break
color = "white",
linetype = "dashed",
linewidth = 0.5
+
) labs(
x = "",
y = "",
fill = "",
color = "",
caption = "J.Cornick con base de Data Mexico"
+
) theme(legend.position = "bottom")
(Estados Unidos y resto del mundo)
Importaciones totales
De USA
1993-2024
Código
|>
xm filter(Pais == "USA", Año < 2025) |>
ggplot(aes(Año, Importaciones/1000))+
theme_bw()+
scale_color_brewer(palette = "Dark2")+
scale_x_continuous(breaks = seq(from =1993, to = 2024, by = 2)) +
geom_line(linewidth = 1, color = "steelblue4")+
geom_smooth(color = "steelblue1",
fill = "steelblue1", alpha = 0.2)+
labs(
x = "",
y = "",
caption = "J.Cornick con base en Data Mexico "
)
(En miles de millones de US $)
2015-2024
Código
|>
xm filter(Pais == "USA", Año > 2014 & Año < 2025) |>
ggplot(aes(Año, Importaciones/1000))+
theme_bw()+
scale_color_brewer(palette = "Dark2")+
scale_x_continuous(breaks = seq(from =2015, to = 2024, by = 1)) +
geom_line(linewidth = 1, color = "steelblue4")+
geom_smooth(color = "steelblue1",
fill = "steelblue1", alpha = 0.4)+
labs(
x = "",
y = "",
caption = "J.Cornick con base en Data Mexico"
+
)theme(legend.position = "bottom")
(En miles de millones de US $)
Otros socios comerciales
1993-2024
Código
|>
xm filter(Pais != "USA" & Pais != "Otros", Año < 2025) |>
ggplot(aes(Año, Importaciones/1000, color = Pais))+
theme_bw()+
scale_color_brewer(palette = "Dark2")+
scale_x_continuous(breaks = seq(from =1993, to = 2024, by = 2)) +
geom_line(linewidth = 1)+
geom_smooth(aes(fill = Pais), alpha = 0.2, linetype = 3)+
labs(
x = "",
y = "",
fill = "",
color = "",
caption = "J.Cornick con base en Data Mexico"
+
)theme(legend.position = "bottom")
(En miles de millones de US $)
2015-2024
Código
|>
xm filter(Pais != "USA" & Pais != "Otros", Año >2014 & Año < 2025) |>
ggplot(aes(Año, Exportaciones/1000, color = Pais))+
theme_bw()+
scale_color_brewer(palette = "Dark2")+
scale_x_continuous(breaks = seq(from =2015, to = 2024, by = 1)) +
geom_line(linewidth = 1)+
geom_smooth(aes(fill = Pais), alpha = 0.2, linetype = 3)+
labs(
x = "",
y = "",
fill = "",
color = "",
caption = "J.Cornick con base de Data Mexico"
+
)theme(legend.position = "bottom")
(En miles de millones de US $)
USA y resto del mundo, proporciones
1993-2024
Código
<- xm |>
xm_percentages filter(Pais %in% c("USA", "Otros")) |>
group_by(Año) |>
mutate(percent_valor = Importaciones / sum(Importaciones, na.rm = TRUE)) |>
ungroup()
ggplot(xm_percentages, aes(x = Año, y = percent_valor, fill = Pais)) +
theme_bw() + # Use a clean black-and-white theme
scale_fill_brewer(palette = "Dark2") + # Use the specified color palette for fill
geom_col(position = "stack") + # Stacks the pre-calculated percentages
scale_x_continuous(breaks = seq(from = 1995, to = 2025, by = 5)) + # Display labels every 5 years
scale_y_continuous(
breaks = seq(0, 1, by = 0.1), # Set breaks at 10% increments
labels = scales::percent # Formats the y-axis as percentages
+
) geom_hline(
yintercept = seq(0.1, 0.9, by = 0.1), # Add horizontal lines for each break
color = "white",
linetype = "dashed",
linewidth = 0.5
+
) labs(
x = "",
y = "",
fill = "",
color = "",
caption = "J.Cornick con base de Data Mexico"
+
)theme(legend.position = "bottom")
(Estados Unidos y resto del mundo)
2015-2024
Código
<- xm |>
xm_percentages filter(Pais %in% c("USA", "Otros"), Año >2014 & Año < 2025) |>
group_by(Año) |>
mutate(percent_valor = Importaciones / sum(Importaciones, na.rm = TRUE)) |>
ungroup()
ggplot(xm_percentages, aes(x = Año, y = percent_valor, fill = Pais)) +
theme_bw() + # Use a clean black-and-white theme
scale_fill_brewer(palette = "Dark2") + # Use the specified color palette for fill
geom_col(position = "stack") + # Stacks the pre-calculated percentages
scale_x_continuous(breaks = seq(from = 2015, to = 2025, by = 1)) + # Display labels every 5 years
scale_y_continuous(
breaks = seq(0, 1, by = 0.1), # Set breaks at 10% increments
labels = scales::percent # Formats the y-axis as percentages
+
) geom_hline(
yintercept = seq(0.1, 0.9, by = 0.1), # Add horizontal lines for each break
color = "white",
linetype = "dashed",
linewidth = 0.5
+
) labs(
x = "",
y = "",
fill = "",
color = "",
caption = "J.Cornick con base de Data Mexico"
+
) theme(legend.position = "bottom")
(Estados Unidos y resto del mundo)
Exportaciones por producto
load(here("Data", "MexXMproducto.RData"))
<- MexXMproducto
xm rm(MexXMproducto)
Primero graficamos las exportaciones de todos los capítulos, para darnos una idea de orden de magnitud.
Un detalle técnico que puede ser de interés: como vamos a graficar muchas variables, puede ser difícil identificar cuál etiqueta, en la parte derecha del gráfico, corresponde a cual línea en el cuerpo del gráfico. Para evitar confusiones, es conveniente que las etiquetas en la parte derecha aparezcan en el mismo orden en que aparecen las líneas en el cuerpo del gráfico en la última observación. El código que sigue logra esto. Se han incluido comentarios explicativos por ser la primera vez que se utiliza esta técnica en este documento.
Todos 1993-2024
Código
|>
xm arrange(Trimestre) |>
# Si nuestras observaciones están ordenadas por Trimestre, como es el caso, este paso no es estrictamente necesario. Sin embargo, "mejores prácticas" aconseja incluirlo, para protegernos de la posibilidad de que en algún paso anterior del análisis la base de datos haya sido reordenada con otros criterios.
mutate(Capítulo = fct_reorder(Capítulo, desc(Exportaciones), .fun = last)) |>
# Esta segunda línea asegura que los factores se ordenen según el valor que tienen en la última observación, y con eso logramos que las etiquetas se ordenen con ese mismo criterio
ggplot(aes(Trimestre, Exportaciones/1000, color = Capítulo)) +
theme_bw() + # Use a clean black-and-white theme
scale_fill_brewer(palette = "Dark2") + # Use the specified color palette for fill
scale_x_continuous(
breaks = seq(min(xm$Trimestre), max(xm$Trimestre), by = 2), # Label every year
minor_breaks = seq(min(xm$Trimestre), max(xm$Trimestre), by = 0.25)
+ # Tick mark every trimester
) geom_line(linewidth = .5) +
labs(color = "Capítulo",
caption = "J.Cornick con base en Data México")
(en miles de millones US $)
La escala de los datos sugiere la conveniencia de crear un gráfico para Máquinas, Transporte y Minerales, y otro para las demás variables.
Primero, entonces, graficamos Máquinas, Transporte y Minerales
Máquinas, transporte y minerales 1993-2024
Código
|>
xm filter(Capítulo %in% c("Máquinas", "Transporte", "Minerales")) |>
arrange(Trimestre) |>
mutate(Capítulo = fct_reorder(Capítulo, desc(Exportaciones), .fun = last)) |>
ggplot(aes(Trimestre, Exportaciones/1000, color = Capítulo)) +
theme_bw() +
scale_fill_brewer(palette = "Dark2") +
scale_x_continuous(
breaks = seq(min(xm$Trimestre), max(xm$Trimestre), by = 2),
minor_breaks = seq(min(xm$Trimestre), max(xm$Trimestre), by = 0.25)
+
) geom_line(linewidth = 0.75) +
labs(color = "Capítulo",
caption = "J.Cornick con base en Data México")
(en miles de millones US $)
Máquinas, transporte y minerales 2015-2024
En este gráfico, además de hacer un “zoom” en el periodo más reciente, hay varios detalles que conviene explicar.
- Como queremos que la linda de datos (continua) y la de tendencias (puntos) sean del mismo color, y además queremos evitar que los intervalos de confianza sean de color gris pálido, en ggplot(aes()) definimos tanto “color” como “fill”. Luego, definimos escalas de color tanto para “color” como para “fill”. Finalmente, para evitar que se impriman dos cajas con leyendas a la derecha, una para cada geom_(), añadimos la línea “guides(fill =”none”).
Código
|>
xm filter(Capítulo %in% c("Máquinas", "Transporte", "Minerales")) |>
filter(Trimestre > 2014.75) |>
arrange(Trimestre) |>
mutate(Capítulo = fct_reorder(Capítulo, desc(Exportaciones), .fun = last)) |>
ggplot(aes(Trimestre, Exportaciones/1000, color = Capítulo, fill = Capítulo)) +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
scale_fill_brewer(palette = "Dark2")+
scale_x_continuous(
breaks = seq(min(xm$Trimestre), max(xm$Trimestre), by = 1),
minor_breaks = seq(min(xm$Trimestre), max(xm$Trimestre), by = 0.25)
+
) geom_line(linewidth = 0.75) +
geom_smooth(alpha = 0.2, linetype = 3) +
labs(
color = "Capítulo",
caption = "J.Cornick con base en Data México",
x = "",
y = "Miles de millones, US ")+
guides(fill = "none")
(en miles de millones US $)
Si graficamos ahora todos los demás productos, tenemos un gráfico que todavía contiene demasiada información, incluyendo productos de poca importancia en el total de exportaciones:
Los demás
Código
|>
xm filter(!(Capítulo %in% c("Máquinas", "Transporte", "Minerales"))) |>
arrange(Trimestre) |>
mutate(Capítulo = fct_reorder(Capítulo, desc(Exportaciones), .fun = last)) |>
ggplot(aes(Trimestre, Exportaciones/1000, color = Capítulo)) +
theme_bw() +
scale_fill_brewer(palette = "Dark2") +
scale_x_continuous(
breaks = seq(min(xm$Trimestre), max(xm$Trimestre), by = 2),
minor_breaks = seq(min(xm$Trimestre), max(xm$Trimestre), by = 0.25)
+
) geom_line(linewidth = .75) +
labs(color = "Capítulo",
caption = "J.Cornick con base en Data México")
(en miles de millones US $)
Como último paso, entonces, vamos a crear un gráfico únicamente con los cinco productos más importantes después de Máquinas, Transporte y Minerales, y dejando de lado la categoría “Otros”
Top 5 excluyendo máquinas, transporte, minerales y “otros”
Código
|>
xm filter(Capítulo %in% c("Instrumentos", "Alimentos", "Vegetales", "Rieles", "Plásticos")) |>
arrange(Trimestre) |>
mutate(Capítulo = fct_reorder(Capítulo, desc(Exportaciones), .fun = last)) |>
ggplot(aes(Trimestre, Exportaciones/1000, color = Capítulo)) +
theme_bw() +
scale_fill_brewer(palette = "Dark2") +
scale_x_continuous(
breaks = seq(min(xm$Trimestre), max(xm$Trimestre), by = 2),
minor_breaks = seq(min(xm$Trimestre), max(xm$Trimestre), by = 0.25)
+
) geom_line(linewidth = .75) +
labs(color = "Capítulo",
caption = "J.Cornick con base en Data México")
(en miles de millones US $)
Próximos pasos
Podemos considerar dos pasos adicionales: hacer un “zoom” en el período 2015-2024, y luego seleccionar los capítulos clave para los cuales nos gustaría examinar datos más desagregados, que afortunadamente están disponibles en Mexico Data.
También podríamos considerar si conviene trabajar con datos trimestrales, o si podría ser conveniente usar datos anuales, puesto que la variabilidad estacional no es de interés para nuestros propósitos.