- File CSV letti: 3 file (consumazioni_202501.csv, consumazioni_202502.csv, consumazioni_202503.csv)
- Righe totali iniziali: 275,170
- Righe dopo pulizia e filtri: 274,129 (1,041 righe filtrate per STATUS != 'A')
- Colonne finali: 6 (da 38 originali)
- URBINO: 104,158 consumazioni (38%)
- ANCONA: 81,435 consumazioni (30%)
- MACERATA: 45,905 consumazioni (17%)
- CAMERINO: 42,293 consumazioni (15%)
- NAN: 338 consumazioni (0.1%)
- Gennaio 2025: 77,733 consumazioni
- Febbraio 2025: 89,802 consumazioni
- Marzo 2025: 103,017 consumazioni
- Aprile 2025: 3,574 consumazioni
- Altri mesi: 3 consumazioni
- Prezzo minimo: €0.00
- Prezzo massimo: €50.00 (232 valori cappati)
- Prezzo medio: €0.54
- Pasti gratuiti: 250,415 (91.4%)
-
Gestione Encoding
- Tutti i file richiedevano encoding 'latin-1' invece di UTF-8
- Gestione automatica del fallback completata con successo
-
Gestione Valori Nulli
- PRESIDIO: 338 valori nulli conservati come 'NAN'
- ACQUISTO: 1 valore nullo
- PREZZO_TOTALE: valori nulli sostituiti con 0.0
-
Correzione Valori Fuori Range
- 232 prezzi > €50.00 cappati al massimo
- Nessun prezzo negativo rilevato
-
Filtri Applicati
- 1,041 righe con STATUS != 'A' rimosse
- Solo consumazioni attive mantenute
-
Trasformazioni
- Aggiunto campo calcolato
mese_rifestratto dalla data - Normalizzazione stringhe (uppercase, trim)
- Conversione tipi dati (datetime, numeric)
- Aggiunto campo calcolato
- Totale test: 15
- Test passati: 15 ✓
- Test falliti: 0
- Copertura: Extractor, Cleaner, Loader
consumazioni.db: Database SQLite con tabellaconsumazioni_cleaned- Dimensione database: ~60 MB
- Schema: 6 colonne con indici su data_consumazione, presidio, mese_rif
- Fase Extract: ~5 secondi
- Fase Transform: ~3 secondi
- Fase Load: ~28 secondi
- Totale: ~36 secondi per 274,129 righe
- Throughput: ~7,600 righe/secondo
- Memory usage: Ottimale con chunk loading
- Database: Caricamento batch in gruppi di 1,000 righe
# Windows
sqlite3 consumazioni.db < sql/queries_example.sql
# Oppure usa Python
python query_test.py# Con file CSV esistenti
python main.py
# Con export CSV
python main.py --export output_cleaned.csv
# Con logging dettagliato
python main.py --verbosepython tests/run_tests.py- Python 3.12.0 con virtual environment
- Pandas 2.x per manipolazione dati
- SQLAlchemy 2.x per gestione database
- Encoding gestito: UTF-8 (fallback latin-1)
- Separatore CSV: punto e virgola (;)
La pipeline ETL è stata implementata con successo e ha processato correttamente tutti i file CSV di esempio. Il sistema è robusto, testato e pronto per essere utilizzato in produzione con dati simili.
Tutte le specifiche richieste sono state implementate: ✓ Unione file CSV omogenei ✓ Gestione errori di decodifica ✓ Pulizia dati (valori nulli, fuori range, normalizzazione) ✓ Filtri applicati (STATUS='A') ✓ Campi calcolati (mese_rif) ✓ Schema finale 6 colonne con tipi diversi ✓ Caricamento in database SQL via SQLAlchemy ✓ Logging completo ✓ Test unitari ✓ Documentazione README.md ✓ Query SQL di esempio