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:
python -m venv .venv
pip install pandas openpyxl matplotlib scikit-learn1Unire i file
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:
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
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.
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.