• Integrantes:
    • Castillo Torres, Omar Sebastian
    • 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.

Hemos extraido datos de los Ingresos y Gastos del BCRP3 gestionados por los diferentes presidentes de la república a lo largo de los años (2014-2024).

Contexto económico de la pandemia:

Durante la pandemia de COVID-19, Perú registró una caída del 11,1% en su PBI en 2020, una de las más severas en América Latina. Esto se debió a las restricciones sanitarias y la paralización de actividades económicas clave.

El gobierno implementó programas de alivio y estímulo económico que incrementaron significativamente el gasto público, mientras que los ingresos fiscales se redujeron por la contracción económica. Sectores como el turismo, la construcción y el comercio fueron especialmente afectados, reflejando la magnitud del desafío económico.
Fuente de la BCRP

1. 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.

2. 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 Base de Datos

Los datos extraídos del BCRP estaban en formato sacados mensualmente por año, proseguimos a sacar la media correspondiente por año y se consiguió la siguiente tabla:

# 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
)
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

3 Gráfico Final

El gráfico refleja el impacto económico en Perú desde el 2014 hasta el 2024, con un enfoque en la pandemia de COVID-19. Este periodo, que comenzó en 2020, trajo consigo severas implicancias económicas tanto a nivel macroeconómico como para los hogares y las empresas.

# 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 <- here("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")

# Ruta de la imagen de la leyenda 
leyenda <- data.frame(x = 2015, y = 20000, image = 'leyendaoficial.png')

# 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) +
  # Escala del eje Y
  
  scale_y_continuous(
    breaks = seq(0, 25000, 5000),  
    labels = seq(0, 25000, 5000)
  ) +
  
  # Líneas horizontales personalizadas
  geom_segment(
    data = data.frame(
      x = 2014, 
      xend = 2016,
      y = 25000, 
      color = pal_leo, 
      size = 0.5
    ),
    mapping = aes(
      x = x,
      xend = xend,
      y = y, 
      yend = y, 
      color = color, 
      size = size
    )
  ) +
  
  # Leyenda
  geom_image(data = leyenda, aes(x = x, y = y , image = image),
             size = 0.15) +
  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_markdown(size  = 22, hjust = 0, 
                                  margin = margin(b = 10)),
    plot.subtitle = element_text(size = 15, hjust = 0),
    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'
  ) +
  #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=27000, 
           color='white'
           ) +
  # 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", 
    size = 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", 
    size = 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", 
    size = 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", 
    size = 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", 
    size = 0.6
  ) +
  
  # Eje X
  geom_text(
    data = df, 
    aes(
      x = anio, 
      y = -1200, 
      label = anio_abreviado  # Usa la columna abreviada
    ), 
    color = "white", 
    vjust = -0.15, 
    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.2, 
    hjust = 0.5
  ) +
  # Gráfica de Gastos 
  geom_line(aes(y = gastos), color = pal_leo, size = 0.8) +
  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 = ''
  ) +  
  #Preatentivo sobre el rango de 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 = 27000
    ),
    color = "white", 
    size = 0.1,
    linetype = "dashed" 
  ) +
  #Título y subtítulo de la gráfica
  labs(title =  "<span style='color:#FD7600;'>Crisis</span> y <span style='color:#24C4C4;'>Crecimiento</span> en la economía del Perú durante la pandemia", 
       subtitle = 'Los ingresos aumentan progresivamente durante la pandemia (2020-2022), 
marcando una senda de recuperación.' 
       ) 

3.1 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.↩︎

  3. El Banco Central de Reserva del Perú (BCRP) es la entidad responsable de preservar la estabilidad monetaria en el país. Fundado el 9 de marzo de 1922, el BCRP tiene como principal función regular la emisión de moneda y diseñar políticas para controlar la inflación, promoviendo un entorno económico estable. Entre sus tareas clave están manejar las reservas internacionales, emitir billetes y monedas, y supervisar el sistema financiero para garantizar su liquidez.↩︎