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
| Aspetto | Valutazione | Note |
|---|---|---|
| Titolo | ✅ BUONO | "Elenco opere pubbliche censite su portale AINOP" - chiaro e descrittivo |
| Descrizione | Solo: "Il dataset contiene l'elenco opere pubbliche censite su portale AINOP" - troppo generica, manca contesto, finalità, copertura temporale/geografica | |
| Tags | 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 | 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
| Aspetto | Valutazione | Note |
|---|---|---|
| Descrizione risorsa | "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
| 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 |
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 |
| 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) |
Campione analizzato: 500 record (primi del DataStore)
| Campo | Tipo Atteso | Tipo Rilevato | Qualità |
|---|---|---|---|
codice_iop |
TEXT | TEXT | ✅ Alfanumerico uppercase |
codice_cup |
TEXT | TEXT | |
data_creazione |
DATE/TIMESTAMP | TIMESTAMP | ✅ ISO 8601: 2025-03-14T00:00:00 |
anno_entrata_esercizio |
INTEGER/TEXT | TEXT | |
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
Non ci sono campi numerici puri in questo dataset (dimensioni opere, costi, etc. non presenti).
CRITICO per collegamento OpenCUP
Dall'analisi precedente su 100 record:
- ~65% ha CUP valorizzato ✅
- ~35% CUP vuoto ❌
| Problema | Esempio | Gravità | Impatto |
|---|---|---|---|
| Spazi vuoti | " " (un solo spazio) |
Necessita trim/NULL conversion | |
| Stringhe vuote | "" |
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
URGENTI:
-
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
-
Gestione CUP multipli:
- Valutare se separare in righe distinte (normalizzazione)
- O creare campo
codice_cup_secondario - NON lasciare separati da
;
-
Validazione formato CUP:
- Pattern:
[A-Z][0-9]{2}[A-Z][0-9]{11} - Esempio:
G48B09000050005(15 caratteri) - Aggiungere controllo formato in pubblicazione
- Pattern:
-
Copertura:
- Investigare perché ~35% opere senza CUP
- Distinguere: "opera senza CUP" vs "CUP non inserito"
| 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 |
|
comune |
Agrigento |
🔴 MANCA codice ISTAT comune |
Comuni senza codice ISTAT:
- Esempio:
Agrigentodovrebbe avere anche082001(codice catastaleA089) - 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à)
| Controllo | Risultato | Note |
|---|---|---|
| Formato Long/Tidy | ✅ SÌ | Ogni riga = 1 opera |
| Colonne come valori | ✅ NO | No colonne tipo "2020", "2021", etc. |
| Valori atomici | codice_cup a volte contiene multipli separati da ; |
|
| 1 osservazione/riga | CUP multipli violano questa regola |
| 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 |
| Aspetto | Dichiarato | Verificato | Coerenza |
|---|---|---|---|
| Frequenza | trimestrale |
- | 🔍 Da verificare cronologia |
| Ultimo aggiornamento | 2025-11-25 | - | ✅ Recente |
| Data creazione dataset | 2025-08-06 | - |
| Campo Metadata | Dichiarato | Rilevato | Match |
|---|---|---|---|
| Encoding | NON dichiarato | UTF-8 | |
| Separator | NON dichiarato | , (virgola) |
|
| Row count | NON dichiarato | 52.192 | |
| DataStore | datastore_active: true |
✅ Attivo | ✅ Match |
| Dimensione | Punteggio | Livello |
|---|---|---|
| Metadata Discoverability | 5/10 | |
| 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 | |
| Geographic Completeness | 4/10 | 🔴 INSUFFICIENTE |
| CUP Quality | 4/10 | 🔴 INSUFFICIENTE |
| Tidy Structure | 7/10 | ✅ BUONO |
PUNTEGGIO COMPLESSIVO: 58/100
-
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
-
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)
-
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
- Problema: Spazi, minuscole, CUP multipli separati da
-
Schema dati non documentato
- Problema: Nessun dizionario dati fornito
- Impatto: Utenti non capiscono significato campi
- Fix: Creare JSON Schema o Table Schema con descrizioni
-
Descrizione dataset insufficiente
- Problema: Descrizione troppo generica
- Impatto: Bassa scopribilità e comprensione finalità
- Fix: Ampliare con contesto, finalità, copertura
-
35% opere senza CUP
- Problema: Solo ~65% ha CUP valorizzato
- Impatto: Collegamento parziale a OpenCUP
- Fix: Investigare cause, distinguere "senza CUP" da "non inserito"
-
Codici ISTAT Province assenti
- Problema: Solo nome provincia testuale
- Impatto: Join con dataset province difficile
- Fix: Aggiungere
codice_istat_provincia(3 cifre)
-
Tag troppo generici
- Fix: Aggiungere tag specifici (edilizia, cup, ainop, infrastrutture)
-
Metadati formato CSV non dichiarati
- Fix: Dichiarare encoding, separator, date format in metadata risorsa
-
Campo
anno_entrata_eserciziotipo misto- Fix: Convertire a INTEGER, NULL per valori vuoti
| Requisito CAD | Status | Note |
|---|---|---|
| Art. 52 - Dati aperti | ❌ NON CONFORME | Licenza CC-NC non è Open Data |
| Art. 50 - Dati territoriali | Coordinate OK, ma mancano codici ISTAT |
| 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 | Mancano campi obbligatori 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 |
- Cambiare licenza a CC-BY 4.0 o IODL 2.0
- Aggiungere codici ISTAT:
codice_istat_comune(6 cifre)codice_istat_provincia(3 cifre)codice_catastale_comune(4 caratteri)
- Normalizzare campo
codice_cup:- UPPER(TRIM())
- Convertire
" "e""a NULL - Separare CUP multipli in righe distinte
- Creare dizionario dati completo (JSON Schema/Table Schema)
- Ampliare descrizione dataset con contesto e finalità
- Aggiungere tag specifici: edilizia, cup, opere-pubbliche, infrastrutture, ainop
- Dichiarare formato CSV in metadata risorsa (encoding, separator, date format)
- Investigare opere senza CUP: distinguere legittimamente senza CUP da errori inserimento
- Validare formati CUP (pattern 15 caratteri)
- Aggiungere link a vocabolari controllati per tipologie opere/infrastrutture
Nonostante i problemi, ci sono aspetti positivi:
- ✅ Nomi colonne eccellenti: snake_case, SQL-friendly, leggibili
- ✅ Format CSV standard: UTF-8, virgola come separatore
- ✅ Date ISO 8601: formato internazionale conforme
- ✅ Coordinate WGS84/EPSG:4326: standard GIS internazionale
- ✅ DataStore attivo: permette query SQL dirette
- ✅ Struttura tidy: ogni riga = 1 osservazione (a parte CUP multipli)
- ✅ Dimensioni adeguate: 52K record ragionevoli per infrastrutture edilizie
- ✅ Aggiornamento recente: 2025-11-25
| Aspetto | Valutazione | Note |
|---|---|---|
| Campo CUP presente | ✅ SÌ | codice_cup esiste |
| Copertura CUP | Solo 2/3 delle opere ha CUP | |
| Qualità CUP | 🔴 BASSA | Spazi, minuscole, multipli, necessita pulizia |
| Join immediato possibile | ❌ NO | Necessaria normalizzazione prima |
-
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
-
Gestione CUP multipli:
- Decidere strategia: split in righe separate o campo secondario
- ~5-10 casi rilevati nel campione
-
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
-
Analisi coverage:
- Quantificare quanti CUP matchano in OpenCUP
- Identificare CUP in AINOP ma non in OpenCUP (e viceversa)
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