Usare QGIS nel periodo del CoronaVirus porta a fare grandi passi avanti nell’uso delle espressioni.
Grazie all’iniziativa di OnDATA, la PCM e il DPC realizzano un repository ufficiale dove raccolgono tutti i dati del COVID-19 in Italia, sono dati aggiornati con cadenza giornaliera.
Sotto un primo tentativo di Atlas con i dati raccolti da OnDATA (ancora non esisteva il repository ufficiale):

condivido lo screenshot in una chat privata e il buon Andrea Borruso mi scrive:

I dati a disposizione (per semplificare) sono dati cosi strutturati:
- data : è la data di pubblicazione dei dati;
- totale : sono i totali positivi al coronavirus aggregati fino a quella data
- deceduti : sono i deceduti aggregati;
- guariti : sono i guariti aggregati;
- tamponi : sono i tamponi aggregati realizzati fino a quella data di pubblicazione;
- ecc…
Il grafico con linea nera rappresenta la curva dei dati aggregati totali, mentre quello in rosso sono gli incrementi giornalieri: tracciare il grafico nero è semplice, basta dare alle ascisse il campo data
e alle ordinate il campo totale
.
Diventa più complesso tracciare il grafico in rosso (delta giornalieri) in quanto occorre istruire il plugin con una espressione, cioè nell’asse delle ordinate va inserita una espressione che calcoli gli incrementi giornalieri.
vediamo come nasce questa espressione
Per prima cosa creo un array
con le date e le ordino in senso crescente:
array_agg(
expression:= "data" ,
order_by:= "data")
associo ad ogni elemento dell’ array
il suo indice di posizione con:
array_find(
array_agg(
expression:= "data" ,
order_by:= "data" ) , "data" )
il primo elemento ha indice 0. L’espressione restituisce numeri interi che rappresentano la posizione del dato all’interno dell’array
.
Creo una variabile personalizzata @my_exp
con l’espressione di sopra.
Con la seguente condizione:
if(
@my_exp = 0,
(array_agg(
expression:="tot_att_pos",
order_by:="data")[0]),
("tot_att_pos" - (array_agg(expression:="tot_att_pos", order_by:="data")[@my_exp-1]))
)
dove:
@my_exp = 0,
(array_agg(
expression:="tot_att_pos",
order_by:="data")[0])
cioè, al primo elemento dell’array
(il primo valore del campo data
) associa il primo elemento [0]
del campo tot_att_pos
;
altrimenti fai una differenza:
("tot_att_pos" -
(array_agg(
expression:= "tot_att_pos" ,
order_by:= "data")[@my_exp-1])
)
tra il valore corrente del campo tot_att_pos
e il valore successivo come data
.
L’espressione completa:
with_variable( 'my_exp',
array_find(
array_agg(
expression:= "data" ,
order_by:= "data"),"data" ),
if( @my_exp = 0, -- condizione
(array_agg(
expression:= "tot_att_pos" ,
order_by:= "data" )[0]), -- se vero
("tot_att_pos" -
(array_agg(
expression:= "tot_att_pos" ,
order_by:= "data" )[@my_exp-1])) -- altrimenti
)
)
Il campo TEST è popolato con l’espressione completa di sopra.
NOTA FINALE: W gli array nel Field Cald di QGIS!
Riferimenti
- COVID-19 : http://www.salute.gov.it/portale/nuovocoronavirus/dettaglioFaqNuovoCoronavirus.jsp?lingua=italiano&id=228
- QGIS : https://qgis.org/it/site/
- OnDATA repository : https://github.com/ondata/covid19italia
- PCM-DPC : http://www.protezionecivile.gov.it/home
- Atlas QGIS : https://docs.qgis.org/3.4/it/docs/training_manual/forestry/forest_maps.html?highlight=atlas
- HfcQGIS : http://hfcqgis.opendatasicilia.it/it/latest/esempi/calcolo_incrementi_giornalieri.html
- Plugin DataPlotly : https://plugins.qgis.org/plugins/DataPlotly/
Ringraziamenti
- Andrea Borruso per lo spunto sui dati incrementali.
- Matteo Ghetta per il Plugin DataPlotly
Se il blog post vi è piaciuto cliccate su ‘Mi piace’, grazie!!!
if you liked the blog post click on ‘Like’, thank you !!!
Ottimo, grazie mille! Spero che finisca presto l’incubo del virus.
"Mi piace"Piace a 1 persona
Ciao Gabriela.
"Mi piace""Mi piace"