Power BI cuenta con una amplia variedad de visuales nativos con los que poder desarrollar nuestros informes. Pero, ¿qué ocurre cuando necesitamos presentar nuestros datos con una capa más de personalización? En este artículo te introducimos dos formas distintas de abordar el problema a través de Python y Deneb.
¡Comenzamos!
Gracias al soporte que brinda Power BI a Python y Deneb, podemos emplear estas tecnologías para scripting, incluyendo también soporte para procesado de datos en Python, lo que nos da la posibilidad de usar dataframes, cargar librerías externas o disponer de nuestros propios visuales, ayudándonos a cuidar nuestra narrativa de datos en nuestros proyectos.
Visualizaciones con Python
Python como lenguaje de programación integrado en Power BI nos permite trabajar con los datos directamente a través de dataframes e implementar librerías como pandas, Matplotlib o Seaborn, entre otras. Además, también es posible utilizar Python para entrenar modelos de machine learning y representar los resultados con ayuda de librerías como Scikit-Learn.
La integración dentro del ecosistema de Microsoft Power BI nos ofrece publicar los informes al servicio con todas las librerías open-source de las que hayamos hecho uso, aunque estos visuales no son interactivos con el resto, pudiendo interactuarse con ellos solamente a través de filtros. Otras limitaciones que presenta su uso en Power BI se dan a la hora de ejecutar scripts, con un tiempo máximo de ejecución de 60 segundos, el consumo de memoria limitado a máximo 1GB o el tamaño de imágenes en visuales de hasta 2MB. Además, se reduce el tamaño máximo de los dataframes que soporta hasta 150.000 registros o 250MB en formato .csv. Recuerda que si vas a publicar los informes en el servicio deberás tener habilitada la actualización programada y disponer de una puerta de enlace personal.
Sin embargo, pese a las limitaciones que pueda presentar, Python puede resultarnos especialmente útil para el procesado de datos y posterior representación de estos en nuestros informes. Asimismo, Python nos facilita el desarrollo de visuales propios cuando no queremos correr el riesgo de emplear visuales no certificados desde marketplace y estos se puedan recrear con las librerías soportadas. Por ello, es importante comprender las limitaciones y los beneficios del scripting con Python antes de empezar a usarlo en un desarrollo.
Si finalmente nos decantamos por esta opción, deberemos disponer de una instalación del mismo en nuestro ordenador y conectarlo adecuadamente a Power BI. Es recomendable tener localizado el directorio donde tenemos instalado Python o instalar la versión que deseamos directamente desde python.org en un directorio, como puede ser: C:\Python312.
Figura 1: Configuración de Python en Power BI.
Después de instalar Python, deberemos contar con las librerías necesarias para trabajar con los datos y con los visuales. La manera de instalar estos módulos es a través de CMD de forma muy simple indicando la ruta a Python:
C:\Python312\python.exe -m pip install pandas
C:\Python312\python.exe -m pip install matplotlib
Las librerías que actualmente cuentan con soporte en Power BI son:
- pandas
- Matplotlib
- Seaborn
- NumPy
- Scikit-Learn
- Statsmodels
- SciPy
En este artículo vamos a emplear pandas, una librería que nos permite trabajar con estructuras de datos tabulares conocidas como dataframes con los que podemos interactuar, manipular los datos, extraer datos desde .json, .csv o conectarnos a una base de datos, entre otros. Un ejemplo de su uso nos permite consumir datos directamente desde el endpoint de una API en formato .csv, dándonos la opción a manipular el dataframe para filtrar datos o eliminar columnas antes de cargarlo en nuestro informe:
Figura 2: Ejemplo de uso de Python como origen de datos.
Por esa razón, emplearemos pandas para la manipulación de datos y al poderse integrar fácilmente con otras librerías como Matplotlib y Seaborn para la visualización de nuestros dataframes. Además, combinando pandas con estas librerías, podemos crear con nuestros propios scripts visuales que van desde gráficos de barras, gráficos de dispersión, histogramas, nubes de palabras y un amplio etcétera. De esta forma, a partir de estas librerías vamos a trabajar sobre nuestra tabla de hechos para mostrar los datos de impactos de meteoritos que se han registrado en los últimos siglos.
Para poder empezar solamente debemos pulsar en script de Python y añadir el código de la figura o gráfica que deseamos visualizar. A continuación, os enseñamos cómo podemos incluir un gráfico de líneas que representa la evolución del número de meteoritos registrados a lo largo del tiempo. El código sería el siguiente:
# The following code to create a dataframe and remove duplicated rows is always executed and acts as a preamble for your script:
# dataset = pandas.DataFrame(year, fall)
# dataset = dataset.drop_duplicates()
# Paste or type your script code here:
import pandas as pd
import matplotlib.pyplot as plt
df_meteoritos = dataset[[‘year’,’fall’]]
df_meteoritos[‘year’] = df_meteoritos[‘year’].astype(«string»)
df_meteoritos[‘year’] = df_meteoritos[‘year’].str[:4]
factRegistro = df_meteoritos.groupby([‘year’]).count()
fig, axis = plt.subplots()
axis.plot(factRegistro, color=‘lightskyblue’)
axis.set_title(«Registro histórico de caídas de meteoritos»)
axis.set_xlabel(«Año»)
axis.set_ylabel(«Nº de impactos/año»)
axis.xaxis.set_major_locator(plt.MaxNLocator(10))
plt.show()
Figura 3 Ejemplo de creación de visuales con Python.
Cómo Podríamos Trabajar con Otras Librerías
Siguiendo los mismos pasos que para la instalación del módulo de Matplotlib, podríamos instalar Seaborn, una librería especializada en representaciones estadísticas con un nivel de personalización intermedio:
C:\Python312\python.exe -m pip install seaborn
Un ejemplo de su uso nos da la posibilidad de cargar un boxplot para ver la distribución estadística de nuestros datos:
Figura 4: Resultado de emplear Seaborn con el dataset para ver la distribución por masa.
Como podemos ver, resulta sencillo crear nuestros propios visuales, aunque debemos tener en cuenta que el número de librerías soportado actualmente es limitado. De hecho, ciertas librerías como Folium y PyVista no producirán resultados en Power BI, pese a que sí lo hagan en notebooks, al no contar con la posibilidad de renderizar los objetos que estas producen. Sin embargo, no se descarta un mayor soporte en el futuro y, si no quieres perder ciertas funcionalidades de Python, Microsoft Power BI también ofrece la posibilidad de ser integrado en notebooks de Jupyter.
El resultado de probar a generar algunos visuales sencillos mediante scripts de Python combinado con visuales nativos es el siguiente:
Figura 5: Resultado de combinar visuales con Python (tres superiores) con visuales nativos de Power BI.
¿Qué Hacemos si el Resultado no nos Convence?¿No Existen Alternativas a Python?
Si no nos convencen los resultados que podemos obtener con Python, podemos utilizar la integración con R dentro de Power BI, siendo muy similar a trabajar en Python. Sin embargo, existe una alternativa más reciente, moderna y sencilla: Deneb.
Deneb se trata de un visual certificado que permite la creación de visuales personalizados mediante el uso de los lenguajes Vega y Vega-Lite, siguiendo el formato JSON, lo que facilita su uso. Además, cuenta con la ventaja de que no es necesario descargar librerías externas, presenta compatibilidad para el renderizado de visuales en Power BI (a diferencia de Python) y también permite la interacción entre visuales.
Para instalarlo en nuestro Power BI basta con acceder a marketplace, buscar por Deneb: Declarative Visualization in Power BI y pulsar en “añadir”. Es recomendable visitar la documentación oficial de Deneb para ir familiarizándonos.
Figura 6: Instalación de Deneb para Power BI.
Para un primer ejemplo práctico vamos a diseñar algunos visuales sencillos en una nueva pestaña de nuestro informe. Empezaremos por arrastrar el visual al lienzo, añadir las métricas o campos que queramos representar y accederemos al editor de Vega, donde podremos elegir si partir desde cero o empezar con una plantilla. Si probamos a elegir una plantilla obtendremos unos resultados como estos:
Figura 7: Creación de un visual con Deneb a partir de una plantilla.
Si queremos ir un paso más allá, gracias a la sencillez y capacidad de personalización que tenemos con Deneb, podremos crear visuales atractivos y modernos, incluso asemejándose al funcionamiento y look de los propios visuales nativos. Para compararlo con Python, desarrollaremos un gráfico de líneas similar al que hemos visto de una forma más rápida, sin necesidad de librerías y con el beneficio de estar completamente integrado y ser interactivo con el resto de los visuales.
Figura 8: Desarrollo de un gráfico de líneas en Deneb.
Los resultados que conseguimos con Deneb son de alta calidad y se asemejan enormemente a los visuales nativos en funcionalidad y apariencia, haciendo de Deneb una atractiva opción.
Figura 9: Resultado de utilizar Deneb para representar visuales.
Conclusión
En definitiva, la facilidad de uso de ambas tecnologías, unido a las ventajas de manipulación de datos y soporte externo por parte de Python junto con la rapidez, sencillez y facilidades que ofrece Deneb, las convierte en dos poderosas herramientas a tener en cuenta en nuestros desarrollos.
Si te ha resultado interesante este artículo, no te puedes perder la ponencia sobre Deneb en el próximo Verne Academy Summit 2024 de la mano de David Torrejón o informarte más acerca de nuestros cursos de Power BI avanzados 😊
Jorge Enríquez Serrano
Data & IA Specialist