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!

1
resposta

(28. Python: Inteligência Artificial Aplicada ) Faça como eu fiz: DataFrames e Filtros

Crie um DataFrame com 5 colunas: nome do produto, categoria, preço, avaliação e itens vendidos;
Utilize pd.read_csv para importar dados de um arquivo CSV;
Exiba o DataFrame completo e com .head para visualizar os registros iniciais;
Selecione uma coluna específica utilizando a notação de colchetes;
Extraia valores únicos de uma coluna com os métodos unique ou set;
Realize um filtro simples para selecionar registros com categoria igual a 'eletrônicos';
Aplique um filtro condicional para obter produtos com avaliação menor que 2.0;
Combine filtros usando o operador & para condições simultâneas, como categoria e preço;
Utilize o método iloc para selecionar linhas por índices numéricos;
Acesse registros com índices textuais utilizando o método loc após definir um novo índice;

import numpy as np
import pandas as pd

np.random.seed(42)

categorias={
    "Eletrônicos":["Smartphone","Notebook","Fone","Smartwatch","Tablet"],
    "Vestuário":["Camiseta","Calça","Tênis","Jaqueta","Meias"],
    "Alimentos":["Café","Chocolate","Arroz","Azeite","Biscoito"],
    "Casa":["Luminária","Lençol","Panela","Almofada","Organizador"]
}

cats=np.random.choice(list(categorias.keys()),50)

df=pd.DataFrame({
    "produto":[np.random.choice(categorias[c]) for c in cats],
    "categoria":cats,
    "preco":np.round(np.random.uniform(10,2500,50),2),
    "avaliacao":np.round(np.random.uniform(1,5,50),1),
    "quantidade_vendida":np.random.randint(1,150,50)
})

df.to_csv("produtos.csv",index=False)

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

display(df)
display(df.head())

display(df[["produto"]])

display(df["categoria"].unique())

display(df[df["categoria"]=="Eletrônicos"])

display(df[df["avaliacao"]<2])

display(
    df[
        (df["categoria"]=="Eletrônicos")&
        (df["preco"]>=350)
    ]
)

display(df.iloc[15])
display(df.iloc[:16])
display(df.iloc[15:20])
display(df.iloc[43:])

df=df.set_index("produto")

display(df)
display(df.loc["Café"])

df_ord=df.sort_index()

display(df_ord.loc["Arroz":"Café"])

display(df.loc["Café","preco"])

display(
    df.loc[
        ["Arroz","Café","Azeite"],
        ["preco","quantidade_vendida"]
    ]
)

eletronicos=df[df["categoria"]=="Eletrônicos"]

display(eletronicos)

display(
    df.loc[
        eletronicos.index,
        ["preco","quantidade_vendida"]
    ]
)

vestuario=df[df["categoria"]=="Vestuário"]

display(vestuario)

df.loc[vestuario.index,"categoria"]="Moda"

display(df)

Implemente o desafio: carregue o CSV de reviews, utilize um LLM para classificar o sentimento de cada feedback e adicione essa classificação como nova coluna no DataFrame.

import pandas as pd
import os
from google.colab import userdata
from groq import Groq

os.environ["GROQ_API_KEY"]=userdata.get("Groq")

client=Groq(api_key=os.environ["GROQ_API_KEY"])

df=pd.read_csv("/content/reviews.csv")[["reviewText"]]

# df=df.head(5)

def classificar(review):

    prompt=f"""
    Classifique o texto como:
    Positivo, Negativo ou Neutro.
    Responda apenas com a classificação.

    Texto:
    {review}
    """

    r=client.chat.completions.create(
        model="llama-3.3-70b-versatile",
        messages=[{
            "role":"user",
            "content":prompt
        }]
    )

    return r.choices[0].message.content.strip().capitalize()

sentimentos=[]

for i,review in enumerate(df["reviewText"],1):

    print(f"Analisando review {i}...")

    sentimentos.append(classificar(review))

df["analise_sentimento"]=sentimentos

display(df)
1 resposta

Oii Eduardo, tudo bem?

Obrigada por compartilhar seu desenvolvimento no fórum, com certeza vai ajudar outros alunos que estejam fazendo atividades semelhantes.

Seu código está bem estruturado e cobre todos os pontos do exercício. Dá para ver que você foi além do básico: gerou dados sintéticos com numpy, criou e leu o CSV dinamicamente, explorou iloc e loc com diferentes tipos de seleção, e ainda fez a substituição de categoria com df.loc[vestuario.index, "categoria"] = "Moda", que é uma prática mais segura do que usar df[mask] = valor diretamente.

No desafio com o LLM, a lógica do loop está correta. Uma observação que vale considerar: dependendo do tamanho do dataset completo, o loop review por review pode ficar bem lento e consumir bastante da cota da API. Uma alternativa para projetos maiores é processar em lotes menores ou adicionar um time.sleep entre chamadas para evitar erro de rate limit. No seu caso, até que o comentário # df=df.head(5) mostra que você já pensou nisso durante os testes.

Conte com a Alura para evoluir seus estudos. Em caso de dúvidas, fico à disposição.

Bons estudos!

Sucesso

Imagem da comunidade