0Pricing
Pandas & NumPy Academy · Lección

Visualización de tendencias mensuales

Represente los ingresos mensuales con un gráfico de líneas, superponga una media móvil de 3 meses y anote los meses de máximos y mínimos.

Visualización de tendencias mensuales es una lección gratuita de Pandas & NumPy Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Pandas & NumPy Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Pandas & NumPy Academy incluye 4 lecciones en total.

Cálculo de los totales mensuales de ingresos

Antes de crear el gráfico, agregue el DataFrame de ventas para obtener los totales mensuales. Agrupe por la columna Period year_month y sume los ingresos. Convierta el PeriodIndex en un DatetimeIndex con .to_timestamp() para que el formateador de fechas de Matplotlib muestre correctamente las etiquetas de los ejes. Ordenar por índice garantiza que el gráfico de líneas avance cronológicamente de izquierda a derecha.

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_parquet('sales_features.parquet')

monthly = df.groupby('year_month')['revenue'].sum().sort_index()
monthly.index = monthly.index.to_timestamp()
print(monthly.head())

Creación del gráfico de líneas de ingresos mensuales

Cree una Figure y unos Axes con plt.subplots(figsize=(12, 5)) y llame a ax.plot() para dibujar la tendencia de los ingresos mensuales. Utilice marker='o' para colocar un punto en cada mes, de modo que los puntos de datos individuales sean visibles incluso cuando la línea sea suave. Establezca el color y el ancho de línea para que la tendencia principal destaque frente a las superposiciones que añada posteriormente.

fig, ax = plt.subplots(figsize=(12, 5))

ax.plot(monthly.index, monthly.values,
        color='steelblue', linewidth=2, marker='o', markersize=5,
        label='Monthly Revenue')

ax.set_title('Monthly Revenue Trend')
ax.set_xlabel('Month')
ax.set_ylabel('Revenue (USD)')
plt.tight_layout()
plt.show()

Superposición de una media móvil de 3 meses

Una línea de ingresos mensuales sin procesar puede parecer irregular debido al ruido estacional. Superponga una media móvil de 3 meses calculada con monthly.rolling(3).mean() para mostrar con mayor claridad la tendencia subyacente. Represéntela como una línea discontinua de un color contrastante para que destaque frente a la serie sin ocultarla.

rolling_avg = monthly.rolling(3).mean()

ax.plot(rolling_avg.index, rolling_avg.values,
        color='darkorange', linewidth=2, linestyle='--',
        label='3-Month Moving Avg')

ax.legend()
plt.show()

Anotación del mes de mayor actividad

Utilice ax.annotate() para marcar el mes con mayores ingresos. Encuentre el máximo con monthly.idxmax() y su valor con monthly.max(). La flecha de anotación apunta desde una etiqueta de texto hasta el punto máximo de los datos, haciendo que la información sea inmediatamente visible para cualquier lector del gráfico, incluidos quienes lo reciban como PNG o PDF.

peak_date = monthly.idxmax()
peak_val = monthly.max()

ax.annotate(f'Peak: ${peak_val:,.0f}',
            xy=(peak_date, peak_val),
            xytext=(peak_date, peak_val * 1.1),
            arrowprops=dict(arrowstyle='->', color='red'),
            color='red', fontsize=10)
plt.show()

Anotación del mes de menor actividad

Del mismo modo, marque el mes con los ingresos más bajos mediante monthly.idxmin() para detectar posibles patrones estacionales o interrupciones. Las anotaciones tanto del máximo como del mínimo ofrecen una visión completa: permiten a las partes interesadas ver no solo el mejor mes, sino también hasta qué punto pueden caer los ingresos, lo que ayuda a planificar el flujo de caja.

trough_date = monthly.idxmin()
trough_val = monthly.min()

ax.annotate(f'Trough: ${trough_val:,.0f}',
            xy=(trough_date, trough_val),
            xytext=(trough_date, trough_val * 0.85),
            arrowprops=dict(arrowstyle='->', color='navy'),
            color='navy', fontsize=10)
plt.show()

Formato de las etiquetas de las marcas de fecha

Las etiquetas de fecha predeterminadas de Matplotlib suelen superponerse o utilizar un formato difícil de leer. Importe mdates desde matplotlib y configure un MonthLocator y un DateFormatter para controlar la frecuencia de las marcas y el formato de las etiquetas. Girar las etiquetas de las marcas 45 grados evita que se superpongan en un eje de 12 meses.

import matplotlib.dates as mdates

ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))

plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()

Añadir una región sombreada para el cuarto trimestre

Resalte el periodo del cuarto trimestre (octubre–diciembre) con un fondo sombreado mediante ax.axvspan(). Esto hace que los patrones estacionales sean visibles de inmediato: si el máximo cae sistemáticamente dentro de la zona sombreada, el cuarto trimestre es un periodo clave de ventas al que conviene dirigir promociones. El parámetro alpha controla la transparencia del sombreado.

import datetime

q4_start = datetime.datetime(2023, 10, 1)
q4_end = datetime.datetime(2023, 12, 31)

ax.axvspan(q4_start, q4_end, alpha=0.15, color='gold', label='Q4')
ax.legend()
plt.show()

Representar los ingresos por categoría a lo largo del tiempo

Cree un gráfico de varias líneas en el que cada línea represente una categoría de producto. Reestructure el DataFrame mensual por categoría para que las columnas sean las categorías y el índice sea el tiempo; después, recorra las columnas y llame a ax.plot() para cada una. Matplotlib asigna automáticamente un color diferente a cada línea cuando se realizan llamadas repetidas sobre los mismos Axes.

monthly_cat = df.groupby(['year_month', 'category'])['revenue'].sum().unstack('category')
monthly_cat.index = monthly_cat.index.to_timestamp()

fig, ax = plt.subplots(figsize=(12, 6))
for col in monthly_cat.columns:
    ax.plot(monthly_cat.index, monthly_cat[col], label=col, linewidth=1.5)

ax.legend(loc='upper left', fontsize=8)
ax.set_title('Monthly Revenue by Category')
plt.tight_layout()
plt.show()

Gráfico de barras apiladas para los ingresos mensuales

Un gráfico de barras apiladas muestra los ingresos mensuales totales y, al mismo tiempo, revela la contribución de cada categoría al total. Use monthly_cat.plot(kind='bar', stacked=True, ax=ax) directamente sobre el DataFrame reestructurado. Las barras apiladas son más adecuadas cuando hay menos de seis categorías; de lo contrario, los colores resultan difíciles de distinguir.

fig, ax = plt.subplots(figsize=(12, 5))

monthly_cat.plot(kind='bar', stacked=True, ax=ax, colormap='tab10')

ax.set_title('Monthly Revenue by Category (Stacked)')
ax.set_xlabel('Month')
ax.set_ylabel('Revenue')
ax.legend(loc='upper left', fontsize=8)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

Tasa de crecimiento intermensual

Represente la tasa porcentual de crecimiento intermensual junto con los ingresos para aportar contexto: una barra visualmente pequeña en enero podría representar un aumento del 20 % con respecto al mes anterior. Calcule el crecimiento con monthly.pct_change() * 100 y represéntelo en un eje Y secundario mediante ax.twinx(), de modo que comparta el mismo eje X sin mezclar las unidades.

growth = monthly.pct_change() * 100

fig, ax1 = plt.subplots(figsize=(12, 5))
ax2 = ax1.twinx()

ax1.bar(monthly.index, monthly.values, width=20, color='steelblue', alpha=0.6, label='Revenue')
ax2.plot(growth.index, growth.values, color='red', marker='o', label='MoM Growth %')

ax1.set_ylabel('Revenue')
ax2.set_ylabel('MoM Growth %')
plt.title('Revenue and Month-over-Month Growth')
plt.tight_layout()
plt.show()

Guardar la figura para los informes

Use fig.savefig('monthly_trend.png', dpi=150, bbox_inches='tight') para generar un PNG de alta resolución adecuado para presentaciones o paneles web. El argumento bbox_inches='tight' recorta el espacio en blanco sobrante, y dpi=150 proporciona una imagen nítida sin crear un archivo excesivamente grande. Guárdela también en PDF para obtener informes con calidad de impresión.

fig.savefig('monthly_trend.png', dpi=150, bbox_inches='tight')
fig.savefig('monthly_trend.pdf', bbox_inches='tight')
print('Figure saved as PNG and PDF')

Comprobación rápida

Compruebe su comprensión de los conceptos de análisis de datos de esta lección.

Resumen de la lección

En esta lección ha aprendido a: calcular los ingresos mensuales totales y representarlos en un gráfico de líneas, superponer una media móvil y anotar los meses con máximos y mínimos, y guardar figuras con calidad de publicación en PNG y PDF. A continuación, exploraremos la creación de sesiones y la secuenciación de eventos en datos de comportamiento de usuarios.

Preguntas frecuentes

¿La lección «Visualización de tendencias mensuales» es gratis?

Sí — el texto completo de «Visualización de tendencias mensuales» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Pandas & NumPy Academy, actualiza a CoddyKit PRO. El curso de Pandas & NumPy Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Visualización de tendencias mensuales»?

Represente los ingresos mensuales con un gráfico de líneas, superponga una media móvil de 3 meses y anote los meses de máximos y mínimos. Practicas Pandas & NumPy Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Pandas & NumPy Academy?

No se requiere experiencia previa. Pandas & NumPy Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Visualización de tendencias mensuales»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Pandas & NumPy Academy?

Sí. Cada lección de Pandas & NumPy Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Cargar y auditar el dataset de ventas
  2. Cálculo de ingresos e ingeniería de características
  3. Análisis con GroupBy por región y categoría
  4. Visualización de tendencias mensuales
← Volver a Pandas & NumPy Academy