CORREZIONE DEI DATI TRAMITE LE ESPRESSIONI REGOLARI E LA CLI

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 correzione sui dati presenti in alcuni campi del CSV usando la riga di comando

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 (sì, no): sono tipici errori di battitura, spazio a fine parola (si , no ); tutto maiuscolo (SI); prima lettera maiuscola e i non  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.

Correggere questi errori usando le espressioni regolari e la riga di comando

nel primo caso occorre intercettare tutti i casi possibili relativi alla parola si e no, nel secondo caso occorre intercettare vari errori ma il più complesso è quello relativo agli spazi a fine stringa; questo script bash risolve gli errori descritti e genera un nuovo file CSV:

#!/bin/bash
sqlite3 nomeDb.db <<EOF
— per usare questo script occorre creare prima un db.db
— nel seguente modo: $ sqlite3 nomeDb.db
— si avvierà sqlite con db pronto all''uso
.mode csv alberiMonumentali
.import alberiMonumentali.csv alberiMonumentali
— legge modulo per il regex
.load /usr/lib/sqlite3/pcre.so
— correzione spazi iniziali e finali
— campo PROVINCIA
UPDATE "alberiMonumentali" SET "PROVINCIA" = TRIM("PROVINCIA");
— campo COMUNE
UPDATE "alberiMonumentali" SET "COMUNE" = TRIM("COMUNE");
— campo LOCALITÀ
UPDATE "alberiMonumentali" SET "LOCALITÀ" = TRIM("LOCALITÀ");
— campo PROPOSTA DICHIARAZIONE NOTEVOLE INTERESSE PUBBLICO
UPDATE "alberiMonumentali" SET "PROPOSTA DICHIARAZIONE NOTEVOLE INTERESSE PUBBLICO" =
TRIM("PROPOSTA DICHIARAZIONE NOTEVOLE INTERESSE PUBBLICO");
— correzione campo CONTESTO_URBANO sì/no
UPDATE "alberiMonumentali" SET "CONTESTO URBANO sì/no" = 'sì'
WHERE "CONTESTO URBANO sì/no" regexp '.*[sS].*';
UPDATE "alberiMonumentali" SET "CONTESTO URBANO sì/no" = 'no'
WHERE "CONTESTO URBANO sì/no" regexp '.*[nN].*';
— correzione campo PROVINCIA
UPDATE "alberiMonumentali" SET "PROVINCIA" = 'Verbano Cusio Ossola'
WHERE "PROVINCIA" regexp 'Verbano Cusio.*';
UPDATE "alberiMonumentali" SET "PROVINCIA" = 'Monza Brianza'
WHERE "PROVINCIA" regexp 'Monza.*';
— correzione campo PROPOSTA DICHIARAZIONE NOTEVOLE INTERESSE PUBBLICO
UPDATE "alberiMonumentali" SET "PROPOSTA DICHIARAZIONE NOTEVOLE INTERESSE PUBBLICO" = 'sì'
WHERE "PROPOSTA DICHIARAZIONE NOTEVOLE INTERESSE PUBBLICO" = 'si';
— esporto in csv
.headers on
.mode csv
.output alberiMonumentali_v01.csv
SELECT * FROM alberiMonumentali;
.quit
EOF
rm ./nomeDb.db
view raw correzioni.sh hosted with ❤ by GitHub

Lo script bash: crea un database SQLite e importa il file CSV; tramite le query di aggiornamento (UPDATE) e le funzione trim e regexp, trova e sostituisce i valori errati; infine, esporta i dati corretti in un nuovo file CSV

regex

ecco la legenda dopo la correzione – primo caso:

ecco la legenda dopo la correzione – secondo caso:

Legenda – “PROVINCIA” corretta!

Alcuni riferimenti:

Per chi volesse provare: CSV 

 

Ringraziamenti
Il gruppo Telegram HfcQGIS in RTD by ODS e Andrea Borruso

 

Buon lavoro!!!

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 Twitter

Stai commentando usando il tuo account Twitter. 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.