Smart Data Cleaning & Reporting
Da export sporchi (e-commerce/CRM) a dataset puliti + KPI + report, con pipeline riproducibile e quality checks.
Output: cleaned.csv + kpi.json + quality.json + report.md.
Preview output reali (quality.json)
data quality proofTop missing columns
top 5
Dataset pulito: nessun missing significativo rilevato.
Fonte: quality.json
Problema (real world)
Export CSV/Excel reali sono spesso incompleti, incoerenti e pieni di valori “sporchi”. Il rischio non è solo “sporcare il dataset”: è generare KPI sbagliate e decisioni sbagliate.
- • colonne con nomi diversi o mancanti (schema drift)
- • date in formati misti (YYYY-MM-DD / DD/MM/YYYY)
- • numeri come stringhe, prezzi con virgola
- • duplicati silenziosi che gonfiano i totali
- • null sparsi e righe “rotte”
Soluzione (approccio)
Una pipeline “idiot-proof” che standardizza lo schema, normalizza i tipi, applica regole chiare di cleaning e produce output separati: dati puliti, KPI e report di qualità.
- • parsing difensivo + normalizzazione tipi
- • regole esplicite (drop motivati, dedup su chiavi)
- • quality report leggibile (cosa è successo e perché)
- • output “business-ready” per condivisione e audit
Live demo (real input → real output)
Input sporco + output pulito generati dalla pipeline. File pronti da scaricare.
Input (sporco)
Schema drift + date miste + prezzi con virgola + duplicati + missing (synthetic noise controllato).
Output (pulito + report)
Dataset pulito + KPI + quality summary + report leggibile.
kpi.json (real)
{
"rows": 118772,
"orders": 115620,
"customers": 70171,
"products": 17415,
"total_value": 372620.57999999996,
"avg_item_value": 3.1372762940760444,
"aov": 3.222803840166062,
"median_order_value": 3.05,
"repeat_rate": 0.3652363511992133,
"top_departments": [
{
"department": "produce",
"items": 34453
},
{
"department": "dairy eggs",
"items": 20022
},
{
"department": "snacks",
"items": 10525
},
{
"department": "beverages",
"items": 9888
},
{
"department": "frozen",
"items": 8032
}
]
} quality.json (real)
{
"rows": {
"raw": 123600,
"normalized": 123600,
"clean": 118772,
"dropped": 4828
},
"duplicates_removed": 3600,
"missing_cells_raw": 3708,
"missing_cells_clean": 120580,
"top_missing_columns_clean": [
{
"column": "order_hour",
"missing": 118772
},
{
"column": "product_name",
"missing": 617
},
{
"column": "aisle",
"missing": 596
},
{
"column": "department",
"missing": 595
}
],
"notes": [
"Renamed column 'Order ID' -> 'order_id'",
"Renamed column 'CustomerID' -> 'user_id'",
"Renamed column 'OrderDate' -> 'order_date'",
"Renamed column 'Unit Price' -> 'unit_price'",
"Renamed column 'Order Value' -> 'order_value'",
"Removed duplicates on (order_id, product_id): 3600",
"Dropped rows missing critical fields ['order_id', 'user_id', 'product_id', 'order_date']: 614",
"Dropped rows with invalid unit_price: 614",
"Rows: 123600 -> 118772 (delta -4828)"
]
} report.md (preview)
# Smart Data Cleaning + Reporting
## Execution summary
- Rows (raw): 123,600
- Rows (clean): 118,772
- Dropped: 4,828
- Duplicates removed (estimate): 3,600
- Missing cells (raw): 3,708
- Missing cells (clean): 120,580
## KPI snapshot
- **orders**: 115620
- **customers**: 70171
- **products**: 17415
- **total_value**: 372620.57999999996
- **aov**: 3.222803840166062
- **repeat_rate**: 0.3652363511992133
## Top departments (by items)
- produce: 34453
- dairy eggs: 20022
- snacks: 10525
- beverages: 9888
- frozen: 8032
## Data quality notes (top missing columns)
- order_hour: 118772
- product_name: 617
Cosa dimostra
- • gestione schema variabile (colonne rinominate / mancanti)
- • normalizzazione tipi (date miste, prezzi “1,47”, numeri come stringhe)
- • dedup e drop rules esplicite (con motivazione)
- • data quality checks misurabili (missing, duplicati, scarti)
- • output “auditabile”: dati + KPI + quality + report separati
- • design “idiot-proof”: messaggi chiari, niente crash incomprensibili
Come riprodurre
Comandi minimi per rigenerare input/output (dataset Kaggle escluso dal repo).
python tools/smart-data-cleaning/src/synth/sample_base.py
python tools/smart-data-cleaning/src/synth/inject_noise.py
python tools/smart-data-cleaning/src/run_pipeline.py
Tip: se vuoi rifare tutto da zero, rigenera anche la base con generate_clean_base.py.
Why this matters
Nei progetti reali, i dati “sporchi” raramente fanno crash: più spesso alterano i KPI in silenzio. Qui l’obiettivo è rendere la data quality esplicita, misurabile e riproducibile.