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)
1
resposta

[Projeto] Faça como eu fiz: DataFrames e Filtros | Python: Inteligência Artificial Aplicada

# 1. Criar DataFrame com 5 colunas
dados = {
    'nome_produto': ['Notebook', 'Mouse', 'Teclado', 'Monitor', 'Fone'],
    'categoria': ['eletrônicos', 'eletrônicos', 'periféricos', 'eletrônicos', 'periféricos'],
    'preço': [3500.00, 150.00, 450.00, 1200.00, 200.00],
    'avaliação': [4.5, 3.8, 1.9, 2.3, 4.9],
    'itens_vendidos': [45, 230, 112, 67, 189]
}
df = pd.DataFrame(dados)

# 2. Salvar e importar com pd.read_csv
df.to_csv('produtos.csv', index=False)
df = pd.read_csv('produtos.csv')

# 3. Exibir DataFrame completo e head
print("DataFrame Completo:")
print(df)
print("\nPrimeiros registros:")
print(df.head(3))

# 4. Selecionar coluna específica
print("\nCategorias:")
print(df['categoria'])

# 5. Valores únicos
print("\nCategorias únicas:")
print(df['categoria'].unique())

# 6. Filtro simples - categoria eletrônicos
eletronicos = df[df['categoria'] == 'eletrônicos']
print("\nProdutos eletrônicos:")
print(eletronicos)

# 7. Filtro condicional - avaliação < 2.0
baixa_avaliacao = df[df['avaliação'] < 2.0]
print("\nProdutos com avaliação < 2.0:")
print(baixa_avaliacao)

# 8. Combinar filtros com & - eletrônicos E preço > 1000
filtro_combinado = df[(df['categoria'] == 'eletrônicos') & (df['preço'] > 1000)]
print("\nEletrônicos caros (>1000):")
print(filtro_combinado)

# 9. Usar iloc - linhas por índice numérico
print("\nPrimeiras 2 linhas (iloc):")
print(df.iloc[0:2])

# 10. Usar loc - definir índice textual
df_loc = df.set_index('nome_produto')
print("\nAcesso com loc - Notebook:")
print(df_loc.loc['Notebook'])

# 11. Análise de sentimentos com LLM
# Criar reviews fictícios para análise
reviews = [
    "Produto excelente, recomendo!",
    "Péssima qualidade, não funcionou",
    "Bom custo-benefício",
    "Decepcionante, esperava mais",
    "Perfeito! Superou expectativas"
]

df['review'] = reviews
client = Anthropic()

def classificar_sentimento(review):
    message = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=50,
        messages=[
            {
                "role": "user",
                "content": f"Classifique em uma palavra (positivo/negativo/neutro): {review}"
            }
        ]
    )
    return message.content[0].text.strip().lower()

df['sentimento'] = df['review'].apply(classificar_sentimento)

print("\nDataFrame final com análise de sentimentos:")
print(df[['nome_produto', 'review', 'sentimento']])

::

Resumo das técnicas aplicadas:

Criação: DataFrame com 5 colunas e dados de exemplo
Importação: pd.read_csv() para carregar CSV
Visualização: .head() e print() para exploração
Seleção: Colchetes para acessar colunas
Valores únicos: .unique() para encontrar categorias diferentes
Filtros simples: Condições booleanas
Filtros combinados: Operador & para múltiplas condições
iloc/loc: Acesso por índice numérico e textual
Sentimentos: Integração com Claude API usando .apply() para processar cada review

Este código está pronto para executar e cobre todos os 11 pontos do desafio.

1 resposta
solução!

Olá, Estudante. Como vai?

Parabéns pelo excelente projeto! Você cobriu com maestria todas as etapas fundamentais de manipulação de dados com a biblioteca Pandas, indo desde a criação do DataFrame do zero até a integração avançada com a API do Claude para análise de sentimentos. A estrutura do seu código está super limpa e organizada.

Para enriquecer ainda mais o seu aprendizado sobre manipulação de dados e engenharia de prompt, separei algumas dicas práticas e observações sobre o seu código:

1. Cuidados com a Operação de Filtros Combinados (Item 8)

Você fez o uso perfeito dos parênteses ao combinar os filtros: df[(df['categoria'] == 'eletrônicos') & (df['preço'] > 1000)].

  • Por que isso é importante? No Pandas, os operadores bitwise como & (E) e | (OU) têm precedência de execução maior do que os operadores de comparação (==, >). Se você esquecer os parênteses, o Python tentará executar eletrônicos' & df['preço'] primeiro, gerando um erro de tipo (TypeError). Continue sempre utilizando os parênteses!

2. Diferença Crucial entre loc e iloc (Itens 9 e 10)

Essa é uma das maiores dúvidas de quem está começando com Pandas. O seu exemplo ilustra muito bem a diferença conceitual:

  • iloc (Índice Localizador Inteiro): Baseia-se estritamente na posição numérica das linhas, funcionando de forma fatiada de maneira idêntica às listas nativas do Python.
  • loc (Localizador de Rótulo/Label): Baseia-se no nome do índice. Como você transformou a coluna nome_produto no índice do DataFrame df_loc, você consegue buscar diretamente pela string contida ali.

3. Otimização do Prompt para a LLM (Item 11)

No seu código, você pediu para o modelo classificar o sentimento em apenas uma palavra: Classifique em uma palavra (positivo/negativo/neutro).

  • Dica de Produção: Modelos de linguagem avançados tendem a ser prolixos e podem acabar respondendo algo como "O sentimento é positivo." ou "Esta resenha possui teor negativo.". Quando usamos o método .apply(), qualquer palavra extra ou pontuação pode quebrar uma futura análise estatística de contagem.
  • Solução: Para garantir o comportamento esperado, uma boa prática é reforçar a restrição no prompt ou dar um exemplo de saída (few-shot prompting). Veja uma sugestão de ajuste:
f"Classifique o sentimento da seguinte resenha. Responda APENAS com uma das opções: positivo, negativo ou neutro. Não adicione pontos ou explicações.\nResenha: {review}"

Isso garante que o retorno seja limpo e perfeitamente padronizado para o seu DataFrame.

O seu resumo das técnicas aplicadas ficou excelente e demonstra que você assimilou muito bem os conceitos de manipulação de DataFrames e filtros. Continue aplicando esses padrões nos seus próximos projetos!

Espero que possa ter lhe ajudado!