QGIS creare grafici con incrementi giornalieri

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

Ringraziamenti


Se il blog post vi è piaciuto cliccate su ‘Mi piace’, grazie!!!
if you liked the blog post click on ‘Like’, thank you !!!

SE IL POST VI È STATO UTILE CONTRIBUITE A MANTENERLO AGGIORNATO PAYPAL


Pubblicità

2 pensieri su “QGIS creare grafici con incrementi giornalieri

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.