Power BITutoriales

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“:

Conclusiones de IA en Power BI Desktop
Conclusiones de IA en Power BI Desktop

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

Necesidad de capacidad Premium para IA
Necesidad de capacidad Premium para IA

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”:

Obtener Cuenta de Prueba Cognitive Services
Obtener Cuenta de Prueba Cognitive Services

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:

Opciones Cognitive Services
Opciones Cognitive Services

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:

URL y clave de vuestra API
URL y clave de vuestra API

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:

Nuevo Origen tipo Consulta en blanco
Nuevo Origen tipo Consulta en blanco

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

Editor Avanzado de Power Query
Editor Avanzado de Power Query

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  sentiment

Si 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“:

Función para evaluar el sentimiento de cada tweet
Función para evaluar el sentimiento de cada tweet

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“:

Invocar a la función en una nueva columna
Invocar a la función en una nueva columna

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:

Nueva columna de Scoring
Nueva columna de Scoring

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.

¡SUSCRÍBETE YA!
Doy mi consentimiento para almacenar mis datos para envío de newsletters.
Si te suscribes a la newsletter tendrás acceso a los ficheros Power BI originales de nuestros tutoriales y post.

Además tendrás derecho a participar en sorteos periódicos que realizaremos en el blog.
We hate spam. Your email address will not be sold or shared with anyone else.
Mostrar más

Iván Arribas

Llevamos siglos generando, relacionando, modificando y almacenando datos....es hora de que les echemos un vistazo. Espero que este blog sirva de ayuda a los que quieran introducirse en este mundo de la Analítica de Datos, igual que me está sirviendo a mi.

Publicaciones relacionadas

2 comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información básica sobre protección de datos Ver más

  • Responsable: Iván Arribas Delgado.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio. El Titular ha contratado los servicios de alojamiento web a Bluehost que actúa como encargado de tratamiento.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

Botón volver arriba
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Ver
Privacidad