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

Preparando o ambiente: reviews.csv

Análise de sentimento de avaliações com Python e Pandas

Objetivo

Carregar o arquivo Reviews.csv, analisar o texto das avaliações utilizando um LLM para identificar o sentimento de cada feedback e adicionar uma nova coluna ao DataFrame contendo a classificação como Positivo, Negativo ou Neutro.


Etapa 1: Importar o Pandas e carregar o arquivo CSV

import pandas as pd

df = pd.read_csv("Reviews.csv")

print(df.head())

Etapa 2: Selecionar a coluna de avaliações

Como o desafio pede para utilizar apenas os textos das avaliações, vamos trabalhar com a coluna Review Text.

reviews = df["Review Text"]

print(reviews.head())

Etapa 3: Criar uma lista para armazenar os sentimentos

sentimentos = []

Etapa 4: Utilizar um LLM para classificar os sentimentos

for review in reviews:

    resposta = client.models.generate_content(
        model="gemini-2.5-flash",
        contents=f"""
        Classifique o sentimento do texto abaixo em apenas uma palavra:
        Positivo, Negativo ou Neutro.

        Texto:
        {review}
        """
    )

    sentimento = resposta.text.strip().capitalize()

    sentimentos.append(sentimento)

Etapa 5: Adicionar uma nova coluna ao DataFrame

Após gerar todas as classificações, criamos uma nova coluna chamada Sentimento.

df["Sentimento"] = sentimentos

Verificando o resultado:

print(df[["Review Text", "Sentimento"]].head())

Etapa 6: Salvar o resultado em um novo arquivo CSV

df.to_csv(
    "Reviews_Classificados.csv",
    index=False,
    encoding="utf-8"
)

Etapa 7: Ler o arquivo gerado para validação

novo_df = pd.read_csv(
    "Reviews_Classificados.csv",
    encoding="utf-8"
)

print(novo_df.head())
2 respostas

Olá, Estudante. Como vai?

Sensacional o seu projeto! A integração do Pandas com LLMs para análise de sentimentos é um dos cenários mais quentes e práticos do mercado atual de IA para dados. O seu passo a passo ficou extremamente limpo, bem documentado e lógico.

Como você está entrando no universo de IA Aplicada, preparei alguns complementos técnicos e boas práticas de engenharia de prompt e otimização de código que vão elevar ainda mais o nível do seu projeto:

1. Robustez na Engenharia de Prompt

LLMs podem ser um pouco imprevisíveis em iterações longas. Às vezes, o modelo pode responder algo como "O sentimento é Positivo" ou "Não foi possível identificar", quebrando a padronização que você planejou para o DataFrame.

Para garantir que a resposta seja estritamente uma das três opções, podemos usar instruções do sistema (system instructions) ou delimitar melhor as regras no prompt:

# Exemplo de prompt mais restritivo
contents=f"""
Você é um classificador de sentimentos estrito.
Responda APENAS com uma das seguintes palavras: Positivo, Negativo ou Neutro.
Não inclua pontuação, justificativas ou palavras adicionais.

Texto a ser analisado:
"{review}"
"""

2. Tratamento de Valores Nulos ou Longos

Em arquivos reais de avaliações, é muito comum encontrar linhas onde o usuário deixou o texto em branco (NaN) ou enviou apenas um caractere. Passar um valor nulo para a API do Gemini pode gerar um erro e interromper o seu laço for no meio do caminho, perdendo o progresso.

Uma boa prática é tratar esses valores antes do laço ou colocar uma verificação simples:

# Verificando se o texto é válido antes de chamar a API
if pd.isna(review) or str(review).strip() == "":
    sentimentos.append("Neutro") # Ou "Não Informado"
else:
    # Executa a chamada do client.models.generate_content...

3. Otimização com Tratamento de Erros (try/except)

Se você tiver centenas de avaliações, sua requisição pode falhar temporariamente por instabilidade na rede ou limite de cota (Rate Limit). Para não perder todo o processamento de um DataFrame grande caso ocorra uma falha na linha 50, por exemplo, o uso de um bloco try-except protege a execução do seu script:

try:
    resposta = client.models.generate_content(
        model="gemini-2.5-flash",
        contents=prompt
    )
    sentimento = resposta.text.strip().capitalize()
except Exception as e:
    print(f"Erro ao processar a linha: {e}")
    sentimento = "Erro" # Sinaliza que essa linha falhou

sentimentos.append(sentimento)

Parabéns pelo excelente domínio da biblioteca Pandas e pela aplicação prática do Gemini 2.5! Compartilhar scripts ponta a ponta como este enriquece demais a comunidade do fórum.

Espero que possa ter lhe ajudado!

solução!

Obrigado pelo feedback!