lezione 09

data pipeline

pipeline dati leggere con csv, json e sqlite senza dipendenze extra.

livello: intermedio durata: 55 min output: pipeline ripetibile badge: data pipeline

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.

start a brief