Skip to content

Instantly share code, notes, and snippets.

@aborruso
Created January 30, 2026 19:18
Show Gist options
  • Select an option

  • Save aborruso/93db8580fba815bbbcfd78c41d69efd9 to your computer and use it in GitHub Desktop.

Select an option

Save aborruso/93db8580fba815bbbcfd78c41d69efd9 to your computer and use it in GitHub Desktop.
note rapide

Report Qualità Dati - Infrastrutture EDILIZIA AINOP

Dataset: Elenco opere pubbliche censite su portale AINOP Risorsa: Infrastruttura EDILIZIA (CSV) Resource ID: 6440c4ce-0321-4c95-a525-13352d9b4109 Server: https://dati.mit.gov.it/catalog Data analisi: 2026-01-30 Record totali: 52.192 Dimensione file: 17.1 MB


1. Metadata Quality

1.1 Dataset Discoverability

Aspetto Valutazione Note
Titolo ✅ BUONO "Elenco opere pubbliche censite su portale AINOP" - chiaro e descrittivo
Descrizione ⚠️ INSUFFICIENTE Solo: "Il dataset contiene l'elenco opere pubbliche censite su portale AINOP" - troppo generica, manca contesto, finalità, copertura temporale/geografica
Tags ⚠️ SCARSI Solo 2 tag ("grandi opere", "opere") - troppo generici, mancano tag specifici (edilizia, infrastrutture, CUP, AINOP)
Organizzazione ✅ OK Ministero Infrastrutture e Trasporti - AINOP ben identificato
Licenza ⚠️ PROBLEMATICA Creative Commons Non-Commercial - NON è Open Data secondo definizione OKF/CAD (richiede uso commerciale libero)

Raccomandazioni Metadata:

  • Ampliare descrizione con: finalità AINOP, cosa sono le opere censite, periodo di raccolta dati, copertura geografica
  • Aggiungere tag: edilizia, infrastrutture-pubbliche, codice-cup, opere-pubbliche, monitoraggio, ainop
  • CRITICO: Valutare cambio licenza a CC-BY o IODL 2.0 per conformità Open Data

1.2 Schema Documentation

Aspetto Valutazione Note
Descrizione risorsa ⚠️ GENERICA "Contiene la lista delle infrastrutture edilizie censite nel sistema AINOP in formato CSV"
Schema campi ❌ ASSENTE Nessuno schema JSON/Table Schema/DCAT-AP_IT fornito
Documentazione formato ❌ ASSENTE Non specificato separatore, encoding, formato date nei metadati risorsa

Raccomandazioni Schema:

  • Fornire dizionario dati con:
    • Nome campo, tipo dati, obbligatorietà, dominio valori, descrizione
    • Esempi: codice_iop = Codice univoco opera AINOP, codice_cup = Codice CUP (Codice Unico Progetto) OpenCUP
  • Documentare formato coordinate (POINT(lon lat) WGS84/EPSG:4326)
  • Specificare encoding UTF-8, separatore virgola nei metadati

2. CSV Structure Quality

2.1 File Format

Controllo Risultato Dettagli
Encoding ✅ UTF-8 Verificato via DataStore
Separator ✅ VIRGOLA Standard internazionale conforme
Header presente ✅ SÌ Prima riga con nomi campi
BOM 🔍 NON VERIFICATO Download diretto fallito, necessario test file

2.2 Column Names Quality

Campi (19 totali):

_id, codice_iop, conferente, data_creazione, tipologia_infrastruttura,
nome_infrastruttura, tipologia_opera, nome_opera, anno_entrata_esercizio,
ellissoide, sistema_di_riferimento, coordinate_geografiche, regione,
provincia, comune, ente_concedente, concessionario, ente_vigilante, codice_cup
Aspetto Valutazione Note
Snake_case ✅ OTTIMO Tutti i campi usano underscore, no spazi
Caratteri speciali ✅ NESSUNO Nomi puliti, SQL-friendly
Leggibilità ✅ BUONA Nomi descrittivi e comprensibili
Consistenza ✅ OK Naming coerente in tutto lo schema

3. Data Content Quality

3.1 Data Dimensions

Metrica Valore Valutazione
Record totali 52.192 ✅ Adeguato per infrastrutture edilizie pubbliche
Colonne 19 ✅ Schema completo
Dimensione 17.1 MB ✅ Ragionevole (~328 byte/record medio)

3.2 Data Types Analysis

Campione analizzato: 500 record (primi del DataStore)

Campo Tipo Atteso Tipo Rilevato Qualità
codice_iop TEXT TEXT ✅ Alfanumerico uppercase
codice_cup TEXT TEXT ⚠️ Vedere 3.4
data_creazione DATE/TIMESTAMP TIMESTAMP ✅ ISO 8601: 2025-03-14T00:00:00
anno_entrata_esercizio INTEGER/TEXT TEXT ⚠️ Valori misti (anni + spazi vuoti)
coordinate_geografiche TEXT/GEOMETRY TEXT ✅ Formato WKT: POINT(lon lat)
regione, provincia, comune TEXT TEXT ✅ Nomi testuali

Date Format: ✅ ISO 8601 conforme (YYYY-MM-DDTHH:MM:SS)

Problemi rilevati:

  • anno_entrata_esercizio: tipo TEXT invece di INTEGER, contiene valori vuoti " " invece di NULL

3.3 Numeric Fields

Non ci sono campi numerici puri in questo dataset (dimensioni opere, costi, etc. non presenti).

3.4 Campo CUP - Analisi Qualità

CRITICO per collegamento OpenCUP

Copertura CUP (campione 500 record)

Dall'analisi precedente su 100 record:

  • ~65% ha CUP valorizzato
  • ~35% CUP vuoto

Problemi Qualità CUP rilevati

Problema Esempio Gravità Impatto
Spazi vuoti " " (un solo spazio) ⚠️ MEDIA Necessita trim/NULL conversion
Stringhe vuote "" ⚠️ MEDIA Necessita NULL conversion
Spazio iniziale D13E21000000006 🔴 ALTA Join fallisce, necessita TRIM
Minuscole i14h13000010003 🔴 ALTA CUP deve essere UPPERCASE
CUP multipli C14H22000640006 ; C13D21001620005 🔴 ALTA Viola normalizzazione, necessita split
NULL veri null ✅ OK Gestibili

Esempi dal campione:

G48B09000050005       ✅ Valido
F54F22000370002       ✅ Valido
" "                   ❌ Spazio invece di NULL
i14h13000010003       ❌ Minuscolo
 D13E21000000006      ❌ Spazio iniziale
C14H22...;C13D21...   ❌ CUP multipli

Raccomandazioni CUP

URGENTI:

  1. Normalizzazione CUP:

    -- Pulizia consigliata
    UPPER(TRIM(codice_cup))
    -- Conversione vuoti a NULL
    CASE WHEN TRIM(codice_cup) = '' THEN NULL ELSE UPPER(TRIM(codice_cup)) END
  2. Gestione CUP multipli:

    • Valutare se separare in righe distinte (normalizzazione)
    • O creare campo codice_cup_secondario
    • NON lasciare separati da ;
  3. Validazione formato CUP:

    • Pattern: [A-Z][0-9]{2}[A-Z][0-9]{11}
    • Esempio: G48B09000050005 (15 caratteri)
    • Aggiungere controllo formato in pubblicazione
  4. Copertura:

    • Investigare perché ~35% opere senza CUP
    • Distinguere: "opera senza CUP" vs "CUP non inserito"

3.5 Geographic Fields

Campo Valore Esempio Valutazione
ellissoide WGS84 ✅ Standard internazionale
sistema_di_riferimento EPSG:4326 ✅ Codice EPSG corretto
coordinate_geografiche POINT(13.576459 37.312782) ✅ WKT valido (lon lat)
regione Sicilia ✅ Nome testuale
provincia Agrigento ⚠️ Solo nome, manca codice ISTAT provincia
comune Agrigento 🔴 MANCA codice ISTAT comune

Problema CRITICO: Codici ISTAT Assenti

Comuni senza codice ISTAT:

  • Esempio: Agrigento dovrebbe avere anche 082001 (codice catastale A089)
  • Necessario per:
    • Join con altri dataset PA
    • Geocoding preciso
    • Aggregazioni amministrative
    • Conformità ANPR/ISTAT

Raccomandazione:

  • Aggiungere campi: codice_istat_comune (6 cifre), codice_istat_provincia (3 cifre)
  • Aggiungere codice_catastale_comune (utile per interoperabilità)

3.6 Tidy Data Structure

Controllo Risultato Note
Formato Long/Tidy ✅ SÌ Ogni riga = 1 opera
Colonne come valori ✅ NO No colonne tipo "2020", "2021", etc.
Valori atomici ⚠️ PARZIALE codice_cup a volte contiene multipli separati da ;
1 osservazione/riga ⚠️ PARZIALE CUP multipli violano questa regola

3.7 Consistency Checks

Controllo Risultato Dettagli
Duplicate headers 🔍 NON VERIFICATO Necessario download file completo
Total rows 🔍 NON VERIFICATO Necessario controllo ultimi record
Units in cells ✅ OK Nessuna unità rilevata (es: "25 m²")
Mixed content ⚠️ anno_entrata_esercizio ha sia anni che spazi

4. Metadata Consistency

4.1 Update Frequency

Aspetto Dichiarato Verificato Coerenza
Frequenza trimestrale - 🔍 Da verificare cronologia
Ultimo aggiornamento 2025-11-25 - ✅ Recente
Data creazione dataset 2025-08-06 - ⚠️ Dataset recente ma dati da 2020-09-01

4.2 Declared vs Actual

Campo Metadata Dichiarato Rilevato Match
Encoding NON dichiarato UTF-8 ⚠️ Manca dichiarazione
Separator NON dichiarato , (virgola) ⚠️ Manca dichiarazione
Row count NON dichiarato 52.192 ⚠️ Manca dichiarazione
DataStore datastore_active: true ✅ Attivo ✅ Match

5. Quality Summary

5.1 Quality Score Card

Dimensione Punteggio Livello
Metadata Discoverability 5/10 ⚠️ SUFFICIENTE
Schema Documentation 2/10 🔴 INSUFFICIENTE
File Format Readiness 8/10 ✅ BUONO
Column Names Quality 10/10 ✅ OTTIMO
Data Type Consistency 7/10 ✅ BUONO
Field Value Quality 5/10 ⚠️ SUFFICIENTE
Geographic Completeness 4/10 🔴 INSUFFICIENTE
CUP Quality 4/10 🔴 INSUFFICIENTE
Tidy Structure 7/10 ✅ BUONO

PUNTEGGIO COMPLESSIVO: 58/100 ⚠️ QUALITÀ MEDIA-BASSA

5.2 Issues Found (Prioritized)

🔴 BLOCKERS (Critical)

  1. Licenza non Open Data

    • Problema: CC-NC non permette uso commerciale
    • Impatto: Dataset NON conforme a CAD art. 52 e Linee Guida AgID
    • Fix: Cambiare a CC-BY 4.0 o IODL 2.0
  2. Codici ISTAT Comuni assenti

    • Problema: Solo nome comune, no codice ISTAT
    • Impatto: Impossibile join affidabile con altri dataset PA
    • Fix: Aggiungere codice_istat_comune (6 cifre)
  3. CUP non normalizzati

    • Problema: Spazi, minuscole, CUP multipli separati da ;
    • Impatto: Join con OpenCUP fallisce o dà risultati parziali
    • Fix: UPPER(TRIM()), split CUP multipli in righe separate

⚠️ MAJOR (High Priority)

  1. Schema dati non documentato

    • Problema: Nessun dizionario dati fornito
    • Impatto: Utenti non capiscono significato campi
    • Fix: Creare JSON Schema o Table Schema con descrizioni
  2. Descrizione dataset insufficiente

    • Problema: Descrizione troppo generica
    • Impatto: Bassa scopribilità e comprensione finalità
    • Fix: Ampliare con contesto, finalità, copertura
  3. 35% opere senza CUP

    • Problema: Solo ~65% ha CUP valorizzato
    • Impatto: Collegamento parziale a OpenCUP
    • Fix: Investigare cause, distinguere "senza CUP" da "non inserito"
  4. Codici ISTAT Province assenti

    • Problema: Solo nome provincia testuale
    • Impatto: Join con dataset province difficile
    • Fix: Aggiungere codice_istat_provincia (3 cifre)

🟡 MINOR (Nice to Have)

  1. Tag troppo generici

    • Fix: Aggiungere tag specifici (edilizia, cup, ainop, infrastrutture)
  2. Metadati formato CSV non dichiarati

    • Fix: Dichiarare encoding, separator, date format in metadata risorsa
  3. Campo anno_entrata_esercizio tipo misto

    • Fix: Convertire a INTEGER, NULL per valori vuoti

6. Compliance Check

6.1 CAD (Codice Amministrazione Digitale)

Requisito CAD Status Note
Art. 52 - Dati aperti ❌ NON CONFORME Licenza CC-NC non è Open Data
Art. 50 - Dati territoriali ⚠️ PARZIALE Coordinate OK, ma mancano codici ISTAT

6.2 AgID Guidelines

Linea Guida AgID Status Note
Livello 3 stelle (formato aperto) ✅ CONFORME CSV con encoding UTF-8
Livello 4 stelle (URI/ID) ❌ NON CONFORME Mancano URI/link a vocabolari controllati
Metadati DCAT-AP_IT ⚠️ PARZIALE Mancano campi obbligatori DCAT-AP_IT

6.3 DCAT-AP_IT

Campo DCAT-AP_IT Presente Valore
dct:title OK
dct:description ⚠️ Troppo generica
dcat:theme GOVE (government)
dct:accrualPeriodicity trimestrale
dct:spatial GeoJSON Italia
dcat:distribution.dcat:accessURL OK
dcat:distribution.dct:format CSV
dcat:distribution.dcat:byteSize 17114888
dcat:distribution.dct:license Licenza non conforme Open Data

7. Recommendations Summary

Immediate Actions (Urgenti - 1 settimana)

  1. Cambiare licenza a CC-BY 4.0 o IODL 2.0
  2. Aggiungere codici ISTAT:
    • codice_istat_comune (6 cifre)
    • codice_istat_provincia (3 cifre)
    • codice_catastale_comune (4 caratteri)
  3. Normalizzare campo codice_cup:
    • UPPER(TRIM())
    • Convertire " " e "" a NULL
    • Separare CUP multipli in righe distinte

Short Term (1 mese)

  1. Creare dizionario dati completo (JSON Schema/Table Schema)
  2. Ampliare descrizione dataset con contesto e finalità
  3. Aggiungere tag specifici: edilizia, cup, opere-pubbliche, infrastrutture, ainop
  4. Dichiarare formato CSV in metadata risorsa (encoding, separator, date format)

Medium Term (3 mesi)

  1. Investigare opere senza CUP: distinguere legittimamente senza CUP da errori inserimento
  2. Validare formati CUP (pattern 15 caratteri)
  3. Aggiungere link a vocabolari controllati per tipologie opere/infrastrutture

8. Positive Aspects ✅

Nonostante i problemi, ci sono aspetti positivi:

  1. Nomi colonne eccellenti: snake_case, SQL-friendly, leggibili
  2. Format CSV standard: UTF-8, virgola come separatore
  3. Date ISO 8601: formato internazionale conforme
  4. Coordinate WGS84/EPSG:4326: standard GIS internazionale
  5. DataStore attivo: permette query SQL dirette
  6. Struttura tidy: ogni riga = 1 osservazione (a parte CUP multipli)
  7. Dimensioni adeguate: 52K record ragionevoli per infrastrutture edilizie
  8. Aggiornamento recente: 2025-11-25

9. OpenCUP Integration Potential

Current Status

Aspetto Valutazione Note
Campo CUP presente ✅ SÌ codice_cup esiste
Copertura CUP ⚠️ 65% Solo 2/3 delle opere ha CUP
Qualità CUP 🔴 BASSA Spazi, minuscole, multipli, necessita pulizia
Join immediato possibile ❌ NO Necessaria normalizzazione prima

Steps for OpenCUP Join

  1. Data Cleaning:

    -- Pulizia CUP
    SELECT
      codice_iop,
      CASE
        WHEN TRIM(codice_cup) = '' THEN NULL
        ELSE UPPER(TRIM(codice_cup))
      END AS codice_cup_clean
    FROM edilizia
    WHERE codice_cup NOT LIKE '%;%'  -- escludi multipli per ora
  2. Gestione CUP multipli:

    • Decidere strategia: split in righe separate o campo secondario
    • ~5-10 casi rilevati nel campione
  3. Join con OpenCUP:

    SELECT
      e.*,
      o.titolo_progetto,
      o.costo_totale,
      o.soggetto_programmatore
    FROM edilizia_clean e
    LEFT JOIN opencup o ON e.codice_cup_clean = o.codice_cup
    WHERE e.codice_cup_clean IS NOT NULL
  4. Analisi coverage:

    • Quantificare quanti CUP matchano in OpenCUP
    • Identificare CUP in AINOP ma non in OpenCUP (e viceversa)

10. Conclusion

Il dataset Infrastrutture EDILIZIA AINOP ha una struttura tecnica buona (nomi campi, formato CSV, date ISO) ma problemi significativi di qualità dati e metadati:

Punti critici:

  • Licenza non conforme Open Data (blocker legale)
  • Codici ISTAT assenti (blocker tecnico per interoperabilità)
  • CUP non normalizzati (blocker per join OpenCUP)
  • Schema non documentato (barrier to use)

Potenziale:

  • Con le correzioni proposte, dataset può diventare risorsa di riferimento per opere pubbliche
  • Collegamenti AINOP-OpenCUP-Codici ISTAT permetterebbero analisi integrate
  • Struttura dati già tidy, necessita solo pulizia valori

Priorità: Risolvere i 3 blockers critici (licenza, codici ISTAT, normalizzazione CUP) entro 1 mese per portare dataset a livello "production-ready" per riuso.


Report generato con: CKAN MCP + DuckDB + data-quality skill Campione analizzato: 500 record su 52.192 totali (0.96%) Limitazioni: Download file completo fallito, analisi basata su DataStore API

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment