Uma breve análise de sentimentos no twitter

 

Introdução

Olá!

Já faz alguns meses que não escrevo por aqui,mas estou de volta! Porém, a partir desse artigo vou dedicar muito tempo a escrever não somente reflexões sobre Inteligência Artificial e seu impacto no mundo, como também tutoriais bem práticos com pequenos projetos de IA e Data Science (tema do último artigo).

Pois bem, como primeiro projeto escolhi fazer uma análise de sentimentos no Twitter. Antes de mais nada, é importante dizer que análise de sentimentos é um assunto bastante complexo e o que fiz foi uma versão simplificada do que muita gente faz por ai, mas mesmo assim bem maneiro 🙂

Para você que não sabe sobre o que eu estou falando, imagine a seguinte situação: você, CEO de um empresa que acabou de lançar no mercado um novo produto, quer saber qual foi a reação das pessoas a esse lançamento. Então, um ótimo caminho para fazer isso seria analisar o que estão falando sobre esse novo produto nas redes sociais. Porém, para um ser humano analisar a opinião de cada pessoa seria bem inviável, como você deve perceber. Aí que entra a análise de sentimentos. Ela é basicamente uma técnica na qual um algoritmo toma como entrada dados (posts de pessoas) e então classifica-os quanto a sua polaridade, positivo, negativo ou neutro. Em linhas gerais, é descobrir de maneira automática o humor do público sobre um certo assunto.

Escolhi a rede social Twitter para fazer essas análises pois é onde as pessoas se sentem mais a vontade para demonstrarem sua opinião.

Começando os trabalhos!

Para este projeto, escolhi utilizar a linguagem de programação Python (no futuro também usarei o R). Caso você decida fazer esse pequeno projeto também, recomendo fortemente que você instale o Python através da distribuição Anaconda, que já vem com diversas bibliotecas importantes prontas para uso. Estou usando a IDE Syper, que vem junto com o Anaconda. Mas você pode usar o que se sentir mais confortável, o código funcionará perfeitamente desde que sua versão do Python seja superior a 3.6.

O que preciso para o projeto?

Antes de tudo, você você precisa de uma conta no Twitter para que assim, possa acessar a API dessa rede social afim de obter os dados de precisamos para a análise, no caso, os tweets. Para não alongar o artigo mais do que o necessário, vou deixar nas referências o vídeo em que me baseie para fazer o projeto. Lá o autor explica o passo a passo para setar o ambiente.

Começando a codar!

Vamos criar dois scripts (ambos precisam estar no mesmo diretório). O primeiro contém as suas credenciais da API do Twitter:

O motivo para criar esse arquivo extra é que só queremos exportar o valor dessas variáveis e fazer com que não sejam vistas no código principal. Agora vamos dar início ao nosso script principal. Começando pela importação das bibliotecas que serão usadas:

Agora vamos criar uma função que servirá como meio de autenticação dos nossos dados pela API do twitter. Basicamente, vamos usar as funções OAuthHandle e set_access_token (ambas da biblioteca tweepy).

Chegamos no momento de escolher o tema para a análise. Infelizmente as bibliotecas usadas nesse tutorial não conseguem trabalhar com o idioma português e,então, precisei escolher um assunto internacional para trabalharmos aqui. E eu escolhi uma das personalidades mais em pauta nos últimos tempos, o amado (#sqn) presidente Donald Trump!


Agora podemos ir para a parte divertida! Vamos começar a extrair os tweets do presidente norte-americano, diretamente da sua conta no Twitter, @realDonaldTrump. Para isso vamos criar um objeto extrator que receberá nossa função de autenticação e, após, usaremos mais uma função das bibliotecas importadas para coletar os tweets:

Para manipularmos os dados com maior liberdade e agilidade, vamos transformar a lista criada em um dataframe e na linha seguinte, printar os 10 primeiros registros do dataframe criado:

Para visualizar o data frame todo, basta ir na janela Explorador de Variáveis no Syper. Uma coisa interessante é a quantidade de dados presentes em um único tweet, como data da criação, fonte e outras. Podemos acessar essas informações através de outras funções da biblioteca Tweepy:

Agora vamos adicionar ainda mais dados no nosso dataframe. Para isso, vamos fazer uso da técnica chamada List Comprhension do Python e, com isso, vamos criar mais colunas no data frame.

Análises básicas 

Nessa próxima parte do código, vamos fazer algumas análises estatísticas básicas nos dados. Primeiramente vamos achar a média do tamanho dos tweets do presidente:

Descobrimos que, em média, o Trump usa 126.535 caracteres. Agora para descobrir qual foi o tweet com maior número de likes e retweets vamos usar a maravilhosa biblioteca pandas.

Descobrimos que o tweet com maior quantidade de likes e de retweets é o mesmo, que trata do atendado na cidade de Las Vegas, ocorrido a poucos dias.  O output da última parte do código foi o seguinte:

>>>  The tweet with more likes is:
My warmest condolences and sympathies to the victims and families of the terrible Las Vegas shooting. God bless you!
Number of likes: 316161
116 characters.

>>> The tweet with more retweets is:
My warmest condolences and sympathies to the victims and families of the terrible Las Vegas shooting. God bless you!
Number of retweets: 75476
116 characters.

Agora vamos plotar séries temporais (são basicamente dados coletados sequencialmente em um intervalo de tempo). As séries temporais serão criadas pela função values, graças ao tipo DateTime que possuem, da biblioteca Numpy e vamos plotar as séries criadas usando a função plot, da biblioteca MatplotLib.

Agora vamos plotar um gráfico para analisar a quantidade de likes versus de retweets. Faremos uso da função plot mais uma vez.

Hum, surgiu uma pergunta. Será que existe alguma relação entre a quantidade de likes e retweets? Provavelmente sim. Para validar essa hipótese, vamos usar a função corr do Python, que retorna uma tabela de correlações entre as variáveis do dataframe analisado. Após isso, vamos plotar essa tabela para melhor visualização.

Vamos fazer uma rápida análise da tabela. Primeiro, temos que desconsiderar a diagonal principal, pois ela avalia se uma coluna do dataframe tem relação com si mesma. O que obviamente é verdade. Observando o quadrado dos Likes versus RTs vemos que de fato existe uma correlação alta entre esses dois fatores. Nossa hipótese foi validada.

Análise de sentimentos

E agora vamos para a análise de sentimentos propriamente ditas. Para isso, precisamos “limpar” nossos dados, ou seja, deixar eles de uma maneira que a algoritmo possa entender. Vamos eliminar qualquer caracter que não seja alfanumérico:

Uma vez criada a função de limpeza. Vamos criar agora a função que irá classificar se o tweet teve “humor” positivo, negativo ou neutro. Para isso, vamos usar as funções da biblioteca TextBlob. Não cabe neste artigo explicar em detalhes como essa biblioteca classifica a polaridade de um tweet mas basicamente ela trabalha com diversos modelos de Machine Learning usados para processamento de linguagem natural. Num futuro próximo irei criar tutoriais para trabalhar com algoritmos contendo diretamente técnicas de Machine Learning. A função classificadora será a seguinte:

Agora vamos adicionar ao nosso dataframe uma coluna extra, contendo a classificação de cada tweet (-1 para negativo, 0 para neutro e 1 para positivo).

Com isso nós temos o resultado da análise de sentimento de cada tweet do Donald Trump. Para ter uma visualização melhor, vamos contar a quantidade de registro em cada polaridade e printar:

As últimas linhas do código tiveram o seguinte output:

>>> Percentage of positive tweets: 59.0%
>>> Percentage of neutral tweets: 25.0%
>>> Percentage de negative tweets: 16.0%

Esse é o resultado da análise de tweets do presidente Donald Trump. Parece que ele tem falado mais sobre coisas boas do que as m*#$@ nas eleições né. kkk

Agora, como último passo deste tutorial, vamos analisar alguns tweets de pessoas sobre o presidente Trump. Vamos criar uma variável que irá armazenar tweets com a palavra ‘Trump’ e criar uma outra variável onde ficará armazenado o resultado da análise de sentimento:

Agora vamos fazer um laço for para percorrer cada registro da variável public_tweets e calcular a polaridade de todos:

E por último (ufa!), vamos printar no console a média das polaridades:

A última linha teve o seguinte output:

>>> 0.2857142857142857

Obtemos uma resultado mais próximo da classificação neutra. Esperava que estivessem falando pior do presidente kkk

Pessoal, esse foi o primeiro projetinho do blog. Fiquem atentos aqui porque muito conteúdo interessante irá surgir. Obrigado pela atenção!!

Abraço

Referências

Pessoal, usei esse vídeo do Siraj Raval (recomendo muito esse YouTuber!) como fonte e também esse artigo.

Article By :