Il caso

Una cartella vendite/ con un file Excel per mese (2024-01.xlsx, 2024-02.xlsx…), colonne data, cliente, prodotto, importo. Ogni mese qualcuno li unisce a mano, prepara un riepilogo e un grafico. Le librerie che servono:

Shell
python -m venv .venv
pip install pandas openpyxl matplotlib scikit-learn

1Unire i file

Python
from pathlib import Path
import pandas as pd

file = Path("vendite").glob("*.xlsx")
vendite = pd.concat(pd.read_excel(f) for f in file)

2Pulire e riassumere

Via righe vuote e duplicati, poi una riga per mese e una colonna per prodotto:

Python
vendite = vendite.dropna(subset=["importo"]).drop_duplicates()
vendite["mese"] = pd.to_datetime(vendite["data"]).dt.strftime("%Y-%m")

riepilogo = vendite.pivot_table(index="mese", columns="prodotto",
                                values="importo", aggfunc="sum", fill_value=0)
riepilogo.to_excel("riepilogo_mensile.xlsx")

3Il grafico

Python
import matplotlib.pyplot as plt

riepilogo.plot(kind="bar", stacked=True, figsize=(10, 5),
               title="Vendite per mese")
plt.tight_layout()
plt.savefig("vendite.png")

4Renderlo automatico

Salva tutto in report.py e pianificalo con l'Utilità di pianificazione di Windows (o cron) il primo giorno di ogni mese. Il report è pronto prima che qualcuno apra Excel.

5Prevedere il mese successivo

Con lo storico già pulito, un primo modello predittivo richiede poche righe: impara come il totale di ogni mese dipende dai tre mesi precedenti.

Python
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error

mensile = vendite.groupby("mese")["importo"].sum().to_frame("totale")
for k in (1, 2, 3):
    mensile[f"lag{k}"] = mensile["totale"].shift(k)
mensile = mensile.dropna()

X, y = mensile[["lag1", "lag2", "lag3"]], mensile["totale"]
# gli ultimi 6 mesi restano fuori, per verificare il modello
modello = LinearRegression().fit(X[:-6], y[:-6])

errore = mean_absolute_error(y[-6:], modello.predict(X[-6:]))
base = mean_absolute_error(y[-6:], X["lag1"][-6:])
print(f"Errore modello: {errore:.0f}  |  'come il mese prima': {base:.0f}")

ultimi = [y.iloc[-1], y.iloc[-2], y.iloc[-3]]
prossimo = modello.predict(pd.DataFrame([ultimi], columns=X.columns))[0]
print("Prossimo mese:", round(prossimo))
  • Confronta sempre con la regola più semplice (come il mese prima): se il modello non la batte, non serve ancora.
  • Servono almeno 2–3 anni di dati; con la stagionalità aggiungi il mese come variabile o usa modelli dedicati (statsmodels, Prophet).

Il passo successivo

Previsioni per prodotto o cliente, avvisi quando le vendite calano, assistenti AI che rispondono a domande sui tuoi dati. Usa gli strumenti AI per scrivere codice più in fretta, ma leggi e capisci il codice prima di usarlo sui dati aziendali.