Requisiti — windows 11
Python: 3.7 – 3.11 (64-bit)
Power BI Desktop: Versione recente (aggiornata)
Librerie obbligatorie: pandas · matplotlib
Timeout script: Max 30 minuti
Pulizia e trasformazione con pandas e Power Query
import pandas as pd
df = dataset.copy()
# --- 1. PULIZIA ---
df = df.drop_duplicates()
df = df.dropna(subset=['vendite', 'regione', 'prodotto'])
df = df[df['vendite'] > 0]
# --- 2. NORMALIZZAZIONE TESTO ---
cols_testo = ['regione', 'categoria', 'prodotto', 'venditore']
for col in cols_testo:
df[col] = df[col].str.strip().str.title()
# --- 3. COLONNE CALCOLATE ---
df['vendite_iva'] = (df['vendite'] * 1.22).round(2)
df['costo_totale'] = df['costo'] * df['quantita']
df['margine'] = (df['vendite'] - df['costo_totale']).round(2)
df['margine_pct'] = ((df['margine'] / df['vendite']) * 100).round(1)
# --- 4. TIPO CORRETTO PER LE DATE ---
df['mese_num'] = df['mese_num'].astype(int)
print(f"Dataset pronto: {len(df)} righe, {len(df.columns)} colonne")
print(df.dtypes)
dataset = df
Grafico personalizzato con matplotlib
Inserito tramite "Oggetto visivo Python" nel pannello visualizzazioni. Matplotlib produce il grafico direttamente nel canvas.
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
# dataset è già disponibile come DataFrame
df = dataset.groupby('mese')['vendite'].sum().reset_index()
df = df.sort_values('mese')
fig, ax = plt.subplots(figsize=(8, 4))
bars = ax.bar(df['mese'], df['vendite'],
color='#378ADD', edgecolor='none', width=0.6)
ax.set_xlabel('Mese', fontsize=10)
ax.set_ylabel('Vendite (€)', fontsize=10)
ax.set_title('Vendite mensili', fontsize=12, fontweight='bold')
ax.yaxis.set_major_formatter(
mticker.FuncFormatter(lambda x, _: f'{x:,.0f}€'))
ax.spines[['top', 'right']].set_visible(False)
ax.grid(axis='y', alpha=0.3)
plt.tight_layout()
plt.show()
Previsione con scikit-learn
import pandas as pd
from sklearn.linear_model import LinearRegression
import numpy as np
df = dataset.copy()
df = df.dropna(subset=['mese_num', 'vendite'])
# Feature e target
X = df[['mese_num']].values
y = df['vendite'].values
# Addestramento modello
model = LinearRegression()
model.fit(X, y)
# Previsioni sui dati esistenti
df['vendite_previste'] = model.predict(X).round(2)
# Previsione per i prossimi 3 mesi
mesi_futuri = np.array([[df['mese_num'].max() + i]
for i in range(1, 4)])
previsioni = model.predict(mesi_futuri).round(2)
df_futuro = pd.DataFrame({
'mese_num': mesi_futuri.flatten(),
'vendite': [None]*3,
'vendite_previste': previsioni
})
dataset = pd.concat([df, df_futuro], ignore_index=True)
- Power Query — per trasformare e pulire dati prima del modello (il DataFrame dataset entra ed esce)
- Oggetto visivo Python — per creare grafici custom con matplotlib/seaborn direttamente nel report
- Script Python — per operazioni avanzate come ML, clustering, o previsioni
Limitazioni importanti da comunicare in aula:
- Gli script vengono rieseguiti a ogni aggiornamento dei dati
- Nessun accesso a internet durante l'esecuzione
- Le visualizzazioni Python non sono interattive come quelle native di Power BI
- Il timeout massimo è 30 minuti per script
Librerie consigliate da far installare preventivamente:
pip install pandas matplotlib scikit-learn seaborn numpy
Ecco il dataset! Contiene 120 righe di dati di vendita realistici, pensati apposta per i tre esercizi della guida:
Colonne disponibili:
| Colonna | Tipo | Descrizione |
|---|---|---|
mese_num | Numero | 1–12, per la regressione ML |
mese | Testo | Nome del mese in italiano |
regione | Testo | 5 regioni italiane |
categoria | Testo | Elettronica, Abbigliamento, Alimentari |
prodotto | Testo | 10 prodotti distinti |
vendite | Numero | Importo vendite in € |
quantita | Numero | Unità vendute |
costo | Numero | Costo unitario in € |
venditore | Testo | 5 venditori con nomi realistici |
Cosa permettono di fare gli esercizi:
- Trasformazione — pulizia, calcolo
vendite_iva, normalizzazioneregione - Visualizzazione — grafico vendite mensili aggregato per
mese - Machine Learning — regressione su
mese_num→venditecon previsione mesi futuri
I dati seguono un trend crescente durante l'anno (picco a dicembre) per rendere la regressione lineare significativa e visivamente chiara.




