In questi giorni ho avuto la necessità di creare tabelle PIVOT a partire da tabelle sorgenti presenti nel repository della Protezione Civile (PCM-DPC), le ormai tristi ma famose tabelle che raccolgono i dati sul coronavirus (COVID-19).
Le PIVOT possono essere realizzate con vari programmi, anche usando SQL (per esempio in data.world), ma in questo blog post (per me è un promemoria per non dimenticarlo) utilizzerò Visidata, un programma straordinario (VisiData è un fantastico strumento open source per esplorare e manipolare dati. Mette insieme la chiarezza di un foglio di calcolo, con l’efficienza del terminale e la potenza di Python, in una utility leggera in grado di gestire milioni di righe con facilità. (cit. Andrea Borruso)).
La tabella sorgente che utilizzerò è la dpc-covid19-ita-province.csv
che raccoglie i dati per provincia:
data | stato | codice_regione | denominazione_regione | codice_provincia | denominazione_provincia | sigla_provincia | lat | long | totale_casi | note_it | note_en |
---|---|---|---|---|---|---|---|---|---|---|---|
2020-02-24T18:00:00 | ITA | 13 | Abruzzo | 069 | Chieti | CH | 42.35103167 | 14.16754574 | 0 | ||
2020-02-24T18:00:00 | ITA | 13 | Abruzzo | 066 | L’Aquila | AQ | 42.35122196 | 13.39843823 | 0 | ||
2020-02-24T18:00:00 | ITA | 13 | Abruzzo | 068 | Pescara | PE | 42.46458398 | 14.21364822 | 0 | ||
2020-02-24T18:00:00 | ITA | 13 | Abruzzo | 067 | Teramo | TE | 42.6589177 | 13.70439971 | 0 | ||
2020-02-24T18:00:00 | ITA | 13 | Abruzzo | 979 | In fase di definizione/aggiornamento | 0 | 0 | 0 |
la tabella è raggiungibile tramite questo URL:
https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-province/dpc-covid19-ita-province.csv
la visualizzo in visidata tramite questo comando (da riga di comando):
curl -L https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-province/dpc-covid19-ita-province.csv | vd -f csv
Da questa tabella mi servono solo tre campi (data, denominazione_provincia e totale_casi) per fare la PIVOT, per nascondere le colonne che non mi servono basta selezionarle e pigiare meno (-):

a partire da queste tre colonne, per realizzare la PIVOT (devo ottenere: 107 righe quante sono le province e tante colonne quante sono le date del censimento, come valore utilizzerò il max(totale_casi):
- sul campo
totale_casi
pigiare+
e digitaremax
; - sul campo
denominazione_provincia
digitare!
per renderla colonna chiave; - spostare il cursore su
data
e pigiareshift+W
per realizzare la PIVOT:
da buon osservatore, noto che le righe sono 108 (guarda in basso a destra) e che i nomi dei campi contengono le date ma con totale_casi_max_
come prefisso.
Per eliminare la 108esima riga che non ci serve, la seleziono e pigio d
(delete)
per modificare i nomi delle colonne da totale_casi_max_2020-02-24T18:00:00
a 2020-02-24
:
- pigio
shift+c
per aprire il foglio delle colonne; - seleziono tutte le colonne da modificare, cioè quelle che contengono
-
(trattino), sulla prima colonna pigio|
e-
; - pigio
g*
per il trova e sostituisci tramite regex e digito(.+)(2020.+)(T.+)/\2
e invio; - pigio la
q
per tornare al foglio precedente, ecco il risultato:
Per salvare la tabella, pigiare ctrl+s
NOTE FINALI: Visidata è uno strumento straordinario ma occorre usarlo per apprezzare le potenzialità, per realizzare questa PIVOT occorrono circa 20 secondi (se sai usare lo strumento) altrimenti contatta wikiAndy
! 😉 .
Riferimenti
- La guida di Jeremy Singer Vine https://jsvine.github.io/intro-to-visidata/
- le ricette sul sito ufficiale http://visidata.org/docs/;
- la documentazione ufficiale http://visidata.org/man/;
- la playlist YouTube a cura dell’autore https://www.youtube.com/watch?v=N1CBDTgGtOU&list=PLxu7QdBkC7drrAGfYzatPGVHIpv4Et46W;
- la lista visuale degli shortcut da tastiera http://visidata.org/docs/kblayout/.
- repository OnData https://github.com/ondata/guidaVisiData/blob/master/testo/README.md?
- Blog post su Medium by Andrea : https://medium.com/mai-piu-senza/creating-non-numeric-pivot-tables-with-visidata-recipe-three-af26118d471
- PCM-DPC : https://github.com/pcm-dpc/COVID-19
Ringraziamenti:
- Jeremy Singer Vine
- Saul Pwanson
- Andrea Borruso
Ciao Salvatore, quando vado alla fine a pigiare g* per il trova e sostituisci tramite regex mi sembra di capire, interpretando il messaggio, che non puo` essere fatto sulla PIVOT.
"Mi piace"Piace a 1 persona
Ciao Franco,
ho rifatto l’esempio e tutto funziona come dovrebbe.
Occorrono maggiori dettagli per capire che errore ottieni.
"Mi piace""Mi piace"