Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 86 additions & 0 deletions analisis.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
import json
from datetime import datetime


def cargar_ventas(ruta_archivo):
"""Lee el archivo JSON y devuelve la lista de ventas."""
with open(ruta_archivo, "r", encoding="utf-8") as archivo:
return json.load(archivo)


def calcular_total_venta(venta):
"""Devuelve precio * cantidad para una venta."""
return venta["precio"] * venta["cantidad"]


def ventas_por_categoria(ventas):
"""Agrupa las ventas por categoría. Devuelve un dict: { "categoria": total_euros }"""
resultado = {}
for venta in ventas:
categoria = venta["categoria"]
total = calcular_total_venta(venta)
if categoria in resultado:
resultado[categoria] += total
else:
resultado[categoria] = total
return resultado


def producto_mas_vendido(ventas):
"""Devuelve el nombre del producto con mayor ingreso total."""
mejor = max(ventas, key=calcular_total_venta)
return mejor["producto"], calcular_total_venta(mejor)


def ventas_en_fecha(ventas, fecha_str):
"""Filtra ventas de una fecha específica (formato YYYY-MM-DD)."""
return [v for v in ventas if v["fecha"] == fecha_str]


def guardar_informe(informe, ruta):
"""Guarda el informe en un archivo JSON."""
with open(ruta, "w", encoding="utf-8") as archivo:
json.dump(informe, archivo, indent=2, ensure_ascii=False)


def main():
# Cargar datos
ventas = cargar_ventas("ventas.json")

# Calcular datos
total_ventas = len(ventas)
ingresos_totales = sum(calcular_total_venta(v) for v in ventas)
categorias = ventas_por_categoria(ventas)
producto_top, ingreso_top = producto_mas_vendido(ventas)
ventas_16 = ventas_en_fecha(ventas, "2026-01-16")

# Mostrar informe
print("============================")
print(" INFORME DE VENTAS")
print("============================")
print(f"\nTotal de ventas: {total_ventas}")
print(f"Ingresos totales: {ingresos_totales:,.2f} €\n")

print("--- Por categoría ---")
for categoria, total in categorias.items():
print(f"{categoria}: {total:,.2f} €")

print(f"\nProducto más rentable: {producto_top} ({ingreso_top:,.2f} €)")

print("\n--- Ventas del 16/01/2026 ---")
for v in ventas_16:
print(f"- {v['producto']}: {calcular_total_venta(v):,.2f} €")

# Guardar informe JSON
informe = {
"generado_en": datetime.now().isoformat(),
"total_ventas": total_ventas,
"ingresos_totales": round(ingresos_totales, 2),
"por_categoria": {k: round(v, 2) for k, v in categorias.items()},
"producto_top": producto_top
}
guardar_informe(informe, "informe.json")
print("\n✅ Informe guardado en informe.json")


main()
11 changes: 11 additions & 0 deletions informe.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"generado_en": "2026-05-19T16:18:53.382507",
"total_ventas": 7,
"ingresos_totales": 4519.74,
"por_categoria": {
"electronica": 3419.86,
"muebles": 799.98,
"libros": 299.9
},
"producto_top": "Laptop"
}
9 changes: 9 additions & 0 deletions ventas.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[
{ "id": 1, "producto": "Laptop", "precio": 899.99, "cantidad": 2, "categoria": "electronica", "fecha": "2026-01-15" },
{ "id": 2, "producto": "Teclado", "precio": 49.99, "cantidad": 5, "categoria": "electronica", "fecha": "2026-01-16" },
{ "id": 3, "producto": "Silla", "precio": 299.99, "cantidad": 1, "categoria": "muebles", "fecha": "2026-01-16" },
{ "id": 4, "producto": "Monitor", "precio": 349.99, "cantidad": 3, "categoria": "electronica", "fecha": "2026-01-17" },
{ "id": 5, "producto": "Libro Python", "precio": 29.99, "cantidad": 10, "categoria": "libros", "fecha": "2026-01-18" },
{ "id": 6, "producto": "Escritorio", "precio": 499.99, "cantidad": 1, "categoria": "muebles", "fecha": "2026-01-18" },
{ "id": 7, "producto": "Auriculares", "precio": 79.99, "cantidad": 4, "categoria": "electronica", "fecha": "2026-01-19" }
]