1
resposta

[Projeto] Mão na massa: analisando sentimentos de avaliações de outro produto

Resultado do projeto

Gráfico para mostrar como estão os sentimentos dos clientes

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Análise dos sentimentos positivos e negativos com uma nuvem de palavras (Wordcloud)

Palavras atribuídas ao sentimento positivo

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Palavras atribuídas ao sentimento negativo

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Código Python utilizado no Google Colab

# Instalar o pacote pysentimiento para análise de sentimentos
!pip install pysentimiento 

# Importar a função create_analyzer do pysentimiento
from pysentimiento import create_analyzer

# Importar pandas para manipulação de dados
import pandas as pd

# Importar plotly express para visualizações gráficas
import plotly.express as px

# Importar nltk para processamento de linguagem natural
import nltk

# Importar stopwords em português do NLTK
from nltk.corpus import stopwords

# Importar WordCloud para gerar nuvens de palavras
from wordcloud import WordCloud

# Importar matplotlib para plotagem de gráficos
import matplotlib.pyplot as plt

# Criar um analisador de sentimentos para o idioma português
modelo_analise_sentimento = create_analyzer(task='sentiment', lang='pt')

# Carregar o conjunto de dados de resenhas de produtos
dados = pd.read_csv('https://raw.githubusercontent.com/alura-cursos/hugging_face/main/Atividades/resenhas_produto.csv')

# Realizar a previsão de sentimento para cada resenha
resultado_previsao = modelo_analise_sentimento.predict(dados['Resenha'])

# Exibir os resultados das previsões
resultado_previsao

# Extrair o sentimento (output) de cada previsão e armazenar na lista 'sentimento'
sentimento = [resultado.output for resultado in resultado_previsao]

# Adicionar a coluna 'Sentimento' ao DataFrame original
dados['Sentimento'] = sentimento

# Agrupar as resenhas por sentimento e contar a quantidade
df_sentimento = dados.groupby('Sentimento').size().reset_index(name='Contagem')

# Criar um gráfico de barras com a contagem de resenhas por sentimento
fig = px.bar(df_sentimento, x='Sentimento', y='Contagem',
             title='Contagem de Resenhas por Sentimento')

# Exibir o gráfico
fig.show()

# Baixar as stopwords em português do NLTK
nltk.download('stopwords')

# Definir o conjunto de stopwords em português
portuguese_stopwords = set(stopwords.words('portuguese'))

def nuvem_palavras(texto, coluna_texto, sentimento):
    """
    Gera e exibe uma nuvem de palavras para as resenhas de um determinado sentimento.
    
    Parâmetros:
    - texto: DataFrame contendo as resenhas e os sentimentos
    - coluna_texto: Nome da coluna que contém o texto das resenhas
    - sentimento: Sentimento a ser filtrado ('POS' para positivo, 'NEG' para negativo)
    """
    # Filtrar as resenhas com base no sentimento especificado
    texto_sentimento = texto.query(f"Sentimento == '{sentimento}'")[coluna_texto]

    # Unir todas as resenhas em uma única string
    texto_unido = " ".join(texto_sentimento)

    # Dividir o texto em palavras e remover as stopwords
    palavras = texto_unido.split()
    palavras_filtradas = [palavra for palavra in palavras if palavra.lower() not in portuguese_stopwords]
    texto_filtrado = " ".join(palavras_filtradas)

    # Criar e exibir a nuvem de palavras
    nuvem_palavras = WordCloud(width=800, height=500, max_words=50).generate(texto_filtrado)
    plt.figure(figsize=(10, 7))
    plt.imshow(nuvem_palavras, interpolation='bilinear')
    plt.axis('off')
    plt.show()

# Gerar a nuvem de palavras para resenhas positivas
nuvem_palavras(dados, 'Resenha', 'POS')

# Gerar a nuvem de palavras para resenhas negativas
nuvem_palavras(dados, 'Resenha', 'NEG')
1 resposta

Olá, Mário! Tudo bem?

Parabéns pelo projeto! Você seguiu os passos corretamente e conseguiu gerar os gráficos e as nuvens de palavras para analisar os sentimentos das resenhas. Essa dedicação é essencial para seu crescimento e evolução. Continue assim!

Em caso de dúvidas, conte com o apoio do fórum :)

Um abraço e bons estudos!