Saltar al contenido

# graficos-en-matplotlib

Gráficos en Matplotlib

Volver a la portada del curso
Notebook

Análisis de Datos de Ventas

Sección 6 · Proyecto Final

Análisis de Datos de Ventas

Hasta aquí cada lección agregó un tipo de gráfico. El notebook analisis-ventas invierte el orden: parte de las preguntas que haría la dirección de PyShop y elige el gráfico que mejor responde cada una. Recorre los KPIs del año, la tendencia mensual y trimestral, los rankings por categoría y región, la composición por canal y dos casos en que los datos no muestran lo que uno esperaría. Termina con conclusiones escritas con cifras, el mismo formato que pide el proyecto final. Como todos los notebooks del curso, es autocontenido y determinista.

1. De la pregunta al gráfico

El notebook abre con una tabla que guía todo el análisis:

PreguntaEjemploGráfico
Tendencia¿cómo evolucionó el ingreso?línea
Ranking¿qué categoría vende más?barras ordenadas
Composición¿qué parte aporta cada canal?donut o barras apiladas al 100 %
Relación¿más pedidos, más ingreso?dispersión
Distribución¿cómo se reparten los montos?histograma

Escribe la pregunta antes de abrir Matplotlib. Si no puedes formularla en una frase, el gráfico tampoco la va a responder.

2. KPIs como tarjetas

Cuatro números resumen el año: ingreso de 10.93 M, 6,000 pedidos, ticket medio de 1,822.12 MXN y calificación media de 4.14. En un tablero se presentan como tarjetas: cada una es un Axes sin ejes con un valor grande y un nombre pequeño debajo.

fig, axs = plt.subplots(1, 4, figsize=(12, 1.8))
for ax, (nombre, valor) in zip(axs, kpis.items()):
    ax.axis("off")
    ax.text(0.5, 0.62, valor, ha="center", fontsize=20,
            fontweight="bold", color="#2563EB")
    ax.text(0.5, 0.18, nombre, ha="center", fontsize=11)

Las coordenadas de ax.text van de 0 a 1 dentro del panel cuando no hay datos dibujados, así que (0.5, 0.62) queda centrado y un poco arriba.

3. Tendencia y trimestres

La línea mensual muestra la forma del año y, a su lado, las barras por trimestre muestran el peso de cada parte: 2.27, 2.38, 2.55 y 3.73 M. El cuarto trimestre aporta el 34.1 % del ingreso, y solo noviembre y diciembre suman el 26.2 %. La barra de T4 va en azul y las demás en gris: el color dirige la mirada a la conclusión. bar_label recibe aquí una lista de textos propios con el monto y el porcentaje en dos renglones.

4. Rankings

Dos paneles de barras horizontales ordenadas, con el valor al final de cada barra (padding=3 lo separa del borde). Electrónica concentra 6.10 de los 10.93 M; Centro es la región más fuerte con 4.22 M, y Norte (2.51 M) y Occidente (2.46 M) casi empatan. Se amplía el límite del eje x un 18 % para que las etiquetas no se corten.

5. Composición: barras apiladas al 100 %

Para comparar el reparto por canal dentro de cada categoría, se normaliza cada fila de la tabla categoría × canal para que sume 100 (cc.div(cc.sum(axis=1), axis=0) * 100) y se apilan barras horizontales con left=. El resultado es parejo: Web entre 43 y 47 %, App entre 33 y 39 % y Marketplace entre 17.5 y 20.7 %. Ninguna categoría depende de un canal distinto, y eso también es un hallazgo.

6. Dos casos sin patrón

Calificación por categoría. Las medias van de 4.09 a 4.17. El notebook las dibuja dos veces: con el eje y entre 4.05 y 4.2 parecen muy distintas; con el eje de 0 a 5 son casi iguales. El segundo gráfico es el honesto.

Día de la semana. 2025 tiene 53 miércoles y 52 de cada otro día, así que se compara el promedio por día y no la suma:

dow = ventas["fecha"].dt.dayofweek
fechas = pd.date_range("2025-01-01", "2025-12-31")
n_dias = pd.Series(fechas.dayofweek).value_counts().sort_index()
promedio = ventas.groupby(dow)["total"].sum() / n_dias / 1e3
print(promedio.round(1).tolist())
# [33.5, 29.1, 29.6, 31.2, 27.5, 30.7, 28.0]

Los promedios van de 27.5 mil (viernes) a 33.5 mil (lunes) sin una forma que se repita. En estos datos sintéticos el día de cada pedido se eligió al azar: la diferencia es ruido y no hay base para recomendar un día de promociones. Un buen análisis reporta también lo que no encontró.

7. Conclusiones

La sección final escribe cuatro conclusiones, cada una con su cifra y su gráfico: la temporada alta (T4 con 34.1 %), la concentración en Electrónica (55.8 %) y en Centro, la estabilidad de los canales (Web 44.2 %) y la ausencia de efecto del día y de diferencias de calificación.

Ejercicios

Cuatro funciones con pruebas: calcular el diccionario de KPIs, el ingreso por trimestre, elegir el gráfico según el tipo de pregunta y dibujar las barras trimestrales con solo el trimestre mayor resaltado. Las soluciones están al final.

En qué fijarse

  • Cada gráfico responde una pregunta; el título puede decir la respuesta.
  • Color para lo importante, gris para el contexto.
  • Compara promedios cuando los grupos tienen distinto tamaño.
  • Un eje recortado convierte una diferencia mínima en una «tendencia».

Recursos