Saltar al contenido

# graficos-con-python

Gráficos con Python

Volver a la portada del curso
Notebook

Desarrollo del Proyecto Final

Sección 5 · Proyecto Final y Comparaciones

Desarrollo del proyecto final

En este notebook construyes, paso a paso, el proyecto final del curso: un análisis visual completo de las ventas de una tienda. Combinarás lo aprendido en las tres bibliotecas: Matplotlib para una figura estática lista para un informe, Seaborn para el análisis estadístico y Plotly para una versión interactiva que se pueda explorar. Los datos se generan con una semilla fija, así que el notebook corre igual en cualquier computadora.

Paso 1: preparar los datos

Todo buen gráfico empieza por datos ordenados. Generas un año de ventas diarias para tres categorías, con una tendencia, una estacionalidad semanal y algo de ruido, y lo guardas en un DataFrame en formato largo, que es el que mejor entienden Seaborn y Plotly.

import numpy as np
import pandas as pd

rng = np.random.default_rng(42)
fechas = pd.date_range("2025-01-01", "2025-12-31", freq="D")
filas = []
for categoria, base in [("Electrónica", 120), ("Hogar", 80), ("Deportes", 60)]:
    tendencia = np.linspace(0, 30, len(fechas))
    semanal = 15 * (fechas.dayofweek >= 5)
    ventas = base + tendencia + semanal + rng.normal(0, 10, len(fechas))
    filas.append(pd.DataFrame({"fecha": fechas, "categoria": categoria, "ventas": ventas}))
df = pd.concat(filas, ignore_index=True)
df["mes"] = df["fecha"].dt.month
print(df.shape)
print(df.groupby("categoria")["ventas"].mean().round(1))

Paso 2: la figura estática para el informe

Con Matplotlib y Seaborn construyes una figura de dos paneles: la evolución mensual de cada categoría y la distribución de las ventas diarias. Etiquetas claras, colores con intención y un título que dice la conclusión, no solo el tema.

import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns

rng = np.random.default_rng(42)
fechas = pd.date_range("2025-01-01", "2025-12-31", freq="D")
df = pd.concat([pd.DataFrame({"fecha": fechas, "categoria": c,
                              "ventas": b + np.linspace(0, 30, len(fechas)) + rng.normal(0, 10, len(fechas))})
                for c, b in [("Electrónica", 120), ("Hogar", 80), ("Deportes", 60)]], ignore_index=True)
df["mes"] = df["fecha"].dt.month
mensual = df.groupby(["mes", "categoria"], as_index=False)["ventas"].sum()

sns.set_theme(style="whitegrid")
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4.5))
sns.lineplot(data=mensual, x="mes", y="ventas", hue="categoria", marker="o", ax=ax1)
ax1.set_title("Todas las categorías crecen durante el año")
sns.boxplot(data=df, x="categoria", y="ventas", ax=ax2)
ax2.set_title("Electrónica vende más cada día")
fig.tight_layout()
fig.savefig("informe_ventas.png", dpi=150)

Paso 3: la versión interactiva

La misma información en Plotly permite al lector filtrar categorías haciendo clic en la leyenda y consultar el valor exacto de cada mes. Exportada a HTML, se comparte como un archivo más.

Paso 4: revisar antes de entregar

Reinicia el kernel y ejecuta el notebook completo de principio a fin. Revisa que cada gráfico tenga título, etiquetas y unidades, y que los colores se distingan también en escala de grises.

Errores comunes

  • Trabajar con los datos en formato ancho cuando Seaborn y Plotly esperan formato largo.
  • Títulos que describen el tema ("Ventas") en lugar de la conclusión ("Todas las categorías crecen").
  • Olvidar fijar la semilla y obtener resultados distintos en cada ejecución.
  • Entregar un notebook que depende de celdas ejecutadas fuera de orden.

Cierre

Datos ordenados, una figura estática que comunica la conclusión y una versión interactiva para explorar: esa es la estructura del proyecto final. En la lección de entrega revisarás los criterios con los que se evalúa.

Recursos