cover image
< Inicio
Web

Consulta del World Factbook con GraphQL

El World Factbook del gobierno de Estados Unidos contiene una plétora de datos de todos los países del mundo. Hasta ahora no era fácil consultar y visualizar los datos contenidos. El proyecto de código abierto chi-country-facts es una API GraphQL y una GUI del World Factbook. Me gustaría presentarlo en este artículo.

World Factbook

El World Factbook es una colección de datos sobre todos los países del mundo. Lo publica el gobierno de EE.UU. y, por tanto, tiene un sesgo estadounidense. Pero contiene una plétora de datos homogeneizados que facilitan la comparación global de los países. Por lo tanto, se utiliza como base de datos para el proyecto chi-country-facts.

Chi-country-facts

Chi-country-facts se basa en el proyecto factbook.json de Gerald Bauer que analiza el sitio web publicado del World Factbook y lo ofrece como datos fácilmente utilizables en el formato JSON.

stack of chi-country-facts

Chi-country-facts consiste en un cargador que importa los datos JSON de los países en una base de datos Mongo. Integra el servidor Apollo GraphQL y también contiene una sencilla interfaz gráfica para enviar consultas GraphQL (Apollo Sandbox), como se puede ver en la siguiente captura de pantalla:

screenshot chi-country-facts

Otras posibilidades de uso de chi-country-facts es construir una aplicación personalizada sobre él y consultar los datos a través de la API GraphQL. También se puede consultar directamente la base de datos Mongo. Hay controladores en muchos lenguajes de programación disponibles. Pero, ¿cómo instalar la aplicación y utilizarla en tu propio sistema?

Instalación

Un requisito previo para instalar fácilmente chi-country-facts es que tengas Docker en tu sistema. Como chi-country-facts publica una imagen en Docker Hub, puedes ejecutarlo junto con una base de datos Mongo utilizando el siguiente archivo docker compose:

docker-compose.yml

version: '3'
services:
  app:
    image: tderflinger/chi-country-facts:0.3.0
    ports:
      - "4000:4000"
    depends_on:
      - db
    environment:
      - MONGO_URL=mongodb://db:27017/CountryFacts
  db:
    image: mongo:latest
    volumes:
      - mongodb_data:/data/db

volumes:
  mongodb_data: 

Nota, adapta el número de versión de la imagen a la última versión. Puedes encontrar esta información en Docker Hub. Una vez que tengas el docker-compose.yml en tu sistema de archivos, ejecútalo con:

docker compose up 

A continuación, puedes navegar a http://localhost:4000 y puedes especificar las consultas GraphQL en una interfaz fácil de usar.

Consultas GraphQL

Una vez que estés en el sandbox de Apollo GraphQL, puedes especificar las consultas GraphQL en el editor principal. Si no desea introducir manualmente las consultas, puede hacer clic fácilmente en los elementos que desea consultar en el lado izquierdo. Cuando haya terminado de especificar su consulta, puede hacer clic en el botón "Ejecutar" y en la parte derecha aparecerán los resultados. Una consulta válida sería, por ejemplo, la siguiente:

query WorldFactsQuery {
  country {
    name
    economy {
      agriculturalProducts
      budgetRevenues
    }
    geography {
      areaLand
      mapReferences
    }
  }
}

El atributo mapReferences es el continente (por ejemplo, África, Europa, etc.). Otros atributos suelen estar normalizados, por ejemplo, el atributo budgetRevenues es la cantidad en USD. Cuando ejecutes la consulta deberías ver la respuesta en la parte derecha de la pantalla. Puede cambiar entre la vista JSON y la vista de tabla.

El siguiente paso es exportar los resultados para su posterior procesamiento

Exportar Resultados

En la parte superior del panel Response tiene la opción de exportar los datos de los resultados como CSV o JSON. Ambos son excelentes formatos para su posterior procesamiento. En nuestro caso preferimos CSV porque una de nuestras herramientas favoritas de análisis de datos lo soporta con facilidad.

Análisis de Datos

Existe una plétora de herramientas para analizar datos en formato CSV. Una herramienta popular de código abierto es Pandas. Se puede instalar en la mayoría de los sistemas y utilizarla con el lenguaje de programación Python.

Visualización de datos

Utilizando Pandas también se puede hacer algo de visualización de datos, por ejemplo en Matplotlib. Hay muchos tutoriales para Pandas y Matplotlib en la web. Una gran manera de hacer visualizaciones interactivas en la web es crear diagramas con D3.js. D3.js es una biblioteca de JavaScript que facilita la creación de diagramas interactivos de alto nivel, como gráficos de barras, gráficos circulares, mapas de árbol y muchos otros tipos. Los diagramas de la página Visual World Facts se crearon con D3.js. Visual World Facts es un sitio web creado a partir de chi-country-facts.

Allí utilicé los datos que consulté y construí mapas interactivos que muestran interesantes relaciones entre los países del mundo. Compruébalo si estás interesado.

Conclusión

En la Internet de hoy en día existen muchas grandes fuentes abiertas de datos sobre el mundo. Es importante mantener la curiosidad. Con las herramientas que he desarrollado, espero que puedas obtener nuevos conocimientos sobre la riqueza de datos más fácilmente.

Referencias

Publicado el

21 jun. 2024


Creative Commons License

Este trabajo está licenciado bajo una Creative Commons Attribution 4.0 International License.
Thomas Derflinger

Escrito por Thomas Derflinger

Soy un empresario visionario y desarrollador de software. En este blog escribo principalmente sobre programación web y temas relacionados como el IoT.