obiettivo
costruire una pipeline che legge csv, normalizza i dati e salva su sqlite con log tracciabile.
focus: pipeline ripetibile, deterministica e semplice da monitorare.
lettura dati
import csv
with open("input.csv", newline="") as f:
reader = csv.DictReader(f)
rows = list(reader)
usa DictReader per ottenere campi con nomi coerenti.
pulizia
def normalize(row: dict) -> dict:
return {
"name": row["name"].strip().lower(),
"score": int(row["score"]),
}
cleaned = [normalize(r) for r in rows]
salvataggio
import sqlite3
conn = sqlite3.connect("data.db")
cur = conn.cursor()
cur.execute("create table if not exists scores (name text, score int)")
cur.executemany("insert into scores values (?, ?)",
[(r["name"], r["score"]) for r in cleaned])
conn.commit()
logging
import logging
logging.basicConfig(level=logging.INFO)
logging.info("rows: %s", len(cleaned))
logga metriche chiave: righe processate, errori, tempo totale.
performance
- processa dati in streaming se i file sono grandi.
- usa batch insert per ridurre I/O.
- separa parsing e scrittura in funzioni pure.
checklist finale
- input validato e normalizzato.
- log completo per debug rapido.
- pipeline ri-eseguibile senza duplicati.
- metriche su throughput e tempi.
panoramica
In questo capitolo su data pipeline, pipeline dati leggere con csv, json e sqlite senza dipendenze extra. L'obiettivo è trasformare i concetti in micro-pattern riutilizzabili con esempi piccoli e verificabili.
Lavora in sequenza: leggi, prova, modifica gli snippet e annota i trade-off principali (performance, leggibilità, manutenzione).
badge: data pipeline
obiettivi
- capire e applicare obiettivo in uno scenario reale
- capire e applicare lettura dati in uno scenario reale
- capire e applicare pulizia in uno scenario reale
- capire e applicare salvataggio in uno scenario reale
scheda rapida
def main():
dati = [1, 2, 3]
risultati = [x * 2 for x in dati]
print(risultati)
if __name__ == "__main__":
main()
Adatta questo scheletro agli esempi della lezione e sostituisci i dati con il tuo dominio.
tips
- usa un venv per ogni progetto
- separa logica e I/O
- mantieni funzioni piccole e nominative
- separa extract/transform/load
- valida schema
- logga record scartati
tip: Le pipeline affidabili ripartono: salva checkpoint.
mini progetto
Pipeline ETL da CSV a JSON pulito.
- carica dataset
- normalizza campi
- filtra record invalidi
- salva output
output atteso: uno script o query ripetibile con risultati verificabili.