Monitoreando Streaming de datos con Bokeh

Cuando se esta en una gran empresa y se tiene la facilidad de acceder a licencias y recursos de soluciones “famosas” es fácil caer en la idea de que todas nuestras necesidades están cubiertas, incluso las necesidades que aun no tenemos.

La realidad es que es muy difícil que una solución comercializada cubra toda nuestras necesidades, sobretodo cuando son muy especificas o si estas han nacido por alguna eventualidad.

Enfrentar las sorpresas

Imagina que necesitas monitorear datos de múltiples fuentes que se actualizan cada uno o dos segundos; bajo esta consigna ya hemos descartado algunas soluciones populares en el mercado como PBI, que aunque es una muy buena herramienta, fácil de usar, con buen soporte, solo podemos llegar a un tiempo de actualización de 4 horas en su frecuencia mas alta.

Otras herramientas como Tableau nos permitirían refrescar los datos de manera mas continua simplemente indicando la frecuencia en los segundos que necesitemos, claro, si es que el cliente utiliza Tableau, y estaríamos forzando un refresh continuo por elemento del dashboard; además de que tendríamos que decirle al cliente… “¿tienes una licencia?”, en caso de que exista habría que revisar nivel y ver si puede ser utilizada, si no pues habría que adquirirla y aquí entran mas factores, y áreas, en juego, como compras, presupuesto, justificación de recursos, etc y mientras tanto el tiempo de nuestra emergencia sigue corriendo.

Receta: Código e imaginación

Afortunadamente existen muchas maneras de superar esta situación sin que le cueste demasiado al cliente o al encargado de mostrar estos monitoreos.

Solo se necesita un poco de pericia en programación y uso de librerías gratuitas como: Bokeh y/o Plotty.

Si… la solución a una visualización rápida, practica y eficaz esta a solo unas lineas de código de distancia sin casarte con un producto que no puedas modificar después.

Librerías como Bokeh (mi favorito) nos aportan la funcionalidad de gráficas dinámicas como lo haría un Power BI o Tableau, el manejo de los datos, la creación de datasets y las consulta se lo podemos dejar a nuestro buen amigo Pandas. Sabemos que lo mas importante de nuestra visualización son los datos, estos deben reflejar la información concisa y verdadera que espera el usuario.

Pandas y Bokeh… viejos amigos

El primer paso será asignar nuestro dataset, ya tratado, a Bokeh, esto es fácil, simplemente asignamos las dimensiones X o Y de nuestra gráfica a las columnas que necesitemos, digamos que esta es la forma “común” de hacerlo.

Pero ¿Qué pasa si tengo mas interacciones de mi gráfica en el dashboard, o si tengo más gráficas que se alimentaran de este mismo dataset? bueno, bokeh nos facilita en sus componentes bokeh.models su clase CDSView (“vistas”) que nos permite alimentar distintas gráficas con una porción nuestro mismo dataset que podemos definir bajo alguna condición o parámetro, es decir puedo filtrar a mi dataset y el resultado asignarlo a una vista, que a su vez, estará asignada a otro gráfico; así que, cuando mi dataset cumpla ciertas condiciones la afectada será mi vista… no tengo que declarar nuevos datasets, ni invocar nuevamente funciones para recalcular.

Entonces… imaginen un dataset que se modifica cada segundo, el cual alimenta múltiples gráficas, una gráfica que fluye y cambia cada segundo

Javascript… el origen de esta magia

Nuestras gráficas no se despliegan en un ambiente propio, los hacen en una pagina web, no como un objeto, si no como gráficos modificados por funciones javascript, así es, como un AJAX…¿lo recuerdan? el boom en componentes para frontend a inicios de los 2000’s. La facilidad de crear los gráficos con Bokeh es recordar como funciona Javascript con CSS… usa capas y cada nuevo elemento se crea en una capa separada, donde podemos realizar eventos y modificaciones que solo afectaran esa capa, lo que nos permite modificar lineas sin modificar la cuadriculas de fondo por ejemplo, donde el “refresh” solo se hará sobre la capa que contiene el glifo (lineas, burbujas, cuadros, barras, etc) y nos dará la sensación de fluidez, de movimiento. De igual forma, podemos tener diferentes tiempo y eventos para cada elemento de cada capa. Así podemos tener gráficos que bien podrían parecer de cualquier producto licenciado. Como resultado de nuestro esfuerzo tenemos:

Nota: los datos de la gráfica son dummies

Un par de días, los accesos correctos, una PC que funge como servidor para desplegar Bokeh y listo, 5 áreas pueden monitorear por medio de un explorador web los indices de eficiencia, ligero, eficiente y open source.

Es importante adaptarse a las necesidades del cliente y aprovechar los recursos con el que este cuenta, como las licencias, el soporte, pero también necesitamos estar abiertos a la improvisación, a la creatividad y nunca negarnos a crear desde cero alguna solución. Una licencia no hace exitoso un producto, la capacidad del producto de resolver un problema o necesidad del cliente a tiempo si.