La api de BANXICO llamada “siebanxicor” no es nada mas que el sistema de informacion economica, publicada en 2018 y propiedad de DGIE - Banco de México, con la cual podremos acceder de forma rapida y a tiempo real a nuestros indicadores de interes.
LIBRERIAS
library(siebanxicor) # API DE BANXICO
library(tidyverse) # MANIPULACION DE DATOS
library(lubridate) # FECHA Y HORA
library(ggplot2) # GRAFICOS
library(plotly) # GRAFICO DINAMICO
library(bookdown) # INDICE FLOTANTE
Ingresamos nuestro token que nos servira para poder accesar a los indicadores
setToken('dcaaadd6d87d5dbe4b8a76e47df134d861cee3e0c6df85283a32643572e66bb5')
Identificamos la serie economica de proporcionada por el catalogo de indicadores.
donde :
SG29 = Gastos Presupuestales del Sector Público Clasificación Económica Gasto presupuestario Gasto programable ; de periodicidad mensial en millones de pesos
SG9 = Ingresos y Gastos Presupuestales del Gobierno Federal Medición por Ingreso-Gasto, Flujos de Caja Ingreso total ; de periodicidad mensial en millones de pesos
idSeries <- c("SG29", "SG9")
para poder ver la informaicon de nuestras series de tiempo podemos acceder a los metadatos que daran mas detalles sobre el indice.
metadata <- getSeriesMetadata(idSeries)
metadata
## idSerie
## 1 SG9
## 2 SG29
## title
## 1 Revenues and Expenditures of the Federal Government Accumulated monthly figures Total Revenues
## 2 Public Sector Budgetary Expenditures Accumulated monthly figures Budgetary Expenditures Programmable Expenditure
## startDate endDate frequency dataType unit
## 1 1977-01-01 2024-01-01 Monthly Accumulated flows Millions of Pesos
## 2 1977-01-01 2024-01-01 Monthly Accumulated flows Millions of Pesos
Usamos la fecha de hoy y un punto en el pasado para analizar nuestros resultados
hoy <- Sys.Date()
series <- getSeriesData(idSeries, '2000-01-01', hoy)
hacemos nuestro data frame y ocupamos na.omit para saltarnos los resultados que no tinen datos y asi poder graficar
df = as.data.frame(series)
df <- na.omit(df)
head(df)
## SG29.date SG29.value SG9.date SG9.value
## 1 2000-01-01 60942.5 2000-01-01 88732.2
## 2 2000-02-01 114182.6 2000-02-01 148705.1
## 3 2000-03-01 167687.1 2000-03-01 223882.8
## 4 2000-04-01 227775.5 2000-04-01 300131.5
## 5 2000-05-01 289353.8 2000-05-01 363623.1
## 6 2000-06-01 353551.5 2000-06-01 426376.1
limpieza del data frame, primero veremos que en la serie tenemos una columna con los mismos valores que es la de la fecha (SG29.date y SG9.date)
#eliminamos la columna 3 porque era la que nos estorbaba
df <- df[ ,-c(3)]
str(df) # vemos propiedades
## 'data.frame': 289 obs. of 3 variables:
## $ SG29.date : Date, format: "2000-01-01" "2000-02-01" ...
## $ SG29.value: num 60943 114183 167687 227776 289354 ...
## $ SG9.value : num 88732 148705 223883 300132 363623 ...
head(df)
## SG29.date SG29.value SG9.value
## 1 2000-01-01 60942.5 88732.2
## 2 2000-02-01 114182.6 148705.1
## 3 2000-03-01 167687.1 223882.8
## 4 2000-04-01 227775.5 300131.5
## 5 2000-05-01 289353.8 363623.1
## 6 2000-06-01 353551.5 426376.1
Hacemos nuestro grafico para poder ver el comportamiento de nuestras series de tiempo
g = ggplot(df, aes(x = SG29.date)) +
geom_line(aes(y = SG29.value, color = "gasto")) +
geom_line(aes(y = SG9.value, color = "ingreso")) +
labs(x = "Fecha", y = "Millones de Pesos", color = "Series") +
ggtitle("Ingreso vs Gasto 2000-2023") +
theme_minimal() +
scale_y_continuous(labels = scales::comma) # Esto ajusta el formato de los números en el eje y
#grafico dinamico
ggplotly(g)
Elaborado por FERNANDO LAZCANO CÁRDENAS
fuentes :
https://cran.r-project.org/web/packages/siebanxicor/siebanxicor.pdf