# graficos-con-python
Gráficos con Python
Volver a la portada del cursoDesarrollo 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.