Crear tablas JSON con Python

Crear tablas JSON con Python

Juan M. Gutierrez

Crear Tablas HTML desde JSON con Python

Tablas JSON con Python

Introducción

Imagina que trabajas en una empresa de comercio electrónico llamada "TechStore". Esta empresa vende productos tecnológicos como laptops, teléfonos, tablets y monitores. Para gestionar sus ventas y analizar el rendimiento de sus productos, necesitan una base de datos organizada y un sistema que les permita realizar consultas y análisis de datos de manera eficiente.

En esta guía, aprenderás cómo convertir datos almacenados en un archivo JSON en tablas HTML utilizando Python, Pandas y la librería Rich. Este proceso es ideal para visualizar datos en páginas web de manera dinámica.

POO y Ciencia de Datos

La Programación Orientada a Objetos (POO) es un paradigma de programación que nos permite modelar el mundo real en objetos con propiedades y comportamientos. En este contexto, podemos crear clases como "Producto" y "Venta", que tendrán atributos como "nombre", "precio", "fecha", "cantidad", etc.

La ciencia de datos nos proporciona herramientas y técnicas para analizar grandes volúmenes de datos y extraer información valiosa. En este caso, podemos utilizar pandas para crear un DataFrame con los datos de ventas y productos, y luego aplicar técnicas de análisis para identificar patrones, tendencias y relaciones entre las variables.

Historia

TechStore ha estado operando durante un año y ha recopilado una gran cantidad de datos de ventas. Quieren utilizar esta información para:

  • Identificar los productos más vendidos: ¿Cuáles son los productos que generan más ingresos?

  • Analizar las tendencias de ventas: ¿Hay alguna estacionalidad en las ventas de ciertos productos?

  • Optimizar los precios: ¿Cómo pueden ajustar los precios para maximizar las ganancias?

  • Mejorar la gestión del inventario: ¿Cuántas unidades de cada producto deben tener en stock para satisfacer la demanda?

Tabla de ejemplo

Para responder a estas preguntas, necesitamos una tabla con datos de ejemplo. La tabla "ventas" podría tener las siguientes columnas:

  • id_venta: Identificador único de la venta.

  • id_producto: Identificador del producto vendido.

  • fecha: Fecha de la venta.

  • cantidad: Cantidad de productos vendidos.

  • pagada: Indica si la venta ha sido pagada.

Paso 1: Estructura del Archivo JSON

Supongamos que tienes un archivo JSON llamado database.json con la siguiente estructura:

{
  "productos": [
    {"id": 1, "nombre": "Laptop", "precio": 1200},
    {"id": 2, "nombre": "Teléfono", "precio": 800},
    {"id": 3, "nombre": "Tablet", "precio": 600}
  ],
  "ventas": [
    {"id_venta": 1, "id_producto": 1, "fecha": "2023-10-01", "cantidad": 2, "pagada": true},
    {"id_venta": 2, "id_producto": 2, "fecha": "2023-10-02", "cantidad": 1, "pagada": false}
  ]
}

Paso 2: Código Python Completo

Aquí tienes el código completo para convertir el JSON en tablas HTML:

import json
import pandas as pd
from rich.console import Console
from rich.table import Table
import os

# Definición de la clase Venta
class Venta:
    def __init__(self, id_venta, id_producto, fecha, cantidad, pagada=False):
        self.id_venta = id_venta
        self.id_producto = id_producto
        self.fecha = fecha
        self.cantidad = cantidad
        self.pagada = pagada

    def __dict__(self):
        return {
            "ID Venta": self.id_venta,
            "ID Producto": self.id_producto,
            "Fecha": self.fecha,
            "Cantidad": self.cantidad,
            "Pagada": "Sí" if self.pagada else "No"
        }

# Función para crear tablas desde JSON
def crear_tabla_desde_json(nombre_archivo="database.json"):
    console = Console()

    try:
        # Cargar el archivo JSON
        if os.path.exists(nombre_archivo):
            with open(nombre_archivo, 'r', encoding='utf-8') as f:
                datos_json = json.load(f)
        elif os.path.exists(os.path.join("data", nombre_archivo)):
            with open(os.path.join("data", nombre_archivo), 'r', encoding='utf-8') as f:
                datos_json = json.load(f)
        else:
            raise FileNotFoundError(f"No se encontró el archivo {nombre_archivo}")
    except Exception as e:
        console.print(f"[bold red]Error:[/bold red] {e}")
        return None, None

    try:
        # Crear DataFrames con Pandas
        df_productos = pd.DataFrame(datos_json['productos'])
        ventas = [Venta(**venta_dict) for venta_dict in datos_json['ventas']]
        df_ventas = pd.DataFrame([venta.__dict__() for venta in ventas])

        # Mostrar tablas en la terminal con Rich (opcional)
        if not df_productos.empty:
            tabla_productos = Table("Productos", *df_productos.columns)
            for _, row in df_productos.iterrows():
                tabla_productos.add_row(*row.astype(str))
            console.print(tabla_productos)

        if not df_ventas.empty:
            tabla_ventas = Table("Ventas", *df_ventas.columns)
            for _, row in df_ventas.iterrows():
                tabla_ventas.add_row(*row.astype(str))
            console.print(tabla_ventas)

        # Convertir DataFrames a HTML
        tabla_productos_html = df_productos.to_html(index=False)
        tabla_ventas_html = df_ventas.to_html(index=False)

        return tabla_productos_html, tabla_ventas_html
    except Exception as e:
        console.print(f"[bold red]Error:[/bold red] {e}")
        return None, None

# Guardar las tablas en archivos HTML
tabla_productos_html, tabla_ventas_html = crear_tabla_desde_json()

if tabla_productos_html and tabla_ventas_html:
    with open("tabla_productos.html", "w", encoding='utf-8') as f:
        f.write(tabla_productos_html)
    with open("tabla_ventas.html", "w", encoding='utf-8') as f:
        f.write(tabla_ventas_html)
    print("Tablas guardadas en tabla_productos.html y tabla_ventas.html")

Resultado

Al ejecutar el código, se generarán dos archivos HTML con las tablas de productos y ventas.

Consideraciones éticas

Es importante recordar que el uso de datos personales debe ser ético y responsable. En este contexto, los datos de ventas y productos se utilizan únicamente con fines educativos y de análisis. No se recopila información personal de los clientes y se garantiza la privacidad de los datos.

¡Espero que esta guía te haya sido útil! Si tienes alguna pregunta, no dudes en contactarme.

🚀Comparte este artículo

Math Chaos Texture
🎓

¿Te gustó este contenido?

Obtén certificados verificables en Python, Data Science y Machine Learning.

Ver Certificaciones Disponibles →