Proyecto: analizar ventas desde un CSV con Python
Lee un archivo CSV, súmalo, agrúpalo por categoría y encuentra el producto más vendido. Con un analizador interactivo para probarlo con tus propios datos.
Qué vas a construir
Un script que abre un CSV de ventas y responde preguntas: ¿cuánto se ha facturado?, ¿qué categoría vende más?, ¿cuál es el producto estrella? Es el proyecto ideal para practicar ficheros, bucles y diccionarios.
El CSV de ejemplo tiene columnas fecha, producto, categoria, unidades, precio. Edítalo si quieres y pulsa un botón:
Paso 1: leer el CSV
El módulo csv viene con Python. DictReader convierte cada fila en un diccionario usando la cabecera como claves.
import csv
with open("ventas.csv", encoding="utf-8") as f:
filas = list(csv.DictReader(f))
print(f"Se han leído {len(filas)} filas")
print(filas[0]) # {'fecha': '2024-01-03', 'producto': 'Teclado', ...}
int(fila["unidades"]), float(fila["precio"]).Paso 2: el total de ventas
Cada fila factura unidades × precio. Sumamos todas con una expresión generadora.
total = sum(
int(fila["unidades"]) * float(fila["precio"])
for fila in filas
)
print(f"Total facturado: {total:.2f} €")
Paso 3: agrupar por categoría con un diccionario
Un diccionario categoria → importe acumulado. dict.get(clave, 0) evita el error cuando la categoría aún no existe.
por_categoria = {}
for fila in filas:
cat = fila["categoria"]
importe = int(fila["unidades"]) * float(fila["precio"])
por_categoria[cat] = por_categoria.get(cat, 0) + importe
for cat, importe in sorted(por_categoria.items(), key=lambda x: -x[1]):
print(f"{cat:15} {importe:8.2f} €")
Paso 4: el producto más vendido
Otro diccionario, esta vez producto → unidades. max() con key devuelve la clave con el valor más alto.
unidades_por_producto = {}
for fila in filas:
p = fila["producto"]
unidades_por_producto[p] = unidades_por_producto.get(p, 0) + int(fila["unidades"])
estrella = max(unidades_por_producto, key=unidades_por_producto.get)
print(f"Más vendido: {estrella} ({unidades_por_producto[estrella]} uds)")
Cómo seguir
- Usar
collections.Counterydefaultdictpara acortar el código de agrupar. - Filtrar por mes con
fila["fecha"].startswith("2024-01"). - Escribir un CSV de resumen con
csv.writer. - Dar el salto a pandas:
df.groupby("categoria")["importe"].sum()hace lo mismo en una línea.