QGIS: LE ESPRESSIONI REGOLARI PER LA pulizia DEI DATI

In questo (Dove sono gli alberi monumentali d’Italia?) bel blog post, del maestro Andrea Borruso, si parla di alberi monumentali d’Italia, della genesi del dataset e dei problemi riscontrati per ottenere un output strutturato e facilmente leggibile: csv, geojson (vi consiglio la lettura).

L’output, di questo lungo lavoro certosino, è un file CSV con #19 campi e oltre #2000 record; tra i vari campi sono presenti le coordinate longitudine, latitudine (in EPSG 4326) che permettono di visualizzare – per esempio con QGIS – i pallini degli alberi monumentali d’Italia.


Mappa di sfondo: OpenStreetMap contributors

In questo blog post vedremo come effettuare delle selezioni e correzione sui dati presenti in alcuni campi del CSV

Vediamo gli errori nel campo CONTESTO URBANO sì/no”

Tematizzazione per categorie – “CONTESTO URBANO sì/no”
campo
CONTESTO URBANO sì/no”

come si puo’ notare risultano 8 classi invece di due (si, no): sono tipici errori di battitura, spazio a fine parola (si , no ); tutto maiuscolo (SI); prima lettera maiuscola e ì accentata (Si); ecc…;

Vediamo gli errori nel campo PROVINCIA”

Tematizzando usando il campo “PROVINCIA”

Legenda – “PROVINCIA” con errori

anche in questo caso alcune province sono scritte male: spazio a fine parola (Biella e Campobasso); trattino tra una parola e l’altra (Monza Brianza); lettere in più (Verbano Cusio Ossola): sono tipici errori di battitura.

Come correggere questi errori usando il calcolatore di campi di QGIS e le espressioni regolari

nel primo caso occorre intercettare tutti i casi possibili relativi alla parola si e no, la ricetta che risolve il problema è la seguente:

.+[sS].+ per il sì;
.+[nN].+ per il no;

dove:

caratteri speciali regex

usando il calcolatore di campi ed aggiornando il campo stesso:

field calculator in aggiornamento campo

espressione usata:

IF( 
regexp_match( "CONTESTO URBANO sì/no" ,'.[sS].'),
regexp_replace( "CONTESTO URBANO sì/no" ,'.[sS].', 'sì'),
regexp_replace( "CONTESTO URBANO sì/no" ,'.[nN].', 'no')
)

ecco la legenda dopo la correzione:

legenda

nel secondo caso occorre intercettare vari casi ma il più complesso è quello relativo agli spazi a fine stringa:

tutte le province con spazio finale nel nome
  • (.+?)( +)$ per intercettare gli spazi a fine stringa (uno o più spazi)
  • .* per gli altri casi;

usando il calcolatore di campi ed aggiornando il campo stesso:

field calculator in aggiornamento campo
CASE 
WHEN regexp_match( "PROVINCIA" , 'Monza.+') > 0 THEN regexp_replace ("PROVINCIA",'Monza.+','Monza Brianza')
WHEN regexp_match( "PROVINCIA" , 'Verbano Cusio O.+') > 0 THEN regexp_replace ("PROVINCIA",'Verbano Cusio O.+','Verbano Cusio Ossola')
WHEN regexp_match( "PROVINCIA" , '(.+?)( +)$') > 0 THEN regexp_replace ("PROVINCIA" , '(.+?)( +)$','\\1')
ELSE "PROVINCIA"
END

Buone letture

Pubblicità

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.