Quiero hacer lo mismo que hiciste en Python🐍 pero con R®: la API del banco de indicadores del INEGI

Claudio Daniel Pacheco Castro
tacosdedatos
Published in
4 min readSep 29, 2021

Hace un par de entradas hice un tutorial para trabajar con la API del Directorio Estadístico Nacional de Unidades Económicas (DENUE) del INEGI.

Este tutorial lo hice utilizando Python y algunas personas me dijeron que por qué no hacía lo mismo pero usando R. Y bueno, como aquí le damos gusto a la banda, esta entrada será de eso.

Tú, la misma de ayer.

Respecto al tutorial de Python, haremos un pequeño cambio: en lugar de la API del DENUE, usaremos la del Banco de Indicadores📊📈:

A diferencia de la del DENUE que solo tiene establecimientos, esta API cuenta con información más heterogénea:

Lo que nos ofrece la API del Banco de Indicadores

En este tutorial usaré datos de “Hogares y Vivienda”,🏡 que es una estadística que conozco.

Es importante mencionar que en la página del INEGI viene un ejemplo de una consulta a la API con R:

Ejemplo de consulta a la API usando R

Está cool pero como no somos fans del Base R, pues lo haremos usando Tidyverse😋

Comienzo por definir las librerías que utilizaré:

#Api INEGI. Banco de Indicadores##Paquetería necesaria
if(!require('pacman')) install.packages('pacman')
pacman::p_load(tidyverse, httr, jsonlite, plotly)

Posteriormente, copio la URL de donde obtendré los datos de las viviendas particulares habitadas, incorporo mi KEY y genero la respuesta a la API:

#URl con API KEYkey="tu_llave"
url = paste0("https://www.inegi.org.mx/app/api/indicadores/desarrolladores/jsonxml/INDICATOR/1003000001/es/0700/false/BISE/2.0/",
key,"?type=json")
#Respuesta
res=GET(url)

Ahora sí, hacemos una pipe un poquito larga😁 en donde pasamos la respuesta a JSON, extraemos los elementos donde vienen los datos, transformamos a dataframe, limpiamos un poco, renombramos y transformamos:

#Obtenemos la respuesta de la API y la pasamos a JSON
vivienda <-content(res, as = 'text')%>%
fromJSON()%>%
#Se extrae elemento "Series"
pluck("Series")%>%
#Se extraen el elemento "OBSERVATIONS" que es aquel que contiene los datos
pluck("OBSERVATIONS")%>%
#Se transforma a dataframe y se limpian los nombres
as.data.frame()%>%
janitor::clean_names()%>%
#Se seleccionan las variables requeridas
select(time_period, obs_value)%>%
#Se transforman a numérico y renombran
mutate_all(as.numeric)%>%
rename(year=1,
vivi=2
)%>%
#Dato de vivienda en millones
mutate(vivi=vivi/1000000)

Checa que la función pluck, que forma parte del Tidyverse, ayuda a extraer los elementos del JSON y nos facilita la tarea para transformar estas extracciones en una dataframe. Aquí puedes encontrar más información de esta función:

El resultado es una dataframe de este tipo:

El resultado de la Pipeline😊

Ahora, procedo a visualizar. Para esto, primero generaré una gráfica de barras básica con ggplot2:

#Gráfico de barras plano con ggplot2
g1<-
ggplot(vivienda, aes(year, vivi)) +
geom_col(fill="#285C4D")+
theme_minimal()+
theme(legend.title = element_blank(),
axis.text.x = element_text(angle = 90, vjust = 0.5))

El resultado de este pedacito de código es la siguiente gráfica media pelona:

Visualización básica

¿Y por qué hice esto? Ya que usaré esta visualización que, aunque está pelona no se ve tan mal, como base para generar un gráfico en Plotly. El código para esto es el siguiente:

##Gráfico plano a plotly
grafi<-ggplotly(g1,width = 900, height = 500)%>%
layout(title=list(text="<b>Viviendas particulares habitadas en Mexico</b><br><i>1990-2020</i>",
x = 0,
font=list(family = "Montserrat",
size = 20,
color = 'black')),
xaxis = list(title = "Años"),
yaxis = list(title = "Viviendas particulares habitadas (millones)",
tickformat=".1f%"
),
dragmode="pan",
annotations =
list(x = 0, y = 0, text = "Fuente: @claudiodanielpc con información de INEGI.",
showarrow = F, xref='paper', yref='paper',
xanchor='left', yanchor='auto', xshift=0, yshift=0,
font=list(size=8, color="black")))

La visualización ya quedó en Plotly y se ve muy bien:

Visualización en Plotly

Y ahora el bonus: Si sigues las entradas que hago recordarás que generé un gráfico en Plotly que subí a una cuenta de Chart Studio pero fue en Python.

Si no la viste, te dejo la liga al artículo:

Ya después de este anuncio parroquial, quiero decirte que esta gráfica de viviendas que acabo de generar puedo guardarla igual en la cuenta de Chart Studio. Para esto, debes ingresar lo siguiente:

###Credenciales para subir gráfica generada a cuenta de Chart Studio
Sys.setenv("plotly_username"="tu_usuario_chartstudio")
Sys.setenv("plotly_api_key"="tu_llave_chartstudio")
#Guardar en cuenta de Chart Studio
api_create(grafi, "vivparhab",
fileopt = "overwrite"
)

Así, la gráfica queda de esta manera:

Gráfica interactiva🤩

Y como siempre, si llegaste hasta aquí, te dejo la liga al código completo en Github:

Listo, ahora ya tienes una opción más para practicar con APIs 🙂.

Happy coding 😊

--

--