Usaremos una colección de ventas para responder preguntas. La meta no es producir muchas métricas: es aprender un proceso que puedas repetir con cualquier conjunto pequeño de datos.
El recorrido será: mirar → limpiar → preguntar → calcular → comprobar → explicar.
Responder una pregunta completa filtrando, agregando y agrupando un conjunto pequeño de datos.
Antes del cálculo, entiende qué representa una fila
Una lista de diccionarios se parece a una tabla: cada diccionario es una fila y cada clave funciona como una columna. Empieza inspeccionando una fila real, no imaginando qué debería contener.
ventas = [
{"producto": "Cuaderno", "categoria": "Papelería", "importe": 12.5},
{"producto": "Bolígrafo", "categoria": "Papelería", "importe": 3.0},
{"producto": "Cable", "categoria": "Tecnología", "importe": 9.5},
]
print(len(ventas))
print(ventas[0])Antes de sumar nada, ya puedes responder: hay tres registros; importe es numérico; categoria contiene texto. Esa inspección evita muchos errores silenciosos.
Limpia únicamente lo que impide responder la pregunta
En datos reales puede aparecer un importe como texto, un campo vacío o una fila incompleta. “Limpiar” no significa transformar todo por costumbre. Significa corregir aquello que bloquea o invalida el análisis que quieres hacer.
fila = {"producto": "Agenda", "importe": "8.50"}
importe = float(fila["importe"])
print(importe + 1.5)Resultado plausible ≠ resultado correcto. Si mezclas euros y céntimos, o números y textos, el programa puede fallar; peor aún, a veces puede producir un número que parece razonable. Comprueba unidades y tipos antes de interpretar.
Traduce cada pregunta a una operación concreta
Muchos análisis pequeños se reducen a tres movimientos. Reconocer cuál necesitas evita escribir código a ciegas.
- Filtrar: ¿qué filas cumplen una condición?
- Agregar: ¿cuánto suman, cuántas hay o cuál es el promedio?
- Agrupar: ¿quiero el cálculo separado por categoría?
ventas = [
{"categoria": "Papelería", "importe": 12.5},
{"categoria": "Papelería", "importe": 3.0},
{"categoria": "Tecnología", "importe": 9.5},
]
papeleria = [v for v in ventas if v["categoria"] == "Papelería"]
total = sum(v["importe"] for v in papeleria)
print(total)Primero seleccionamos las filas relevantes; después resumimos el campo numérico. Mantener esos pasos separados hace que sea fácil comprobar dónde aparece un resultado extraño.
Agrupar significa mantener varios totales a la vez
Cuando la pregunta cambia a “¿cuánto vende cada categoría?”, ya no basta con un único acumulador. Necesitamos un diccionario donde cada categoría tenga su propio total.
ventas = [
{"categoria": "A", "importe": 10},
{"categoria": "B", "importe": 7},
{"categoria": "A", "importe": 5},
]
totales = {}
for venta in ventas:
categoria = venta["categoria"]
totales[categoria] = totales.get(categoria, 0) + venta["importe"]
print(totales)get(categoria, 0) significa: “dame el total anterior; si todavía no existe, empieza en cero”. Esa única idea aparece en muchos análisis de frecuencia y agrupación.
Responde una pregunta completa en tres checkpoints
Pregunta del proyecto: ¿cuánto vendió cada categoría y cuál vendió más?
Checkpoint 1 · filtrar
Quédate solo con las ventas de libros.
2
La salida aparecerá aquí.
Necesito una pista
- Compara
venta["categoria"]con"libros".
Ver una solución razonada
ventas = [
{"categoria": "libros", "importe": 15},
{"categoria": "juegos", "importe": 20},
{"categoria": "libros", "importe": 10},
]
seleccionadas = [venta for venta in ventas if venta["categoria"] == "libros"]
print(len(seleccionadas))Checkpoint 2 · agregar
Suma los importes de las ventas de libros. Con tres filas puedes comprobarlo a mano: 15 + 10 = 25.
25
La salida aparecerá aquí.
Necesito una pista
- Suma
v["importe"]para cada venta delibros.
Ver una solución razonada
ventas = [
{"categoria": "libros", "importe": 15},
{"categoria": "juegos", "importe": 20},
{"categoria": "libros", "importe": 10},
]
libros = [v for v in ventas if v["categoria"] == "libros"]
total = sum(v["importe"] for v in libros)
print(total)Checkpoint 3 · agrupar
Acumula un total por categoría y decide cuál tiene mayor importe.
{'libros': 25, 'juegos': 20}
librosLa salida aparecerá aquí.
Necesito una pista
- Usa
totales.get(categoria, 0)para partir de cero. - Suma el importe de la venta actual al total de esa categoría.
Ver una solución razonada
ventas = [
{"categoria": "libros", "importe": 15},
{"categoria": "juegos", "importe": 20},
{"categoria": "libros", "importe": 10},
]
totales = {}
for venta in ventas:
categoria = venta["categoria"]
totales[categoria] = totales.get(categoria, 0) + venta["importe"]
print(totales)
print(max(totales, key=totales.get))“En este conjunto, libros suma 25 y juegos 20; libros es la categoría con mayor importe.” Un análisis termina cuando puedes explicar qué significa el número, no cuando consigues imprimirlo.
Un número sin contexto todavía no cuenta una historia
Imagina que el promedio de ventas es 40 €. ¿Es mucho o poco? Falta saber cuántas filas hay, de qué periodo son, si existen valores extremos y qué representa exactamente “venta”. Por eso un análisis termina explicando el resultado, no simplemente imprimiéndolo.
Comprobación mínima antes de confiar: revisa el número de registros, calcula un caso pequeño a mano y prueba también un conjunto vacío si tu función puede recibirlo.
puedes formular una pregunta sobre una lista de registros, identificar si necesitas filtrar/agregar/agrupar, obtener el resultado y explicar en una frase qué significa.