Acceder Datos Abiertos a Través del API de Junar

Publicado el lunes, 28 de marzo de 2016 | último cambio el viernes, 13 de mayo de 2016

Introducción

El API de Junar es la base para varias iniciativas de Datos Abiertos en Latino América y los EEUU. El paquete junr facilita el acceso a estos datos desde R. El objetivo es fomentar el uso de los datos disponibles haciendo el acceso lo mas fácil. Algunos ejemplos de implementaciones son: el Portal de Datos Abiertos del Gobierno de Costa Rica y la Ciudad de Córdoba (Argentina) entre otros. Otros se pueden encontrar en el sitio web de Junar.

El paquete se ha publicado en CRAN y po lo tanto se puede instalar directamente en R usando:

install.packages("junr")

Si prefieres la última versión en desarrollo la puedes encontrar en Github e instalar usando devtools como descrito en la pagina github.com/fvd/junr

Mientras el API de Junar es parte de una plataforma comercial de Junar Inc., el uso de los datos en todas la implementaciones mencionadas arriba no tiene costo para el usuario. Junar fue diseñado para facilitar la apertura de datos y fomentar el uso de datos abiertos. Como usuario necesitas crear un nuevo API-Key para cada colección de conjuntos de datos que te interesan, pero esto no tiene costo.

Hojear datos

Como ejemplo vamos a usar los datos de la casa presidencial de Costa Rica. Lo primero es ir al sitio correspondiente para encontrar el URL base (base_url) y obtener un API Key para obtener acceso al API de Junar en la página de Datos Abiertos Costa Rica.

library(junr)
url_base <- "http://api.datosabiertos.presidencia.go.cr/api/v2/datastreams/"
api_key <- "0bd55e858409eefabc629b28b2e7916361ef20ff"

Miremos primero cuales datos hay disponibles en este URL (hojearlos).

get_index(url_base, api_key)

No mostramos los resultados aquí porque el indice es la lista completa con todos los meta-datos incluidos como una hoja de datos (data frame) en R.

Para tener solo una lista de los GUID la instrucción es:

list_guid(url_base, api_key)
##  [1] "EJECU-DE-PRESU-DE-INSTI"    "DESCR-DE-ABREV-DE-LAS"     
##  [3] "DATOS-CORRE-AL-PAGO-32327"  "DATOS-CORRE-AL-PAGO-DE"    
##  [5] "EJECU-DE-PRESU-DE-50724"    "VISTA"                     
##  [7] "INFOR-DE-HORAS-EXTRA-7"     "INFOR-DE-HORAS-EXTRA-01"   
##  [9] "INFOR-DE-HORAS-EXTRA-67320" "PLANI-DE-SALAR-PRESI-DE"   
## [11] "PLANI-DE-SALAR-MINIS-65188" "LICIT-ADJUD-POR-LAS-81483" 
## [13] "LICIT-ADJUD-DE-LAS-INSTI"   "LICIT-ADJUD-POR-LAS-INSTI" 
## [15] "LICIT-ADJUD-POR-LOS-MINIS"  "PLANI-DEL-MINIS"           
## [17] "COMPR-PUBLI-DE-PRESI"       "COMPR-PUBLI-DEL-MINIS"

Y solo un listado de los títulos.

list_titles(url_base, api_key)
##  [1] "Ejecución de presupuesto de Instituciones para el 2015"                          
##  [2] "Descripción de abreviaturas de las ejecuciones "                                 
##  [3] "Datos correspondientes al pago de planilla del Ministerio"                       
##  [4] "Presidencia de la República"                                                     
##  [5] "Ejecución de presupuesto de Instituciones para el 2014"                          
##  [6] "Informe de Horas Extra: 01 de enero 2016 al 30 de abril 2016"                    
##  [7] "Informe de Horas Extra: 7 de mayo 2014 al 31 de diciembre 2014."                 
##  [8] "Informe de Horas Extra: 01 de enero 2015 al 31 de diciembre de 2015"             
##  [9] "Informe de Horas Extra: 01 de enero 2015 al 31 de diciembre de 2015"             
## [10] "Abril 2016: Planilla de Salarios Presidencia de la República"                    
## [11] "Abril 2016: Planilla de salarios: Ministerio de la Presidencia"                  
## [12] "Licitaciones adjudicadas por las Instituciones Públicas según tipo de trámite"   
## [13] "Licitaciones Adjudicadas de las Instituciones Públicas para el período 2014-2015"
## [14] "Licitaciones adjudicadas por las Instituciones Públicas según año"               
## [15] "Licitaciones adjudicadas por los Ministerios"                                    
## [16] "Ministerio de la Presidencia"                                                    
## [17] "Compras públicas de Presidencia"                                                 
## [18] "Compras públicas del Ministerio de la Presidencia"

Tanto list_guid() como list_titles() fueron escritos para hacernos la vida mas fácil ya que los resultados tienden a ajustarse a una ventana de consola, lo cual lo hace mas fácil leerlos. Ayudan para tener una sobrevista rápida de los datos que hay disponibles.

Bajar datos a R

Necesitas conocer el Identificador Global Único (GUID) de los datos que son de tu interés para poder bajar los datos a tu sesión de R. Puedes buscar el GUID en la página web. Por ejemplo para en la pagina de compras publicas del sitio de Datos Abiertos de Costa Rica hay una tabla con el titulo "Compras Públicas del Ministerio de la Presidencia". En el menu debajo de la tabla existe la opción "obtener GUID". Esta última abre una ventana con el GUID "COMPR-PUBLI-DEL-MINIS" que vamos a usar aquí abajo.

guid_datos <- "COMPR-PUBLI-DEL-MINIS"
datos_compras <- get_data(url_base, api_key, guid_datos)

Con View(datos_compras) podrás comprobar que los datos han sido bajado desde la plataforma Junar y han sido convertidos a una hoja de datos (data frame) en R (mira mas abajo para convertir datos de divisas a números).

Observa que no necesitamos ir a la interfaz para buscar los GUID de los conjuntos de datos que nos interesan. Con la función list_guid() como la usamos arriba obtuvimos la misma información.

datos_disponibles <- list_guid(url_base, api_key)
datos_disponibles[3]
## [1] "DESCR-DE-ABREV-DE-LAS"

Obtenemos el GUID que queremos indicando que es el tercero en la lista (mira la lista completa mas arriba). Y el mismo índice se puede usar en una lista de los títulos completos que podemos crear con la función list_titles().

Determinar la cantidad de datos disponibles

En las plataformas que corren en Junar se encuentran muchos datos que no son mas que tablas (datos ya trabajados y resumidos). Por eso es útil poder ver de una vez cuantos filas hay detrás de cada GUID en el URL disponible.

En junr lo puedes hacer rápidamente usando la función get_dimensions para obtener una tabla con todos los GUID y las dimensiones de los datos:

get_dimensions(url_base, api_key)
##                          GUID   NROW NCOL    DIM
## 2       COMPR-PUBLI-DEL-MINIS    324    4   1296
## 21    EJECU-DE-PRESU-DE-INSTI   8867   39 345813
## 3       DESCR-DE-ABREV-DE-LAS     27    4    108
## 4   DATOS-CORRE-AL-PAGO-32327   5561   10  55610
## 5      DATOS-CORRE-AL-PAGO-DE   2472   10  24720
## 6     EJECU-DE-PRESU-DE-50724   9249   40 369960
## 7                       VISTA    386    8   3088
## 8      INFOR-DE-HORAS-EXTRA-7    182    7   1274
## 9     INFOR-DE-HORAS-EXTRA-01    386    7   2702
## 10 INFOR-DE-HORAS-EXTRA-67320    386    7   2702
## 11    PLANI-DE-SALAR-PRESI-DE   3296   13  42848
## 12 PLANI-DE-SALAR-MINIS-65188   6070   14  84980
## 13  LICIT-ADJUD-POR-LAS-81483      7    2     14
## 14   LICIT-ADJUD-DE-LAS-INSTI 103471    7 724297
## 15  LICIT-ADJUD-POR-LAS-INSTI      3    2      6
## 16  LICIT-ADJUD-POR-LOS-MINIS     10    2     20
## 17            PLANI-DEL-MINIS   5561    8  44488
## 18       COMPR-PUBLI-DE-PRESI    427    4   1708

Limpiar valores de divisas

Por lo menos en los datos ejemplo arriba, pero posiblemente en mas implementaciones de Junar, hay que limpiar todos los datos que corresponden a divisas. En nuestro caso hay que buscar todos los símbolos de la divisa (Colon Costarricense), y todas las comas ya que estas hacen que para R son valores de Texto y no números.

Hay un para de utilidades para hacerlo clean_currency y get_currency_symbol. Por ejemplo:

datos_con_divisas <- get_data(url_base, api_key, "LICIT-ADJUD-POR-LOS-MINIS")
datos_con_divisas$`Monto Adjudicado` <- clean_currency(datos_con_divisas$`Monto Adjudicado`)

Agradecimientos y Notas