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
113 changes: 113 additions & 0 deletions analisis.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
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 }
"""
categorias = {}

for venta in ventas:
categoria = venta["categoria"]
total = calcular_total_venta(venta)

if categoria in categorias:
categorias[categoria] += total
else:
categorias[categoria] = total

return categorias


def producto_mas_vendido(ventas):
"""Devuelve el nombre del producto con mayor ingreso total."""
producto_top = ""
mayor_total = 0

for venta in ventas:
total = calcular_total_venta(venta)

if total > mayor_total:
mayor_total = total
producto_top = venta["producto"]

return producto_top


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

for venta in ventas:
fecha_venta = venta["fecha"][:10]

if fecha_venta == fecha_str:
ventas_filtradas.append(venta)

return ventas_filtradas


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, ensure_ascii=False, indent=4)


def main():
ventas = cargar_ventas("ventas.json")

print("============================")
print(" INFORME DE VENTAS")
print("============================")

total_ventas = len(ventas)

ingresos_totales = 0
for venta in ventas:
ingresos_totales += calcular_total_venta(venta)

print(f"\nTotal de ventas: {total_ventas}")
print(f"Ingresos totales: {ingresos_totales:.2f} €")

print("\n--- Por categoría ---")
categorias = ventas_por_categoria(ventas)

for categoria, total in categorias.items():
print(f"{categoria}: {total:.2f} €")

mejor_producto = producto_mas_vendido(ventas)
print(f"\nProducto más rentable: {mejor_producto}")

print("\n--- Ventas del 2026-01-16 ---")
ventas_fecha = ventas_en_fecha(ventas, "2026-01-16")

for venta in ventas_fecha:
total = calcular_total_venta(venta)
print(f"- {venta['producto']}: {total:.2f} €")

informe = {
"generado_en": datetime.now().isoformat(),
"total_ventas": total_ventas,
"ingresos_totales": ingresos_totales,
"por_categoria": categorias,
"producto_top": mejor_producto
}

guardar_informe(informe, "informe.json")


if __name__ == "__main__":
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-19T15:59:48.981257",
"total_ventas": 7,
"ingresos_totales": 4519.740000000001,
"por_categoria": {
"electronica": 3419.8599999999997,
"muebles": 799.98,
"libros": 299.9
},
"producto_top": "Laptop"
}
Binary file added lab-python-d1/requirements.txt
Binary file not shown.
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" }
]