• Publicado: 22 Oct 2015

  • Archivado en:

inegiR

Resumen

inegiR es un paquete diseñado para interactuar con el API del INEGI (Agencia estadísitica de México). El API en cuestión permite bajar datos en JSON o XML, por lo que este proyecto es basicamente un wrapper de los paquetes jsonlite y XML, con algunas transformaciones usando plyr y zoo.

Este paquete usa dos funciones principales:

Las demás funciones funcionan como wrappers para facilitar algunas tareas comunes, como obtener la tasa de inflación anual (inflacion_general()) o calcular la tasa de cambio año contra año (YoY()).

Ejemplo 1: bajar serie de datos


Instalar

La version CRAN (desde Nov-2015):

install.packages(inegiR)
library(inegiR)

Usando devtools también se puede obtener la versión de desarrollo más nueva:

#install.packages("devtools")
library(devtools)
install_github("Eflores89/inegiR")
  #dependiencies: zoo, XML, plyr, jsonlite
library(inegiR)

Bajar datos

A grandes razgos, hay dos maneras de bajar la serie: una forma general y una más corta (si existe una función directa para esa serie).

En el primer caso, el usuario pasa un URL a la función. En el sitio de desarrolladores del INEGI, se pueden consultar estos mismos. También es necesario inscribirte con tu correo, para obtener un token con el cual acceder al servicio.

Guardemos nuestro token imaginario:

token <- "abc123"

Obtengamos la tasa de inflación anual. En el caso mexicano, esto es decir la tasa de cambio de la serie INPC.

Este es el URL correspondiente para el INPC:

urlINPC <- "http://www3.inegi.org.mx/sistemas/api/indicadores/v1//Indicador/216064/00000/es/false/xml/"

Las URL’s en formato JSON también es aceptado en el paquete, solo evita poner el “?callback” que viene en algunos casos en el sitio oficial.

urlINPC2 <- "http://www3.inegi.org.mx/sistemas/api/indicadores/v1//Indicador/216064/00000/es/false/json/"

Obtengamos los datos.

INPC <- serie_inegi(urlINPC, token)

# veamos
tail(INPC)
# Fechas         Valores
# 2014-12-01   116.05900000
# 2015-01-01   115.95400000
# 2015-02-01   116.17400000
# 2015-03-01   116.64700000
# 2015-04-01   116.34500000
# 2015-05-01   115.76400000

El parametro de “metadata” es opcional y nos permite también bajar los datos de la serie tales como unidades, última actualización, etc.

Cuando este parametro está como “TRUE”, la información se escribe como una lista con dos elementos: en el primero el metadata y en el segundo los datos.

INPC_Metadata <- serie_inegi(urlINPC, token, metadata = TRUE)
class(INPC_Metadata)
# [1] "list"

Para obtener estos datos, usar como si fuese lista:

# date of last update
INPC_Metadata$MetaData$UltimaActualizacion
[1] "2015/06/09"

Ya que tenemos la serie, tenemos que calcular la tasa de cambio, que es la inflación. Para esto, usamos la función YoY(), que nos permite calcular tasas de cambio por periodos de comparación. El parametro de lapso indica cada cuantos periodos hacer la comparación (para una serie mensual una tasa anual es = 12).

Inflacion <- YoY(INPC$Valores, 
                 lapso = 12, 
                 decimal=FALSE)

# para ponerlo en un data frame
Inflacion_df <- cbind.data.frame(Fechas = INPC$Fechas, 
                                 Inflacion = Inflacion)

tail(Inflacion_df)
# Fechas        Inflacion
# 2014-12-01    4.081322
# 2015-01-01    3.065642
# 2015-02-01    3.000266
# 2015-03-01    3.137075
# 2015-04-01    3.062327
# 2015-05-01    2.876643

Este método funciona para cualquier URL, pero para algunos indicadores más comunes, el paquete ya tiene algunos atajos incluidos.

Obtengamos la misma serie de inflación usando una de estas funciones:

Inflation_rapido <- inflacion_general(token)
tail(Inflation_rapido)
# Fechas        Inflacion
# 2014-12-01    4.081322
# 2015-01-01    3.065642
# 2015-02-01    3.000266
# 2015-03-01    3.137075
# 2015-04-01    3.062327
# 2015-05-01    2.876643

Ejemplo 2: bajando datos del DENUE

El DENUE es un directorio de negocios en México y es accesible en tiempo real mediante otro API del INEGI.

En ese mismo sitio, debemos obtener otro token para usar este servicio. Lo guardamos también en un objeto:

token_denue <- "abcdef1234"

Para obtener una lista de negocios en un cierto radio alrededor de unas coordenadas, usamos la función primitiva. Por ejemplo, para la macroplaza en Monterrey, guardamos los datos de coordenadas:

latitud_macro<-"25.669194"
longitud_macro<-"-100.309901"

Ahora, obtenemos un data.frame con una lista de negocios a 250 metros de esas coordenadas:

NegociosMacro <- denue_inegi(latitud = latitud_macro, 
                             longitud = longitud_macro, 
                             token)

Observemos primeras columnas y filas…

head(NegociosMacro)[,1:2]
#     id                                       Nombre
# 2918696                   ESTACIONAMIENTO GRAN PLAZA
# 2918698             TEATRO DE LA CIUDAD DE MONTERREY
# 2918723                           CONGRESO DE ESTADO
# 2918793               SECRETARIA DE SALUD DEL ESTADO
# 2974150                           BIBLIOTECA CENTRAL
# 2974215      SOTANO RECURSOS HUMANOS Y ADQUISICIONES

Se puede especificar tanto la distancia como el tipo de negocio. Por ejemplo, en un radio a 1km y solamente los “Restaurantes”:

RestaurantesMacro <- denue_inegi(latitud = latitud_macro, 
                                 longitud = longitud_macro, 
                                 token, 
                                 metros = 1000, 
                                 keyword = "Restaurante")