import pandas as pd
import random
nombres_productos_posibles = [
'Laptop', 'Smartphone', 'Tablet', 'Smartwatch', 'Auriculares', 'Teclado', 'Mouse', 'Monitor', 'Impresora', 'Altavoz',
'Cámara', 'Disco Duro', 'Router', 'Webcam', 'Micrófono', 'Gafas VR', 'Consola', 'Control Remoto', 'Proyector', 'Batería Externa'
]
categorias_posibles = ['Electrónica', 'Hogar', 'Oficina', 'Entretenimiento', 'Accesorios']
productos_elegidos = random.sample(nombres_productos_posibles, 10)
data = {
'Nombre del producto': productos_elegidos,
'Categoría': [random.choice(categorias_posibles) for _ in range(10)],
'Precio': [round(random.uniform(50, 1500), 2) for _ in range(10)],
'Evaluación': [round(random.uniform(1.0, 5.0), 1) for _ in range(10)],
'Ítems vendidos': [random.randint(5, 500) for _ in range(10)]
}
df_productos = pd.DataFrame(data)
df_productos
df_reviews=pd.read_csv("/content/reviews - reviews.csv")
display(df_reviews)
df_reviews.head()
df_reviews["asin"]
df_reviews["asin"].unique()
df_reviews[df_reviews["asin"] == "B007WTAJTO"]
lista_reviews=[]
with open("reviews - reviews.csv", "r", encoding="utf-8") as archivo:
for review in archivo:
lista_reviews.append(review.strip())
lista_reviews
import pandas as pd
import json
import os
from google.colab import userdata
from google import genai
# Configuración del cliente
os.environ["Alura"] = userdata.get('alura')
client = genai.Client(api_key=userdata.get('alura'))
def clasificar_reviews(lista_reviews_csv):
# Definimos el prompt estricto pasándole el CSV completo
prompt = f"""
Actúa como un modelo de análisis de sentimiento experto y estructurador de datos JSON.
Tu única tarea es analizar el sentimiento de la siguiente lista de reviews en formato CSV y clasificar cada una estrictamente en una de estas tres categorías: "Positivo", "Negativo" o "Neutro".
CSV de entrada:
{lista_reviews_csv}
REGLAS CRÍTICAS DE SALIDA:
1. Devuelve ÚNICAMENTE un objeto JSON válido con la siguiente estructura exacta:
{{
"Sentimientos": ["Clasificación1", "Clasificación2", "Clasificación3", ...]
}}
2. El orden de la lista "Sentimientos" debe coincidir perfectamente con el orden de las reviews del CSV de entrada.
3. NO utilices bloques de código Markdown (prohibido usar ```json o ```).
4. NO escribas texto introductorio, ni saludos, ni notas explicativas. Solo el JSON crudo.
"""
# Llamada a Gemini usando el modelo rápido 2.5-flash
respuesta = client.models.generate_content(
model="gemini-2.5-flash",
contents=prompt
)
try:
# Convertimos el texto JSON puro del modelo en un diccionario real de Python
diccionario_sentimientos = json.loads(respuesta.text.strip())
return diccionario_sentimientos
except json.JSONDecodeError:
print("Error: El modelo no devolvió un JSON limpio. Respuesta obtenida:")
print(respuesta.text)
return None
clasificar_reviews(lista_reviews)
import io
resultado_dict = clasificar_reviews(lista_reviews)
df = pd.read_csv(io.StringIO("\n".join(lista_reviews)))
df['Sentimiento'] = resultado_dict['Sentimientos']
display(df)