Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
2
respostas

[Projeto] Mão na massa: criando uma função para visualizar a frequência de palavras

Nesta atividade, foi criada a função grafico_frequencia, responsável por automatizar a visualização das palavras mais frequentes em uma coluna textual de um DataFrame. A função recebe o DataFrame, o nome da coluna de texto e a quantidade de palavras que devem ser exibidas. Em seguida, todos os textos da coluna são concatenados em uma única string, tokenizados com o WhitespaceTokenizer da biblioteca NLTK e contabilizados por meio do FreqDist. Depois, os resultados são organizados em um novo DataFrame com as colunas Palavra e Frequência, ordenados de forma decrescente e limitados à quantidade informada pelo usuário. Por fim, é gerado um gráfico de barras com a biblioteca seaborn, permitindo visualizar de forma clara quais palavras aparecem com maior frequência no conjunto de avaliações.

Segue o Código: https://github.com/Moquiuti/NLP/blob/main/fun%C3%A7%C3%A3o_para_visualizar_a_frequ%C3%AAncia_de_palavras.ipynb

2 respostas

Olá, Leandro. Como vai?

Parabéns pela excelente estruturação da sua função grafico_frequencia e por compartilhar o projeto no seu GitHub! Automatizar etapas de visualização é um marco fundamental no fluxo de trabalho de um cientista de dados, pois evita a repetição de código e padroniza as análises exploratórias.

O pipeline que você desenhou para processamento de texto está impecável e segue o padrão ouro para análises iniciais em Processamento de Linguagem Natural (NLP):
Concatenação $\rightarrow$ Tokenização (WhitespaceTokenizer) $\rightarrow$ Contagem (FreqDist) $\rightarrow$ Estruturação em DataFrame $\rightarrow$ Plotagem (seaborn).

Para agregar ainda mais valor ao seu projeto e conectar com os próximos desafios do curso de Análise de Sentimentos, vamos analisar como você pode evoluir essa função para lidar com os dois principais "ruídos" que aparecem em análises de frequência: as Stopwords e as Pontuações.


O Próximo Passo no Pipeline de NLP: Limpeza de Texto

Se rodarmos a função grafico_frequencia em um conjunto de dados bruto de avaliações (como reviews de e-commerce), é muito provável que as palavras mais frequentes no topo do seu gráfico sejam artigos, preposições e conjunções (ex: "de", "o", "a", "que", "em").

Essas palavras são chamadas de Stopwords. Elas são vitais para a gramática humana, mas para algoritmos de Machine Learning e Análise de Sentimentos, elas não carregam significado emocional ou semântico.

Veja como você pode evoluir a assinatura da sua função para incluir uma etapa opcional de filtragem dessas palavras e de caracteres especiais, utilizando a própria biblioteca NLTK:

import nltk
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
from nltk.tokenize import WhitespaceTokenizer
from nltk.probability import FreqDist

# Certifique-se de ter os downloads do NLTK se for usar essa evolução:
# nltk.download('stopwords')

def grafico_frequencia_evoluido(df, coluna_texto, quantidade=10, remover_stopwords=True):
    # 1. Concatena os textos
    texto_unico = " ".join(df[coluna_texto].dropna().astype(str).str.lower())
    
    # 2. Tokenização básica
    tokenizer = WhitespaceTokenizer()
    tokens = tokenizer.tokenize(texto_unico)
    
    # 3. Filtragem opcional (Stopwords e Pontuações)
    if remover_stopwords:
        stopwords_portugues = nltk.corpus.stopwords.words('portuguese')
        # Filtra se não for stopword e se for apenas caracteres alfabéticos (remove pontos/virgulas)
        tokens = [token for token in tokens if token not in stopwords_portugues and token.isalpha()]
    
    # 4. Distribuição de Frequência
    frequencia = FreqDist(tokens)
    
    # 5. Criação do DataFrame de Resultados
    df_frequencia = pd.DataFrame(frequencia.items(), columns=['Palavra', 'Frequência'])
    df_frequencia = df_frequencia.sort_values(by='Frequência', ascending=False).head(quantidade)
    
    # 6. Plotagem com Seaborn
    plt.figure(figsize=(12, 6))
    sns.barplot(x='Frequência', y='Palavra', data=df_frequencia, palette='Blues_r')
    plt.title(f'Top {quantidade} Palavras Mais Frequentes na Coluna {coluna_texto}')
    plt.show()

Por que essa evolução transforma a sua Análise de Sentimentos?

Ao aplicar a conversão para minúsculas (.str.lower()) e a remoção de stopwords, o topo do seu gráfico de barras deixará de mostrar conectivos neutros e passará a exibir os verdadeiros termos que dão o tom das avaliações dos usuários (como os adjetivos "bom", "excelente", "péssimo", "atrasou").

Isso dará um poder de diagnóstico visual absurdamente maior para quem estiver analisando os dados antes de treinar os modelos de Machine Learning.

Parabéns pela iniciativa de subir o código estruturado no GitHub e pela excelente descrição técnica do seu projeto aqui no fórum!

Espero que possa ter lhe ajudado!

solução!

Fala Evandro , obrigado pelo feedback! vou utilizar sim!