Pandas & NumPy Academy · Lezione

Visualizzare l'andamento mensile

Rappresenti i ricavi mensili con un grafico a linee, sovrapponga una media mobile a 3 mesi e annoti i mesi di picco e di minimo.

Lezione 4 di 413 passaggi

Visualizzare l'andamento mensile è una lezione Pandas & NumPy Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Pandas & NumPy Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Pandas & NumPy Academy include 4 lezioni in totale.

Calcolo dei ricavi mensili totali

Prima di creare il grafico, aggreghi il DataFrame delle vendite per ottenere i totali mensili. Raggruppi per la colonna Period year_month e sommi i ricavi. Converta il PeriodIndex in un DatetimeIndex con .to_timestamp(), così il formattatore delle date di Matplotlib visualizza correttamente le etichette degli assi. Ordinare per indice garantisce che il grafico proceda cronologicamente da sinistra a destra.

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())

Creazione del grafico a linee dei ricavi mensili

Crei una Figure e degli Axes con plt.subplots(figsize=(12, 5)) e chiami ax.plot() per tracciare la tendenza mensile dei ricavi. Usi marker='o' per inserire un punto in corrispondenza di ogni mese, così i singoli valori restano visibili anche quando la linea è uniforme. Imposti il colore e lo spessore della linea in modo che la tendenza principale risalti rispetto agli eventuali elementi sovrapposti aggiunti in seguito.

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()

Sovrapposizione di una media mobile a 3 mesi

Una linea dei ricavi mensili grezzi può apparire irregolare a causa del rumore stagionale. Sovrapponga una media mobile a 3 mesi calcolata con monthly.rolling(3).mean() per mostrare più chiaramente la tendenza sottostante. La tracci come linea tratteggiata di un colore a contrasto, così risalta rispetto alla serie grezza senza nasconderla.

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()

Annotazione del mese di picco

Usi ax.annotate() per contrassegnare il mese con il ricavo più alto. Trovi il picco con monthly.idxmax() e il relativo valore con monthly.max(). La freccia dell’annotazione va dall’etichetta testuale al punto dei dati corrispondente al picco, rendendo immediatamente visibile l’informazione a chiunque legga il grafico, anche se lo riceve come 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()

Annotazione del mese di minimo

Analogamente, contrassegni il mese con il fatturato più basso usando monthly.idxmin() per segnalare una possibile stagionalità o eventuali anomalie. Le annotazioni sia del picco sia del minimo offrono un quadro completo: consentono agli stakeholder di vedere non solo il mese migliore, ma anche quanto può diminuire il fatturato, fornendo informazioni utili per la pianificazione del flusso di cassa.

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()

Formattazione delle etichette delle tacche delle date

Le etichette predefinite delle tacche delle date di Matplotlib spesso si sovrappongono o usano un formato di difficile lettura. Importi mdates da matplotlib e imposti un MonthLocator e un DateFormatter per controllare la frequenza delle tacche e il formato delle etichette. Ruotare le etichette delle tacche di 45 gradi evita sovrapposizioni su un asse di 12 mesi.

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()

Aggiunta di una regione ombreggiata per il quarto trimestre

Evidenzi il periodo del quarto trimestre (ottobre–dicembre) con uno sfondo ombreggiato usando ax.axvspan(). In questo modo i modelli stagionali diventano immediatamente visibili: se il picco ricade regolarmente nella zona ombreggiata, il quarto trimestre è un periodo di vendita fondamentale da prendere di mira con promozioni. Il parametro alpha controlla la trasparenza dell'ombreggiatura.

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()

Rappresentazione del fatturato per categoria nel tempo

Crei un grafico a più linee, in cui ogni linea rappresenta una categoria di prodotto. Esegua il pivot del DataFrame mensile per categoria, in modo che le colonne siano le categorie e l'indice sia il tempo; quindi iteri sulle colonne e chiami ax.plot() per ciascuna di esse. Matplotlib assegna automaticamente un colore diverso a ogni linea quando viene chiamato ripetutamente sullo stesso 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()

Grafico a barre impilate del fatturato mensile

Un grafico a barre impilate mostra il fatturato mensile totale e, al contempo, il contributo di ciascuna categoria all'insieme. Usi direttamente monthly_cat.plot(kind='bar', stacked=True, ax=ax) sul DataFrame sottoposto a pivot. Le barre impilate sono ideali quando si hanno meno di sei categorie; in caso contrario, i colori diventano difficili da distinguere.

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()

Tasso di crescita mese su mese

Rappresenti il tasso di crescita percentuale mese su mese insieme al fatturato per fornire un contesto: una barra visivamente piccola a gennaio potrebbe rappresentare un aumento del 20 % rispetto al mese precedente. Calcoli la crescita con monthly.pct_change() * 100 e la rappresenti su un asse y secondario usando ax.twinx(), così da condividere lo stesso asse x senza confondere le unità di misura.

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()

Salvataggio della figura per i report

Usi fig.savefig('monthly_trend.png', dpi=150, bbox_inches='tight') per produrre un file PNG ad alta risoluzione, adatto a presentazioni o dashboard web. L'argomento bbox_inches='tight' elimina lo spazio bianco in eccesso, mentre dpi=150 garantisce un'immagine nitida senza creare un file eccessivamente grande. Salvi anche in PDF per ottenere report di qualità adatta alla stampa.

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')

Verifica rapida

Verifichi la Sua comprensione dei concetti di analisi dei dati trattati in questa lezione.

Riepilogo della lezione

In questa lezione ha imparato a: calcolare i totali mensili del fatturato e rappresentarli in un grafico a linee, sovrapporre una media mobile e annotare i mesi di picco e di minimo e salvare figure di qualità editoriale in formato PNG e PDF. Ora esploreremo la sessionizzazione e la sequenza degli eventi nei dati sul comportamento degli utenti.

Gratis per iniziare

Impara Python con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
30
Lezioni
120

Domande Frequenti

La lezione «Visualizzare l'andamento mensile» è gratuita?

Sì — il testo completo di «Visualizzare l'andamento mensile» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Pandas & NumPy Academy, passa a CoddyKit PRO. Il corso Pandas & NumPy Academy include 4 lezioni in totale.

Cosa imparerò in «Visualizzare l'andamento mensile»?

Rappresenti i ricavi mensili con un grafico a linee, sovrapponga una media mobile a 3 mesi e annoti i mesi di picco e di minimo. Eserciti Pandas & NumPy Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Pandas & NumPy Academy?

Non è richiesta alcuna esperienza precedente. Pandas & NumPy Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Visualizzare l'andamento mensile»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Pandas & NumPy Academy?

Sì. Ogni lezione Pandas & NumPy Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Caricare e verificare il dataset delle vendite
  2. Calcolo dei ricavi e feature engineering
  3. Analisi GroupBy per area e categoria
  4. Visualizzare l'andamento mensile
← Torna a Pandas & NumPy Academy