Tutorial Power BI: Sentiment Analysis con Cognitive Services

En este tutorial vamos a ver las diferentes opciones para conectar nuestro panel de Power BI con Azure Cognitive Services para, por ejemplo, analizar los sentimientos de un listado de tweets.
Para este ejemplo he elegido un dataset de kaggle sobre los tweets de la cuenta oficial del Presidente de US, Donald Trump, en 2020. Vamos a intentar analizar si los tweets de Trump han sido positivos, neutrales o negativos.
Opción 1: Power BI Premium
Ya sé que la mayoría de vosotros no disponéis de una cuenta Premium de Power BI, pero es la opción más sencilla y os lo quería explicar porque parece que la licencia Premium sólo se debe elegir por un volumen alto de usuarios. La verdad es que Power BI Premium también cuenta con una serie de funcionalidades increíbles como la conexión con servicios IA de Azure como Cognitive Services o AutoML.
En la opción 2 de este post veréis como conectar con Cognitive Services con la opción de Power BI Pro.
Seguro que muchos ya habéis visto que en el Editor de Consultas de Power BI Desktop aparece una zona del menú llamada “Conclusiones de IA“:

Parece muy prometedor, pero cuando seleccionas la opción “Text Analytics” para poder realizar un Sentiment Analysis llega el bajón:

Si tuviésemos licencia Premium, simplemente conectaríamos desde aquí de manera sencilla con el servicio de Cognitive Services o Machine Learning correspondiente.
El uso de estas funcionalidades de Inteligencia Artificial ya está incluido en el coste de Power BI Premium.
Opción 2: Power BI Pro y un poco más de trabajo
Al no poder usar las conclusiones de IA por motivos de licencia, tendremos que optar por conectar con la API de Cognitive Services a través de una función de M o PowerQuery.
Creación de cuenta de Cognitive Services
Lo que sí que necesitaremos es una cuenta de Cognitive Services, pero tranquilos porque podéis disponer de un acceso a la API gratis durante 7 días. Para ello, debéis acceder a la prueba gratuita de Cognitive Services y seleccionar la opción “Language API” y pulsar obtener “Obtener clave de API”:

Al pulsar el botón veréis que hay una opción de 7 días de prueba que no solicita datos de tarjeta ni realiza ningún cargo:

Una vez registrados, ya tendréis acceso a toda la info que necesitáis para este tutorial: la url de acceso a la API y vuestra clave:

Creación de función para llamar a la API en Power BI
Una vez que tenemos la cuenta creada, debemos crear una función que llame a esta API.
Desde el Editor de Consultas de Power BI Desktop creamos un nuevo Origen de Datos del tipo Consulta en blanco:

Una vez creado, debemos pulsar en el botón del “Editor avanzado”:

Debéis sustituir el código que aparece por el siguiente código, sustituyendo el texto YOUR_API_KEY_HERE por vuestra clave obtenida con la cuenta de Cognitive Services:
// Returns the sentiment score of the text, from 0.0 (least favorable) to 1.0 (most favorable)
(text) => let
apikey = "YOUR_API_KEY_HERE",
endpoint = "https://westcentralus.cognitiveservices.azure.com" & "/text/analytics/v2.1/sentiment",
jsontext = Text.FromBinary(Json.FromValue(Text.Start(Text.Trim(text), 5000))),
jsonbody = "{ documents: [ { language: ""en"", id: ""0"", text: " & jsontext & " } ] }",
bytesbody = Text.ToBinary(jsonbody),
headers = [#"Ocp-Apim-Subscription-Key" = apikey],
bytesresp = Web.Contents(endpoint, [Headers=headers, Content=bytesbody]),
jsonresp = Json.Document(bytesresp),
sentiment = jsonresp[documents]{0}[score]
in sentimentSi vuestro endpoint es distinto a “westcentralus” también debéis cambiarlo en el código en la línea de endpoint.
Al presionar Enter, habréis creado una función que podéis renombrar. Yo le he puesto de nombre “SentimentAnalysis“:

Invocar a la nueva función para evaluar cada tweet
Ahora ya tenemos todos los ingredientes listos:
- Un dataset cargado con un registro de tweets
- Una cuenta de Cognitive Services con su endpoint y su clave API
- Una función para llamar a esa API
Por lo tanto sólo nos queda unirlos, esto es, invocar a la función en cada registro de nuestra tabla de tweets para que llame a la API y nos devuelva el sentimiento del texto analizado.
Para ello, en el Editor de consultas, nos situamos en la tabla de tweets y pulsamos el botón “Invocar función personalizada“:

Como veis, esta opción sólo nos pide 3 parámetros:
- Nuevo Nombre Columna: El nombre de la nueva columna que vamos a crear en la tabla de tweets para almacenar el scoring de sentimiento
- Consulta de función: El nombre de la función a la que invocar (en mi caso la he llamado SentimentAnalysis)
- Text: Por último, los parámetros que necesita la función, en este caso sólo necesita saber la columna que contiene el texto a analizar (el contenido del tweet)
Al aceptar (y pasar un rato haciendo llamadas a la API) ya podréis ver la nueva columna:

Al “cerrar y aplicar” la ventana de consultas, tardará un rato en llamar a la API por cada registro y evaluar el nivel de sentimiento.
NOTA IMPORTANTE: la versión de prueba de 7 días tiene un límite de 5.000 registros mensuales, por lo que debéis aseguraros que vuestro dataset tiene menos de 5.000 registros. En mi caso he filtrado el dataset con los tweets de 2020.
Aparte, puede que en algún registro os de un error la llamada a la API, podéis filtrarlos para que no os den problemas en el análisis (a mi me dieron 5 errores de unos 1.400 registros)
El panel de Power BI
La evaluación de sentimiento de Cognitive Services devuelve un valor entre 0 y 1, donde 0 es muy negativo y 1 es muy positivo. a partir de esa premisa, podéis empezar a crear vuestro análisis.
En este ejemplo de los tweets de Trump, yo he creado unos rangos de evaluación:
- MUY NEGATIVO: entre 0 y 0,1
- NEGATIVO: entre 0,1 y 0,4
- NEUTRO: entre 0,4 y 0,6
- POSITIVO: entre 0,6 y 0,9
- MUY POSITIVO: entre 0,9 y 1
Aparte, quería poder filtrar por hashtag, que sería una opción similar a “temática” del tweet (aunque Trump no es muy fan de usar hashtags).
Para ello veréis que he tenido que hacer un poco de trabajo de edición de consultas porque un mismo tweet puede contener más de un hashtag.
Os dejo aquí el panel para que podáis jugar con él, y ya sabéis que si estáis suscritos a nuestra newsletter tendréis el fichero pbix accesible:
Conclusiones
Las posibilidades que nos proporciona unir la potencia de Power BI con Cognitive Services a través de su API son increíbles.
En este sencillo ejemplo sólo hemos explorado la opción de Sentiment Analysis del Analizador de Texto, pero podemos explotarlo también en las áreas de Decisión, Visión, Lenguaje, Voz o Búsqueda Web. Al final, consiste en dotar a nuestros informes de funcionalidades de Inteligencia Artificial.
Podéis ver todas las opciones de la API en este link.







Me suscribi y no tengo acceso a los ficheros.
Hola Anderson,
te acabo de mandar las credenciales por mail.
Gracias por suscribirte!!