• Integrantes:
    • Castillo Torres, Omar Sebastian
    • Caza Cancho, Carlos Enrique
    • Chavez Cuzcano, Victor Javier
    • Cruz Lozano, Gianella Alejandra
    • Suero Peqqueña, Eduardo Daniel

1 INTRODUCCIÓN

En este análisis, hemos desarrollado una visualización inspirada en un gráfico diseñado por Tania Shapiro1, disponible en su repositorio de GitHub2. La visualización original se centra en presentar a traves de un gráfico la tendencia del actor Leonardo Dicaprio a salir con chicas cuya edad máxima no sobrepasa los 25 años. Nuestro enfoque basado en un conjunto de datos diferente, nos condicionó a ajustar tanto la estructura como el diseño para reflejar las características únicas de nuestra información.

Nuestro objetivo es mostrar la evolución de los ingresos y gastos del Perú gestionados por los presidentes de la república entre 2014 y 2024, reflejando el impacto económico de eventos clave como la pandemia de COVID-19. Este período trajo implicancias significativas a nivel macroeconómico, afectando tanto a los hogares como a las empresas.

La visualización incluye barras para ingresos, líneas para gastos, y elementos destacados como cambios presidenciales y períodos críticos.

1.1 Contexto económico de la pandemia:

Durante la pandemia, Perú experimentó una de las caídas más significativas del PBI en América Latina, con una contracción del 11,1% en 2020. Esto se debió principalmente a las restricciones sanitarias, la paralización de actividades económicas y la crisis global de demanda y oferta. La caída de ingresos y el aumento de gastos reflejan el esfuerzo del gobierno por financiar programas de alivio económico, como bonos directos para hogares vulnerables y garantías de créditos para empresas. Sin embargo, estos programas fueron insuficientes para frenar el impacto masivo en sectores como construcción, turismo y comercio, que registraron una caída drástica en su actividad.
Fuente de la BCR

Aumento de los gastos públicos:

El gobierno peruano tuvo que realizar un gasto significativo para contrarrestar los efectos de la pandemia, lo que incrementó notablemente los gastos en 2020 y 2021. Entre las principales áreas de aumento de gasto se incluyen:

  • Medidas de apoyo económico: El gobierno implementó varios programas de ayuda directa a los ciudadanos más vulnerables, como bonos y subsidios, lo que aumentó el gasto fiscal. Por ejemplo, el Bono Familiar Habitacional y el Bono Universal.

  • Gastos en salud: Aumento en la inversión en el sector salud para enfrentar la crisis sanitaria. Esto incluyó la compra de equipos médicos, la contratación de personal sanitario y la infraestructura para hospitales temporales.

  • Medidas de reactivación económica: Para evitar mayores caídas en el empleo y la producción, se destinaron recursos a programas como Reactiva Perú, que otorgó créditos garantizados a empresas afectadas por la pandemia.

Disminución de los ingresos:

Por otro lado, los ingresos del gobierno se vieron drásticamente reducidos debido a:

  • Contracción económica: La pandemia obligó a la paralización de sectores clave de la economía como la minería, la manufactura, y especialmente el turismo. Esto redujo la actividad económica general, lo que resultó en menores recaudaciones por impuestos (como el IVA, impuestos sobre la renta, etc.).

  • Reducción de la actividad comercial: Las restricciones sanitarias y el confinamiento impactaron de manera negativa el consumo interno, lo que también afectó la recaudación fiscal. Menos ventas implicaron menos impuestos indirectos (como el impuesto al consumo).

  • Desempleo e informalidad: El desempleo aumentó debido a la crisis, y gran parte de la población en Perú trabaja en el sector informal, donde los impuestos no se recaudan adecuadamente. Esto empeoró la capacidad del Estado para generar ingresos.

Fuente: BCRP Reporte de Inflación
Fuente: MEF Reporte de Ejecución Presupuestal

2 ORGANIZANDO LA DATA

2.1 Explicación de la carga de paquetes y configuración

En este análisis, hemos utilizado la librería pacman para gestionar de manera eficiente la instalación y carga de los paquetes necesarios. El comando p_load verifica si un paquete está instalado; si no, lo instala automáticamente y luego lo carga, lo que facilita el manejo de dependencias.

A continuación, se describen los paquetes utilizados y su propósito:

  • dplyr, tidyr, y tidyverse: Estas herramientas son fundamentales para la manipulación y transformación de datos. Permiten realizar operaciones como filtrar, agrupar, unir y reorganizar datos, así como manejar estructuras complejas de tablas.

  • readxl: Este paquete facilita la importación de datos desde archivos Excel, comúnmente utilizados en análisis económicos y financieros.

  • ggplot2: Proporciona una gramática de gráficos que permite construir visualizaciones claras y personalizables para explorar y comunicar datos.

  • stringr: Incluye funciones específicas para manipular cadenas de texto, como extraer, concatenar o modificar nombres y etiquetas en los datos.

  • ggthemes: Ofrece una amplia gama de temas predefinidos y estilos gráficos inspirados en diseños populares, lo que permite personalizar rápidamente la apariencia de los gráficos.

  • ggimage: Permite incluir imágenes dentro de los gráficos, un recurso clave en este análisis para mostrar fotografías de los presidentes peruanos.

  • knitr y kableExtra: Son herramientas esenciales para la creación de reportes en RMarkdown. Permiten generar tablas estilizadas y bien formateadas, ideales para presentar datos resumidos de manera profesional.

  • gghighlight: Ayuda a resaltar puntos o segmentos específicos en gráficos de ggplot2, facilitando el enfoque en eventos clave, como los años de la pandemia.

Además de los paquetes, hemos aplicado configuraciones globales para mejorar la legibilidad y el formato de los resultados:

  • options(scipen = 999): Desactiva la notación científica para mostrar valores numéricos grandes de forma completa (e.g., 25000 en lugar de 2.5e+04).

  • options(digits = 3): Limita el número de decimales que se muestran en los valores numéricos, garantizando salidas más limpias y comprensibles.

2.2 Transformación inicial de los datos

# Cargando paquetes
library(pacman)
p_load(
  dplyr, 
  readxl, 
  tidyr, 
  ggplot2, 
  stringr, 
  ggthemes, 
  tidyverse, 
  ggimage, 
  sysfonts, 
  gghighlight
)
options(scipen = 999)
options(digits = 3)

Los datos utilizados provienen de archivos CSV que contienen ingresos y gastos mensuales. Se realizaron las siguientes operaciones para preparar la información:

  • Eliminación de filas innecesarias.
  • Renombrado de columnas para mayor claridad.
  • Conversión de valores a formato numérico.
  • Cálculo de promedios anuales para cada variable.
# Tu código completo de procesamiento de datos aquí
ingresos <- read.csv("Mensuales-20241114-214555.csv", header = TRUE, sep = ",")
gastos <- read.csv("Mensuales-20241114-214603.csv", header = TRUE, sep = ",")

# Eliminando la primera fila
ingresos <- ingresos[-1, ]
gastos <- gastos[-1, ]

# Cambiando nombre de las columnas
ingresos %>% 
  rename(ingresos = PN02311FM, mes = X) -> ingresos

gastos %>% 
  rename(gastos = PN02409FM, mes = X) -> gastos

# Convertir columnas a numérico
gastos$gastos <- as.numeric(gastos$gastos)
ingresos$ingresos <- as.numeric(ingresos$ingresos)

# Calcular promedios anuales
ingresos_2014 <- mean(ingresos$ingresos[133:144]) %>% round()
ingresos_2015 <- mean(ingresos$ingresos[145:156]) %>% round()
ingresos_2016 <- mean(ingresos$ingresos[157:168]) %>% round()
ingresos_2017 <- mean(ingresos$ingresos[169:180]) %>% round()
ingresos_2018 <- mean(ingresos$ingresos[181:192]) %>% round()
ingresos_2019 <- mean(ingresos$ingresos[193:204]) %>% round()
ingresos_2020 <- mean(ingresos$ingresos[205:216]) %>% round()
ingresos_2021 <- mean(ingresos$ingresos[217:228]) %>% round()
ingresos_2022 <- mean(ingresos$ingresos[229:240]) %>% round()
ingresos_2023 <- mean(ingresos$ingresos[241:252]) %>% round()
ingresos_2024 <- mean(ingresos$ingresos[253:262]) %>% round()

gastos_2014 <- mean(gastos$gastos[97:108]) %>% round()
gastos_2015 <- mean(gastos$gastos[109:120]) %>% round()
gastos_2016 <- mean(gastos$gastos[121:132]) %>% round()
gastos_2017 <- mean(gastos$gastos[133:144]) %>% round()
gastos_2018 <- mean(gastos$gastos[145:156]) %>% round()
gastos_2019 <- mean(gastos$gastos[157:168]) %>% round()
gastos_2020 <- mean(gastos$gastos[169:180]) %>% round()
gastos_2021 <- mean(gastos$gastos[181:192]) %>% round()
gastos_2022 <- mean(gastos$gastos[193:204]) %>% round()
gastos_2023 <- mean(gastos$gastos[205:216]) %>% round()
gastos_2024 <- mean(gastos$gastos[217:226]) %>% round()

anio <- c(2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024)
gastos <- c(
  gastos_2014, gastos_2015, gastos_2016, gastos_2017, gastos_2018,
  gastos_2019, gastos_2020, gastos_2021, gastos_2022, gastos_2023, gastos_2024
)
ingresos <- c(
  ingresos_2014, ingresos_2015, ingresos_2016, ingresos_2017, ingresos_2018,
  ingresos_2019, ingresos_2020, ingresos_2021, ingresos_2022, ingresos_2023, ingresos_2024
)

df <- data.frame(
  anio, 
  gastos, 
  ingresos
)

La siguiente tabla muestra los promedios anuales de ingresos y gastos para cada año analizado (2014-2024), calculados a partir de los datos originales:

# Mostrar únicamente el data frame
df_tabla <- df |> rename( 'Año' = 1,  'Gastos' = 2,  'Ingresos' = 3)
knitr::kable(df_tabla, format = "html", align = "c") 
Año Gastos Ingresos
2014 10315 10674
2015 10824 10258
2016 10899 10211
2017 11652 10531
2018 12434 11880
2019 12865 12653
2020 14795 10656
2021 16183 15323
2022 17210 17260
2023 17466 16485
2024 18012 16969

2.3 Visualización preliminar

A continuación, presentamos un gráfico que visualiza los ingresos y gastos anuales, destacando los períodos críticos como la pandemia de COVID-19. El diseño incluye elementos visuales adicionales, como imágenes de los presidentes en funciones durante cada período:

# Haciendo el gráfico 

# Crear un data frame con los presidentes y rutas de imágenes
presidentes <- c(
  "ollanta.png", "ppk.png", "vizcarra.png",
  "sagasti.png", "castillo.png", "dina.png"
)

ruta_imagenes <- "C:\\Users\\user\\Desktop\\pc2\\images"

imagenes_df <- data.frame(
  x = c(2015, 2017.41, 2019.58, 2021.24, 2022.28, 2023.77),
  y = rep(-4800, 6),  # Ajustar la posición de las imágenes
  imagen = file.path(ruta_imagenes, presidentes)
)

imagenes_df$presidente <- c("Ollanta\nHumala", "Pedro\nKuczynski", 
                            "Martín\nVizcarra","Francisco\nSagasti",
                            "Pedro\nCastillo","Dina\nBoluarte")

# Paletas de colores
pal_leo <- '#FD7600'
pal_gf <- '#24C4C4'
pal_bg <- '#030623'
pal_annotate <- '#B6B6B6'


# Modificar los años a formato abreviado
df$anio_abreviado <- str_sub(df$anio, 3, 4)  # Extrae los últimos dos dígitos del año
df$anio_abreviado <- paste0(df$anio_abreviado, "'")  # Agrega el apóstrofe


# Gráfico  del Ingreso----------------

ggplot(df) + 
  aes(anio) + 
  
  # Panel de fondo
  geom_hline(
    yintercept = seq(0, 25000, 5000), 
    color = "#FFFFFF80", 
    linewidth = 0.05
  ) +
  scale_y_continuous(
    breaks = seq(0, 25000, 5000),  
    labels = seq(0, 25000, 5000)
  ) +
  
  # Líneas horizontales personalizadas
  geom_segment(
    data = data.frame(
      x = rep(2014, 2), 
      xend = rep(2016, 2),
      y = c(20000, 25000), 
      color = c(pal_leo, pal_gf), 
      size = c(1.5, 0.5)
    ),
    mapping = aes(
      x = x,
      xend = xend,
      y = y, 
      yend = y, 
      color = color, 
      linewidth = size
    )
  ) +
  
  # Leyenda
  geom_point(
    mapping = aes(
      x = 2015, 
      y = 25000
    ), 
    shape = 21, 
    color = pal_leo, 
    fill = pal_bg, 
    size = 4
  ) +
  annotate(
    geom = "text", 
    y = 20000, 
    x = 2016.5, 
    label = "Ingresos", 
    color = pal_gf, 
    hjust = 0, 
    size = 4.5
  ) +
  annotate(
    geom = "text", 
    y = 25000, 
    x = 2016.5, 
    label = "Gastos",
    color = pal_leo, 
    hjust = 0, 
    size = 4.5
  ) +
  scale_size_identity() +
  
  # Gráfica de Ingresos
  geom_bar(
    aes(y = ingresos), 
    stat = 'identity', 
    fill = pal_gf
  ) +
  theme(
    panel.background = element_rect(fill = pal_bg, color = NA),
    plot.background = element_rect(fill = pal_bg),
    plot.title = element_text(size = 17, hjust = 0.5),
    text = element_text(color = "white"),
    plot.margin = margin(t = 30, l = 10, r = 10),
    panel.grid = element_blank(),
    axis.text.y = element_text(color = "white"),
    axis.ticks = element_blank(),
    axis.text.x = element_blank(),
    legend.position = 'none'
  ) +
  
  # Flechas y segmentos
  # Segmentos horizontales
  geom_segment(
    data = data.frame(
      inicio = c(2013.5, 2016.63, 2018.3, 2020.96, 2021.63, 2023.04), 
      fin = c(2016.53, 2018.2, 2020.86, 2021.53, 2022.94, 2024.5)
    ),
    aes(
      x = inicio, 
      xend = fin, 
      y = -2300, 
      yend = -2300
    ), 
    color = "#24C4C4", 
    linewidth = 0.6
  ) +
  # Segmentos verticales de inicio
  geom_segment(
    data = data.frame(
      inicio = c(2016.63, 2018.3, 2020.96, 2021.63, 2023.04),
      y = -2300
    ),
    aes(
      x = inicio, 
      xend = inicio, 
      y = y, 
      yend = -1500
    ),
    color = "#24C4C4", 
    linewidth = 0.6
  ) +
  # Segmentos verticales de fin
  geom_segment(
    data = data.frame(
      fin = c(2016.53, 2018.2, 2020.86, 2021.53, 2022.94),
      y = -2300
    ),
    aes(
      x = fin, 
      xend = fin, 
      y = y, 
      yend = -1500
    ),
    color = "#24C4C4", 
    linewidth = 0.6
  ) +
  # Segmentos verticales de enlace
  geom_segment(
    data = data.frame(
      fin = c(2015, 2017.41, 2019.58, 2021.24, 2022.28, 2023.77),
      y = -3500
    ),
    aes(
      x = fin, 
      xend = fin, 
      y = y, 
      yend = -2300
    ),
    color = "#24C4C4", 
    linewidth = 0.6
  ) +
  # Segmentos de continuidad
  geom_segment(
    data = data.frame(
      p_susp = c(2013.45, 2013.4, 2013.35, 2024.55, 2024.6, 2024.65),
      y = -2300
    ),
    aes(
      x = p_susp, 
      xend = p_susp, 
      y = y, 
      yend = -2400
    ),
    color = "#24C4C4", 
    linewidth = 0.6
  ) +
  
  # Eje X
  geom_text(
    data = df, 
    aes(
      x = anio, 
      y = -1200, 
      label = anio_abreviado  # Usa la columna abreviada
    ), 
    color = "white", 
    vjust = -0.5, 
    size = 4.5
  ) +
  theme(legend.position = "none") +
  
  # Imágenes de presidentes
  geom_image(
    data = imagenes_df, 
    aes(
      x = x, 
      y = y, 
      image = imagen
    ), 
    size = 0.09
  ) +
  
  # Nombres de los presidentes debajo de las imágenes
  geom_text(
    data = imagenes_df, 
    aes(
      x = x, 
      y = y - 3000,  # Ajustar la posición vertical
      label = presidente
    ), 
    color = "white", 
    size = 4.5, 
    hjust = 0.5
  ) +
  # Gráfica de Gastos
  geom_line(aes(y = gastos), color = pal_leo) +
  geom_point(
    aes(y = gastos), 
    shape = 21, 
    color = pal_leo, 
    fill = pal_bg, 
    size = 4
  ) +
  scale_x_continuous(
    breaks = seq(2014, 2024, 1),
  ) +
  labs(
    title = '',
    x = '',
    y = ''
  ) +  
  #Contando una historia
  gghighlight(
    anio %in% c(2020, 2021, 2022),
    use_direct_label = FALSE,
    unhighlighted_params = list(color = "grey50")
  ) +
  annotate(geom="text", 
           label="Pandemia covid-19", 
           x=2021, 
           y=28000, 
           color='white'
           ) +
  #Preatentivo sobre el tiempo de la pandemia de la covid-19
  geom_segment(
    data = data.frame(
      rango = c(2019.55, 2022.45),
      y = 0
    ),
    aes(
      x = rango, 
      xend = rango, 
      y = y, 
      yend = 28000
    ),
    color = "white", 
    linewidth  = 0.1,
    linetype = "dashed" 
  )

2.4 Elementos destacados

El gráfico incluye:

  • Imágenes de presidentes: Representan los cambios de gobierno durante el período analizado.

  • Anotaciones: Señalan eventos significativos, como la pandemia de COVID-19.

  • Diferenciación visual: Barras azules para ingresos, línea naranja para gastos.


  1. Tania Shapiro es una experta en ciencia de datos y visualización que ha ganado reconocimiento por sus contribuciones al análisis de datos y la comunicación visual efectiva. Es autora de múltiples proyectos en GitHub, donde comparte códigos, tutoriales y ejemplos de gráficos avanzados realizados con herramientas como R y ggplot2.
    ↩︎

  2. GitHub es una plataforma de desarrollo colaborativo y control de versiones basada en la web, que permite a los desarrolladores almacenar, gestionar y compartir sus proyectos de software.↩︎