Photo by Markus Winkler from on Unsplash

Análise de sentimentos de tweets sobre COVID-19 utilizando python

Luma Gallacio Gomes Ferreira
estudos-python
Published in
4 min readDec 5, 2020

--

Olá pessoal, neste artigo vamos aprender como realizar o pré-processamento de dados de texto para a análise de sentimentos. Vamos usar um Dataset com dados relacionados aos tweets de 24 de julho de 2020 a 30 de agosto de 2020 com hashtags COVID19. Vamos usar python para aplicar a análise de sentimentos nos tweets para ver as reações das pessoas à pandemia durante o período mencionado. Vamos rotular os tweets como positivos, negativos e neutros. Em seguida, vamos visualizar o resultado para ver a reação das pessoas no Twitter.

Principais tópicos:

  • Importar dados;
  • Pré-processar e preparar os dados para nossa análise de sentimentos utilizando o módulo NLTK;
  • Visualizar palavras mais comuns usando um bar chart (ou gráfico de basrras);
  • visualizar o resultado de nossa análise usando line chart (ou gráfico de linha).

Le’ts go.

Importação dos dados e Criação do dataset

Primeiro, precisamos importar as bibliotecas que serão utilizadas

Se você não tiver alguma dessas bibliotecas instaladas, você instalar utilizando pip, por exemplo:

Importamos nosso dataset

Nosso dataset vai se parecer com isso

df.shape vai retorna uma tupla (179108, 13), ou seja, temos 179108 e 13 colunas. Para a nossa análise vamos utilizar apenas as colunas user_name, date e text. Para isso fazemos:

Não é muito bom trabalharmos com user_name dos usuários, por isso vamos transformar o user_name em um id numérico único para cada um. Evamos utilizar apenas a data sem a hora em nossa análise. Fazemos:

Logo, nossos dados ão se parecer dessa forma:

Vamos então trabalhar o processamento do texto.

Processamento de texto

Primeiro vamos remover os URLs pois não agregam nossa análise. Para isso, criei uma variável texts e criei uma função lambda que recebe uma string e, como as URLs seguem um padrão, podemos utilizar uma expressão regular para remove-las. Utilizamos a função apply para aplicar nossa função lambda.

Vamos converter nosso texto para letras minúsculas (ou lowercase):

E remover as pontuações. Para isso vou utilizar uma tabela de tradução, o método translate retorna uma string em que alguns caracteres especificados são substituídos pelo caractere descrito em um dicionário ou em uma tabela de mapeamento. A função maketrans vai criar uma tabela de mapeamento. E string.punctuation retorna todos as pontuações.

Vamos remover as stopwords (ou palavras irrelevantes). São palavras muito comuns na língua inglesa que não traze muito significado a uma frase. Utilizaremos as stopwords da library NLTK que contém palavras como and, the e in e adicionaremos algumas relacionadas à COVID-19. Para isso, samos uma função lambda para as palavras que não estão na lista de stopwords.

Vamos criar uma grande lista com as palavras de todos os tweets e encontrar as palavras mais comuns. Counter vai contar quantas vezes a palavra apareceu e vamos pegar apenas as 50 mais comuns. Depois, criei um dataframe com as palavras e as respectivas frequências.

Vamos ver isso em um gráfico de barras

Cases, new, people, pandemic, deaths são as 5 palavras mais comuns. Vamos então atualizar nosso dataframe inicial com o texto “limpo” que criamos.

Análise de sentimento

Queremos obter as pontuações de polaridade para cada tweet, isso significa que nosso texto pode ser classficado em 4 classes de sentimentos sendo eles

  • neg: Negative
  • neu: Neutral
  • pos: Positive

O algoritmo retorna também compound que é composto dos scores anteriores. Se quiser saber mais como o algoritmo funciona, eu recomendo este artigo.

Colocamos os dados em um dataframe

Criaremos as Labels (ou rótulos) em nosso dataframe baseadas no valor do compound.

Vamos juntar essas labels em nosso dataframe original utilizando o método join.

Vamos plotar esses dados em um barplot

A maioria dos swteets de 24/06/2020 à 30/08/2020 foram positivos!

Vamos ver esses dados agrupando por data. Utilizamos a função groupby pra isso.

E plotando veremos

obrigada por ler!

--

--