JPO : Webinar d'information sur nos formations → RDV mardi à 17h30.

Bokeh: la biblioteca de visualización Python de nueva generación

Bokeh

El análisis de datos ofrece muchas oportunidades. Sin embargo, interpretar los datos en bruto puede resultar difícil para los usuarios no técnicos de una empresa. Al presentar la información relevante de forma clara y explícita, la Data Visualisation pone remedio a ese problema y permite que cualquiera pueda sacarle partido al Big Data.

Si ya estás familiarizado con bibliotecas de Data Visualisation como Matplotlib o Seaborn, hoy vamos a ver por qué tienes que añadir Bokeh a tu kit de herramientas de Data Visualisation.

Al igual que sus bibliotecas hermanas, Bokeh es una biblioteca de Python de Data Visualisation que permite crear gráficos y objetos visuales elegantes y de aspecto profesional, como diagramas de líneas, de barras, histogramas, distribuciones, etc. con leyendas, texto u otras anotaciones. Pero en lo que Bokeh se diferencia es en la interactividad de sus gráficos, su representación multiplataforma y su grado de personalización.

¿Por qué es Bokeh una biblioteca interactiva?

Con unas pocas líneas de código Python, Bokeh crea gráficos alimentados por Javascript que proporcionan una interactividad y un dinamismo sin precedentes.

El proceso de ejecución del código de Bokeh tiene dos vertientes: en primer lugar, elegimos un bloque de entre los bloques preconstruidos de Bokeh para crear nuestra visualización y, a continuación, se añade código adicional para personalizar estos bloques de forma y que se ajusten al máximo a nuestras necesidades.

A partir de nuestro código Python, Bokeh convertirá este código a JSON y lo pasará a BokehJS, una biblioteca Javascript, que a su vez pasará esta información a los navegadores web modernos para su visualización en una pestaña web.

Las funcionalidades de interacción en nuestro gráfico son nativas de Bokeh, es decir, incluso el gráfico más simple presenta estas funcionalidades en lo que llamaremos una caja de herramientas en el lateral (derecho por defecto) del gráfico:

  • Desplazarse por el gráfico para seleccionar un área
  • Hacer zoom en una zona definida del gráfico
  • Hacer zoom con el ratón
  • Guardar el gráfico en un archivo PNG
  • Restablecer la configuración por defecto del gráfico
  • Ventana de ayuda para aprender a utilizar la caja de herramientas de interacción

 

Podemos añadir nuevas herramientas a esta caja de herramientas utilizando el método add_tools() donde, por ejemplo, puedes añadir funcionalidades al pasar el ratón por encima utilizando la clase HoverTool.

Desde un punto de vista más práctico, Bokeh es fácil de utilizar. Funciona con el sistema de capas adicionales que se van añadiendo a medida que se ejecuta el código. Así, después de crear nuestra figura, podemos añadir un nuevo tipo de gráfico, superponiendo esta nueva capa sobre el gráfico existente.

Por ejemplo, el siguiente código:

permite mostrar en una nueva pestaña del navegador, un archivo HTML que contiene:

Ejemplo de visualización de múltiples capas

Por otra parte, Bokeh ofrece la posibilidad de crear y utilizar widgets en nuestro gráfico, prometiendo un visual dinámico y más interactivo que nunca.

De hecho, gracias a la clase CustomJS del submódulo bokeh.models, la actualización de valores mediante sliders, casillas de verificación o campos de formulario se convierte en un juego de niños. Los objetos CustomJS permiten establecer el vínculo entre los objetos Python manipulados y los objetos Javascript que Bokeh utiliza para generar y mostrar las figuras. Muy cercanos al lenguaje Javascript en su diseño de widgets, suponen una auténtica revolución para la visualización de datos pasando de visualizaciones 2D estáticas a visualizaciones interactivas, dinámicas, modificables y adaptables a todas las necesidades.

Además, combinando esta funcionalidad de Bokeh con la que permite elegir el tipo de visualización entre una imagen PNG, un notebook o un archivo web en formato HTML, nos damos cuenta de que Bokeh es mucho más que una librería de visualización, ya que casi permite crear aplicaciones web de visualización de datos, como muestra este ejemplo extraído directamente de la documentación de Bokeh.

Bokeh está a medio camino entre la biblioteca de visualización habitual y una biblioteca de creación de aplicaciones de datos como Streamlit.

Aún mejor, para conseguir la auténtica representación de una aplicación web de visualización de datos, Bokeh permite mostrar y recopilar datos visualizados a partir de un Streaming de datos, en tiempo real, procedentes de fuentes como mercados financieros, sensores físicos o IOT.

Bokeh, una biblioteca personalizable

Por otro lado, Bokeh permite una personalización casi infinita del resultado. Si nos fijamos en el último gráfico, es posible modificar cada uno de los diferentes aspectos mostrados para obtener una representación única añadiendo capas de especificaciones según se desee.

Añadiendo unas pocas líneas más de especificación al código anterior, tendremos:

Si los gráficos se multiplican, también tenemos la posibilidad de mostrar esos gráficos en filas, columnas o en diferentes pestañas dentro de la misma figura. Esto puede ser muy relevante cuando queremos diferenciar los gráficos por categoría o tipo de valor.

Hemos visto lo bien que puede trabajar Bokeh con listas de Python, tablas de NumPy, series de Pandas, etc. Lo que no sabíamos hasta ahora es que esas entradas se convierten a un Column DataSource, un tipo de datos exclusivo de Bokeh. Este tipo de datos es el objeto fuente de datos central utilizado en Bokeh. Aunque Bokeh suele crearlos por nosotros de manera transparente, hay ocasiones en las que es útil crearlos expresamente, especialmente con Panda Dataframes.

En el ejemplo de abajo, vamos a coger de un Dataframe de Pokémon, dos fuentes de datos, que usaremos en 2 pestañas diferentes, una para mostrar Pokémon legendarios y otra pestaña para Pokémon no legendarios.

Fíjate que también hemos creado una herramienta Hover (pasar el ratón por encima), que hemos añadido a nuestra caja de herramientas, que al pasar el ratón por encima de un punto concreto, nos da información sobre ese punto, como el nombre, los puntos de defensa y de ataque.

Ejemplo de visualización de múltiples capas - 1

Bokeh, ¿una biblioteca especializada?

Por último, si aún no estás convencido de la capacidad de Bokeh, debes saber que esta biblioteca puede ser muy útil para abordar problemas especializados como la visualización de datos geográficos o la de gráficos implementados con NetworkX, por ejemplo. El siguiente código permite visualizar un gráfico NetworkX especificando propiedades en los nodos y aristas del gráfico.

Si la simple visualización de un gráfico no es necesariamente muy relevante u original, sí que será el caso de las características asociadas a Bokeh, como resaltar los nodos adyacentes (vecinos).

gráfico2

En resumen, Bokeh es una biblioteca Python que permite crear representaciones interactivas, dinámicas y personalizables a partir de diversas fuentes de datos que pueden visualizarse en diferentes plataformas.

A medio camino entre una biblioteca clásica de Data Visualisation y una biblioteca que genera una aplicación web, Bokeh se está abriendo camino como la biblioteca de Data Visualization de nueva generación y puede utilizarse tanto para fines generales como específicos.

Si te interesa Bokeh y la Data Visualisation, puedes optar por nuestro curso de Data Analyst, en el que la Data Visualisation dejará de tener secretos para ti.

¿No está disponible?

Déjenos su dirección de correo electrónico para que podamos enviarle los nuevos artículos cuando se publiquen.