Análise de sentimento com Power BI e Cognitive Services
Há algum tempo venho acompanhando a página do Facebook do prefeito de São Paulo, João Doria Jr, e é admirável o trabalho que ele está fazendo na cidade, assim como também é admirável o Marketing bem feito que ele faz em seus 3 posts diários.
Lendo os comentários em suas publicações, a população em geral parece estar aprovando, e muito, o trabalho do prefeito. Porém é fato que os comentários mais positivos e mais curtidos são os que aparecem no topo da lista, e isto influencia positivamente a imagem de João Doria.
Então para ter uma avaliação mais justa e realista do que está sendo comentado em seus posts, resolvi fazer uma análise de sentimento dos comentários, conectando a API do Facebook com o Power BI, e utilizando a API de Análise de Texto que a Microsoft Cognitive Services oferece.
No final do post darei detalhes de como fazer estas integrações com o Power BI.
Resultados obtidos
Realizei a análise dos últimos 70 posts, que foram entre os dias 22/02/2017 e 16/03/2017, e os resultados estão ilustrados no Relatório abaixo.

Clicando na imagem acima, ouaqui, você tem acesso ao relatório publicado, que é interativo. Escolhendo um valorno gráfico de rosca, os demais dados são filtrados, e , pela tabela, você tem acesso ao link do post, podendo ordená-la pelas suas colunas.
Os 70 posts analisados resultaram nos seguintes resultados:
- Um score médio de 62%, sendo 100% totalmente positivo e 0% totalmente negativo;
- Total de 283 mil comentários, sendo 109 mil positivos, 35 mil negativos e 138 mil neutros. O critério escolhido para definir um comentário positivo é Score acima de 70%, e negativo abaixo de 30%;
- Total de 851 mil compartilhamentos. É muita coisa;
- Score máximo de 76% no dia 08/03 neste post aqui, na homenagem ao dia da mulher;
- Score mínimo de 46% no dia 05/03 neste post aqui, quando o assunto foram as pichações;
- 81 mil compartilhamentos no dia 07/03 neste post aqui, quando ele anuncia a doação de seu salário;
- Entre outros que deixo para quem quiser analisar.
Claro, o algoritmo não é livre de erros. Palavras negativas e positivas na mesma frase geralmente resultam em um Score intermediário, mesmo que a nossa leitura desta frase indique um sentido claro como positivo ou negativo. Outro ponto complicado e que acaba prejudicando um pouco o resultado é a presença de frases irônicas, bastante comum em comentários políticos e que são de difícil interpretação pelo algoritmo.
De qualquer forma, é nítida a aceitação do atual prefeito de São Paulo, e esta análise pode comprovar isto, pelo menos para os 70 posts analisados.
Quer saber como gerar análise de sentimento do Facebook no Power BI?
O processo é relativamente simples, não é preciso ser um expert em Data Science para isso. Esse papel científico ficou com a Microsoft, que disponibiliza os Serviços Cognitivos.
Para ter acesso à API você precisar criar uma conta no site e ativar os 5000 requests por mês grátis que eles oferecem. O serviço irá fornecer uma Key, conforme imagem abaixo, que você precisa copiar depois para utilizar no Power BI.

Com isto em mãos, vamos para a parte que envolve a conexão do Facebook com o Power BI, e depois voltamos para a análise do texto. No Power BI o primeiro passo então é obter uma consulta em branco e digitar o seguinte código no Power Query:
= Facebook.Graph("https://graph.facebook.com/v2.2/[facebook-id]/posts?limit=100&fields=message,created_time,shares,comments")Você deve substituir o [facebook-id] pelo ID da página que deseja puxar. No caso de João Doria o ID é jdoriajr.
Com isto o Power BI vai buscar uma enorme massa de dados, que precisa agora passar pelo processo de ETL para ser transformada e organizada. No meu caso a primeira coisa que fiz foi limitar a quantidade de linhas em 70, pois a API do Facebook é relativamente lenta, e o prefeito possui muitos dados!
Para fazer esta organização dos dados eu criei três referências da Query de base e separei os dados em quatro tabelas: Posts, Compartilhamentos, Comentários e Comentários Sentimentos. Além disso tenho uma tabela extra para deixar todas minhas medidas organizadas. A relação entre elas ficou como abaixo:

Feito isso vamos então para a obtenção do Score. Aqui entra um processo um pouco mais complicado e que não conseguirei entrar em todos os detalhes, mas basicamente o que devemos fazer é criar uma nova consulta em branco, dar o nome de GetSentimentResults e digitar o seguinte código no Power Query:
= (Source as table) as any => let JsonRecords = Text.FromBinary(Json.FromValue(Source)), JsonRequest = "{""documents"": " & JsonRecords & "}", JsonContent = Text.ToBinary(JsonRequest, TextEncoding.Ascii), Response = Web.Contents("https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/sentiment?", [ Headers = [#"Ocp-Apim-Subscription-Key"= "[API Key]", #"Content-Type"="application/json", Accept="application/json"], Content=JsonContent ]), JsonResponse = Json.Document(Response,1252) in JsonResponseLembra da sua Key que você obteve no site da Microsoft? Você deve colocar no lugar de [API Key] no código acima. Ainda no Power Query, na tabela Comentários Sentimentos o próximo passo é agrupar as colunas ComentáriosID e Comentário em uma tabela que deve se chamar data. Agora basta então invocar a função personalizada GetSentimentResults para esta tabela data.
Está pronto! Parece trivial, mas tem alguns detalhes no meio do caminho que não cobri aqui, mas a ideia em geral é esta. Se houver alguém interessado em saber com mais detalhes eu posso ilustrar em vídeo e incluo neste post.
Espero que tenham gostado, e boas análises!
Abraços,
Leonardo
Continue por aqui
Aprenda Power BI com o mestre Leonardo Karpinski
Aprenda Power BI com Leonardo Karpinski e se torne um profissional incomparável, capaz de disputar as melhores vagas do mercado de trabalho.
Como criar uma conta FREE no Power BI e Publicar seu Primeiro Relatório
Passo a passo pra criar sua conta gratuita no Power BI, publicar o primeiro relatório e compartilhar por link público, sem pagar nada.
Definitive Guide: Power BI Licensing (Free x Pro x A1 x EM1 x P1)
Today we are going to talk about all types of Power BI licensing! Subject of Live #8 , that both who works and who wants to implement Power BI in the...
Link para Meus Materiais sobre Power BI, Machine Learning e Analytics
Disponibilizo no link abaixo um relatório onde organizei por tema todos os conteúdos que já publiquei no YouTube e LinkedIn. Clique na imagem para...


