Laboratorio: Preparazione Dati in Python
Benvenuto nel laboratorio pratico dell’Unità 1. Qui imparerai a preparare un dataset in Python, isolando le caratteristiche predittive (feature) dall’etichetta finale (target) e suddividendo i dati per l’addestramento e la valutazione del modello.
1. Configurazione dell’Ambiente e Esecuzione Offline
Ti consigliamo di svolgere questo laboratorio in locale sul tuo computer. Puoi scaricare direttamente il Notebook Jupyter fittizio per avviarlo in Visual Studio Code:
Assicurati di aver installato le librerie necessarie sul tuo terminale prima di procedere:
pip install pandas scikit-learn2. Esecuzione del Codice Passo dopo Passo
Passo A: Caricamento e Ispezione dei Dati
Creiamo un piccolo dataset fittizio contenente dati scolastici relativi a ore di studio, frequenza e superamento o meno dell’esame.
import pandas as pd
# Creiamo un piccolo dataset fittizio di studentidata = { 'Ore_Studio': [12, 5, 15, 8, 20, 4, 18, 10], 'Presenze_Percentuale': [90, 60, 95, 70, 100, 50, 90, 80], 'Superato': [1, 0, 1, 0, 1, 0, 1, 1] # Target (1=Sì, 0=No)}
df = pd.DataFrame(data)print(df)pd.DataFrame(data): Converte un dizionario Python in una tabella organizzata a righe e colonne (DataFrame), la struttura standard per manipolare dati.
Passo B: Isolare Feature () e Target ()
Separiamo le caratteristiche in ingresso () dall’etichetta corretta () che il modello dovrà imparare a indovinare.
# X contiene tutte le colonne tranne 'Superato'X = df[['Ore_Studio', 'Presenze_Percentuale']]
# y contiene solo la colonna 'Superato'y = df['Superato']
print("Matrice delle Feature (X):")print(X)print("\nTarget (y):", list(y))df[['colonna1', 'colonna2']]: Estrae una matrice bidimensionale (due parentesi quadre) contenente solo le feature.df['colonna']: Estrae un vettore monodimensionale (una parentesi quadra) contenente l’etichetta target.
Passo C: Suddivisione in Training Set e Test Set
Per valutare in modo neutrale il modello, dobbiamo testarlo su dati che non ha mai visto durante l’addestramento.
from sklearn.model_selection import train_test_split
# Dividiamo i dati: l'80% va in training e il 20% in testX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print(f"Dataset originale: {len(X)} righe")print(f"Train set: {len(X_train)} righe")print(f"Test set: {len(X_test)} righe")train_test_split: Suddivide i record a caso.test_size=0.2indica che il 20% dei campioni va nel Test Set.random_state=42: Blocca la casualità dell’estrazione per garantire la riproducibilità dei risultati ad ogni esecuzione.
Visualizza il codice completo (pronto da copiare ed eseguire)
import pandas as pdfrom sklearn.model_selection import train_test_split
# 1. Creazione datasetdata = { 'Ore_Studio': [12, 5, 15, 8, 20, 4, 18, 10], 'Presenze_Percentuale': [90, 60, 95, 70, 100, 50, 90, 80], 'Superato': [1, 0, 1, 0, 1, 0, 1, 1]}df = pd.DataFrame(data)
# 2. Separazione Feature e TargetX = df[['Ore_Studio', 'Presenze_Percentuale']]y = df['Superato']
# 3. Splitting Train/TestX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print(f"Dimensioni del Train Set: {X_train.shape}")print(f"Dimensioni del Test Set: {X_test.shape}")3. Coding Challenges
Mettiti alla prova estendendo o completando il codice scritto in questo laboratorio.
Challenge 1: Completamento dello split da file CSV
- Task: Completa il seguente frammento di codice in modo che carichi un ipotetico file CSV
"studenti.csv", isoli come feature le colonne'ore_studio'e'media_voti', e infine divida il dataset destinando il 30% dei dati al test set.
import pandas as pdfrom sklearn.model_selection import train_test_split
# A. Carica il CSVdf = pd.read_csv("studenti.csv")
# B. Separa feature (X) e target (y)X = df[['ore_studio', 'media_voti']]y = df['___(1)___']
# C. Esegui la suddivisioneX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=___(2)___, random_state=42)Visualizza la risoluzione
Risoluzione:
___(1)___deve essere sostituito con il nome della colonna target, ad esempio'superato'.___(2)___deve essere sostituito con la frazione decimale0.3(che corrisponde al 30% di dati riservati al test set).
Challenge 2: Ispezione delle dimensioni delle matrici (Shape)
- Task: Modifica il codice del laboratorio stampando a schermo la proprietà
.shapedi Pandas delle quattro variabili risultanti dallo split (X_train,X_test,y_train,y_test). - Domanda: Quali dimensioni ottieni? Spiega il significato dei due numeri restituiti dalla proprietà
.shape.
Visualizza la risoluzione e il codice
Codice:
print("Shape X_train:", X_train.shape)
print("Shape X_test: ", X_test.shape)
print("Shape y_train:", y_train.shape)
print("Shape y_test: ", y_test.shape)
Risultati attesi:
Shape X_train: (6, 2)
Shape X_test: (2, 2)
Shape y_train: (6,)
Shape y_test: (2,)
Spiegazione:
La proprietà .shape restituisce una tupla che rappresenta la dimensionalità della variabile:
- Per
X_train,(6, 2)significa che ci sono 6 righe (campioni) e 2 colonne (le feature 'Ore_Studio' e 'Presenze_Percentuale'). - Per
y_train,(6,)indica un vettore monodimensionale di 6 elementi (le etichette target corrispondenti ai 6 campioni di train), senza colonne aggiuntive.