miércoles, 10 de septiembre de 2014

El atractivo mundo de BigQuery y los datos abiertos

Antes de iniciar la descripción de este pequeño trabajo sobre datos abiertos y el poder de BigQuery, **quiero felicitar  a todos los involucrados en el proceso de liberación de datos, ya que el potencial de análisis que le dejan a la comunidad para análisis cruzados de información es invaluable. También a +Felipe Hoffa por su talento y por compartir su conocimiento con la comunidad. 

La idea de este análisis es tomar los datos 



Descargando los datos desde el portal de datos abiertos Presidencia de la Nación Mexico. http://datos.gob.mx

Para este análisis trabajaremos con los datasets de nacimientos del 2008-2013 (6 datasets en promedio csv de 1.3 GB)










Si queremos manipular rápidamente estos conjuntos de datos, lo ideal es usar el poder de Compute Engine y la conexión de estos equipo ultra rápida. 

Entonces desde una VM de Compute, descargo los archivos.






Comando:
wget http://www.dgis.salud.gob.mx/descargas/datosabiertos/sinac_2008.zip

Luego tendremos que utilizar la herramienta BQ para interactuar con BigQuery y hacer la carga de estos datos. Para realizar esta operación debemos utilizar un parámetro de load, pero dentro del formato de recepción no tenemos zip. Así que hacemos la conversión rápida.
  • unzip sinac_2008.zip
  • gzip SINAC_2008.csv
Ahora solo nos queda implementar el comando para hacer el load a BigQuery:

bq load --skip_leading_rows 1 mexico_open_data.sinac_2008 SINAC_2008.csv.gz "ENTIDAD_NACMAD","MUNICIPIO_NACMAD","FECH_NACM","ESTADO_CIVIL","ENTIDAD_RESMAD","MPO_RESMAD","LOC_RESMAD","NUMERO_EMBARAZOS","NACIDOS_MUERTOS","NACIDOS_VIVOS","SOBREVIVIENTES","ANTERIOR_NACIO","VIVE_AUN","ORDEN_NAC","ATENCION_PRENA","TRIMESTR_ATEN","CONSULTAS","SOBREVIVIO_PARTO","DERECHOHABIENCIA",....


Hice un corte del esquema para que no se tan compleja su lectura.




He realizado la carga de los 6 conjuntos de datos y luego los relacioné todos en un solo dataset. sinac_2008_2013

Ahora a divertirnos con las consultas!
Tenemos un conjunto de como 12.6 MM de filas y unos 6.9 GB.
Pregunta inicial:

¿Donde nacen los bebés con mayor talla de México por estado?

SELECT AVG(TALLAH), ENTIDAD_CERTIF
FROM
[mexico_open_data.sinac_2008_2013]
Group by 2
ORDER BY 1 DESC




¿Tu respuesta fue SINALOA? En solo unos segundos personalmente pude conocer mucho más de México.

Ahora les queda todo el poder de los datos en sus manos.. que otras preguntas podemos trabajar con este conjunto de datos?

Importante: Si quieren pueden consultar directamente sobre este conjunto de datos, desde BigQuery para optimizar el tiempo y demostrar que la comunidad en conjunto trabaja mejor!

Espero les sea de utilidad!
Creative Commons License
El atractivo mundo de BigQuery y los datos abiertos is licensed under a Creative Commons Attribution 4.0 International License.
Based on a work at nbortolotti.blogspot.com/2014/09/el-atractivo-mundo-de-bigquery-y-los.html.

viernes, 11 de julio de 2014

Pensando en servicios escalables, Cloud Endpoints

En este ejemplo vamos presentar una estructura inicial que proponga la construcción  de un servicio para poder consumirlo desde diversos ambientes. El caso tradicional, es consumirlo desde escenarios móviles y tomando el modelo arquitectural que propone Google Cloud Endpoints. Vamos a iniciar con simples pasos. Crearemos un servicio que reciba un id y en base a esto el retorno sea una cadena.

Para este ejemplo emplearemos Python en App Engine y aplicaremos conceptos de Google Protocol RPC library.

Lo que buscamos es este mismo mecanismo que muestra la Fig. 1. Utilizaron Google API Explorer? Bueno vamos a trabajar el mismo escenario.

Fig.1 Google APIs explorer
A crear el servicio!

Fig.2 Imports y representación del modelo para el servicio
Como pueden observar en la Fig.2 estamos implementando Google Protocol RPC library. Luego tenemos  la clase Mensaje y el manejo de la colección de mensajes.

Ahora vamos a crear la clase que maneje el servicio y su marcado.

Fig.3 Clase que maneja el servicio.
Compilamos y poner a funcionar el servicio, el formato queda implementado como muestra la Fig.4.
Fig.4 Implementación del servicio
Luego al seleccionar el servicio, tenemos la opción de ingresar los parámetros declarados como muestra la Fig.5.

Fig.5 Utilizando el servicio 

Finalmente el resultado de la operación, con parámetro "1", que no es novedad para ninguno de ustedes ya que conocen las opciones de explorar el código de implementación.

Fig.5 Resultado de la operación
Queda mucho por recorrer en la implementación de este tipo de servicios, como el ambiente de autorización y diversidad en las respuestas. Pero indudablemente este tipo de implementación favorecen notoriamente nuestras arquitecturas.

El código de implementación completo lo pueden encontrar en GitHub. Proyecto Scalable-Service


Creative Commons License
Pensando en servicios escalables, Cloud Endpoints is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
Based on a work at http://nbortolotti.blogspot.com.

miércoles, 2 de julio de 2014

Dashboard-Bigquery, explicación paso a paso del main.py

Luego de la publicación Integrando un panel con soporte escalable de consultas, BigQuery llegaron muchas preguntas y solicitudes sobre el paso a paso del código implementado,  ahora les comparto este análisis sobre la implementación.

Pueden encontrar actualizada una parte de la wiki del proyecto con esta información ampliada aquí. También los invito  a quienes quieran pueden colaborar en el proyecto de github trabajando un fork y demostrar el talento comunitario. Siempre es bienvenido. 

Fig.1 importaciones
Para trabajar la integración con BigQuery es necesario autorizarse mediante OAuth2.0. El siguiente decorador Fig.2, me permite obtener el archivo json con la información de seguridad y su ámbito.


Fig.2 El decorador
Vamos a construir el servicio de integración utilizando apiclient.discovery, en concreto con el método build.
Fig.3 Construcción del servicio de integración con BigQuery
Ahora vamos a trabajar algunas variables del proyecto Fig.4. Esto depende el estilo que proponga el desarrollador, puede variar.

Fig.4  Variables del proyecto
Para trabajar la visualización en el HTML en este proyecto se manejó con Jinja2. Fig.5
Fig.5 Configuración entorno Jinja
Ahora vamos a trabajar sobre el manejador principal de la aplicación. Esta clase lleva el nombre de Panel. Fig.6
Fig. 6 Clase Panel cabecera

Dentro de la clase Panel existe la declaración de una variable http para obtener desde el decorador el objeto http autorizado. Luego trabajamos el servicio para seleccionar los jobs de Bigquery. http = decorator.http() jobtesting = servicio.jobs()

Vamos a colocar la consulta dentro de una estructura de control y resguardo a errores. Construimos la consulta en la variable consulta_datay luego ejecutamos la misma en el servicio para almacenar la respuesta en Respuesta_Consulta. Fig. 7

Fig.7 Construcción de la consulta 
Como vamos a utilizar un gráfico para mostrar los datos, una buena práctica es formar el json de salida con el formato correcto para interpretar por el gráfico. Por este motivo vamos a crear esta estructura a continuación.

Fig.8 Creación de las variables para el gráfico
Definimos los tipos de datos de cada uno de las columnas que deseamos incluir en el gráfico. Fig.9

Fig.9 Determinación del tipo de variables para la información del gráfico
Iteramos sobre la respuesta a la consulta de BigQuery para poder formar el json correspondiente al formato desarrollado. Fig. 10

Fig.10 Iteración para la información obtenida desde Bigquery
Ahora si utilizamos simplejson como encoder sobre la información almacenada en chart_data. Fig.11.

Fig.11 Encoder mediante simplejson.
Ahora trabajamos la plantilla jinja para determinar las variables que vamos a insertar en el javascript o html de nuestra aplicación. Fig.12
Fig.12 Variables para jinja
Finalmente determinamos el html que vamos a trabajar con jinja e inferimos los valores correspondiente para renderizar nuestra aplicación. Fig.13

Fig.13. Renderizado de nuestra aplicación.
Recuerden que pueden obtener más detalles en la wiki del proyecto.

Creative Commons License
Dashboard-Bigquery, explicación paso a paso del main.py is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
Based on a work at http://nbortolotti.blogspot.com.ar/2014/07/dashboard-bigquery-explicacion-paso.html.

sábado, 28 de junio de 2014

Integrando un panel con soporte escalable de consultas, BigQuery

Una de las tradicionales tareas en gran cantidad de escenarios corporativos tiene que ver con el análisis de datos y su visualización en modo panel. En esta oportunidad les voy a compartir el inicio de la integración para un panel basado en BigQuery.

El objetivo propone encontrar el mecanismo que nos permita minar millones de filas en determinadas tablas. En este ejemplo iniciamos el desarrollo utilizando App Engine con Python como plataforma de trabajo y aplicamos la integración por API de Bigquery.

En el proyecto utilizaremos webapp2 como manejador principal y jinja2 para el trabajo de las plantillas HTML. La Fig.1 muestra el entorno de desarrollo completo y la arquitectura básica de la aplicación.

Fig. 1 Entorno de desarrollo utilizado
Tendremos que realizar la operación en 3 pasos generales:
  1. Vamos a tener que consultar los datos a Bigquery.
  2. Tendremos que formatear estos datos para insertarlo en un Google Chart.
  3. Tendremos que integrar estos datos para el render en el HTML.
#Creación de la consulta al banco de datos.
Fig.2 Creación de la consulta al banco de datos
#Formatear los datos.
Fig.3 Manipulación de datos para insertar en el gráfico
#Integrar los datos mediante Jinja2 al HTML.
Fig.4 Manejo de la plantilla jinja2
Finalmente vamosa  visualizar una gráfica como la que muestra la Fig.5. Iniciamos con una integración básica pero podemos varios los gráficos y desarrollar un panel con múltiples opciones.

El proyecto completo lo pueden consultar aquí. (GitHub - Licencia Apache 2.0).

Creative Commons License
Integrando un panel con soporte escalable de consultas, BigQuery is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
Based on a work at http://nbortolotti.blogspot.com.ar/.

viernes, 6 de junio de 2014

Definitivamente la resolución DNS en la infraestructura de Google

En esta gira que llevamos por todo LatAm encontramos gran cantidad de solicitudes y de hecho historias tecnológicas. Además como se imaginarán gran cantidad de solicitudes y consultas. Una pregunta frecuente giraba por el DNS. Si bien se había anunciado el pasado 25 de marzo en el lanzamiento de todas las características de nube desde el equipo de Cloud Platform de Google no se vislumbraba en concreto la funcionalidad que de soporte al DNS. Bien con esta introducción le comparto la experiencia sobre la creación de una zona y sus registros en Google Cloud DNS. Nuestro desafío será referenciar desde nuestro administrador de dominio los servidores de nombre de Google y luego crear y administrar una zona en Google Cloud DNS. Para esto vamos a utilizar la herramienta gcloud.

Fig. 1 - comando gcloud para la creación de una zona


Podemos validar los datos de la creació como muestra la Fig. 2
Fig. 2 Validando los datos de la creación de la zona


Al aceptar vemos el resultado de la zona creada.

Fig. 3 Resultado de la creación.
En el recuadro verde podemos ver los servidores de nombre que debemos referenciar en el administrador de nuestro dominio para que Cloud DNS pueda operar.

Podemos listar los registros de la zona como una buena práctica como  muestra la Fig. 4.

Fig. 4 Los registros actuales de la zona creada.
Por supuesto que podemos agregar más registros, de hecho estaría bien un registro A para apuntar a un Servidor Web por ejemplo...¿que opinan?

Lo vemos en el próximo !