Sintassi formule segnali virtuali e regole

 

Databoom permette di creare segnali virtuali a partite da una lista di segnali (che possono essere virtuali anch'essi), per ogni segnale virtuale creato è necessario inserire una formula di trasformazione che dato in ingresso una lista di segnali restituisce un nuovo segnale. 

La stessa procedura vale anche per le regole, dove la formula inserita rappresenta una condizione che, se verificata, genera un allarme.

Per la procedura di inserimento di un segnale virtuale, rimandiamo a questo articolo mentre per la creazione delle regole è possibile fare riferimento all'apposita guida.

 Una volta inseriti i segnali di input è possibile passare alla scrittura della formula.

 La sintassi è utilizzabile esclusivamente nelle formule, NON è possibile applicarla alla stesura delle email/sms inviati al verificarsi di allarmi.

 

1. Operatori matematici

Operatori di aritmetica elementare (somma, sottrazione, moltiplicazione, divisione)

 + - * / 

Operatori aritmetici complessi (modulo, potenza, fattoriale)

% ^ ! 

 

2. Funzioni matematiche

  1. abs(x) - Valore Assoluto
  2. cbrt(x) - Radice Cubica
  3. ceil(x) - Arrotondamento per eccesso
  4. cube(x) - Cubo x^3
  5. exp(x) - e^x
  6. floor(x) - Arrotondamento per difetto
  7. gcd(a, b) - Massimo comun divisore fra 2 numeri
  8. hypot(a, b, …) - Ipotenusa tra lista di valori
  9. lcm(a, b) - Minimo comun multiplo fra 2 numeri
  10. log(x , base) - Logaritmo di un numero (base e o [base])
  11. log10(x) - Logaritmo base 10
  12. nthRoot(a, radice) Calcola l'ennesima radice (default 2)
  13. sqrt(x) Radice quadrata

 

2.1. Precisazioni

Tutti gli operatori e le operazioni matematiche possono essere usati in maniera combinata ed a cascata.

Esempio: Abbiamo in ingresso 2 segnali x0 e y0, vogliamo creare un segnale che sia la radice quadrata della somma tra x0 e il logartimo base 10 del rapporto tra x0 e y0

sqrt(x0 + log10(x0 / y0)) 

 

3. Operatori logici

Le formule dei segnali possono contenere anche operatori logici in grado di modificare il comportamento del segnale a seconda dell'input.

 

3.1 Operatori disponibili

 

  1. and Operatore AND, ritorna vero se entrambe le espressioni sono vere altrimenti falso
  2. not Operatore NOT di negazione, ritorna false se l'espressione è vera e vice versa
  3. or Operatore OR, ritorna vero se almeno una delle espressioni è vera, altrimenti falso
  4. xor Operatore XOR, ritorna vero se le espressioni non ritornano lo stesso risultato(Vero o Falso)
  5. ? : Espressione di condizione, valuta una condizione e se è vera esegue un'operazione altrimenti ne esegue un'altra. La struttura da seguire è Condizione ? Espressione per vero : Espressione per falso (Vedi Esempi)
  6. == Condizione di uguaglianza, ritorna vero se le espressioni sono uguali
  7. != Condizione di diseguaglianza, ritorna vero se le espressioni non sono uguali
  8. <  Condizioni di strettamente minore, ritorna vero se l'operatore di sinistra è strettamente minore di quello di destra
  9. > Condizione di strettamente maggiore, ritorna vero se l'operatore di sinistra è strettamente maggiore di quello di destra
  10. <=  Condizioni di minore, ritorna vero se l'operatore di sinistra è minore od uguale a quello di destra
  11. >= Condizione di maggiore, ritorna vero se l'operatore di sinistra è maggiore od uguale a quello di destra

 

3.2 Operatore speciale undefined

 

L'operatore undefined è utile quando si vuole scartare una serie di valori presenti nei segnali originali, questo operatore fa in modo che la serie di valori in esame venga scartata.

 

Esempio: Abbiamo in ingresso 2 segnali x0 e y0, vogliamo che il segnale in uscita sia la somma dei valori in entrata, vogliamo anche però che non vengano riportati quei valori la cui somma è minore di 7

x0 + y0 >= 7 ? x0 + y0 : undefined 

Questa formula usa l'operatore logico >= per validare la proprietà maggiore di 7, inoltre usa l'espressione di condizione ?: per variare il risultato in funzione dell'input.

Letteralmente andrebbe letta come: se (x0 + y0 >=0)  allora somma x0 + y0 altrimenti salta questi valori (undefined).

 

4. Variabili speciali 

Quando si crea una formula, ad ogni segnali di ingresso viene assegnata una variabile riconoscitiva che ci permette di utilizzare il segnale nelle formule, tipicamente queste variabili hanno un formato del tipo x0 y0 z0 t0. Queste variabili indicano il valore esatto in ingresso. Sono presenti delle estensioni che permettono di utilizzare altri valori calcolati su tutta la serie di punti in esame.

  1. mean_[variabile] - Restituisce il valore medio del segnale 
  2. max_[variabile] - Restituisce il valore massimo del segnale 
  3. min_[variabile] - Restituisce il valore minimo del segnale
  4. last_[variabile] - Restituisce l'ultimo valore registrato del segnale
  5. max_p_[variabile] - Restituisce il valore massimo della barra in esame (se il segnale ha una granularità diversa da Tutti i valori)
  6. min_p_[variabile] - Restituisce il valore massimo della barra in esame (se il segnale ha una granularità diversa da Tutti i valori)

La variabile last_w_[variabile] permette invece di referenziare l'ultimo valore disponibile nell'intervallo richiesto del segnale passato come variabile.

sum_partial_x0 e mean_partial_x0 permettono rispettivamente di fare riferimento alla somma o la media totali alla ricezione di ogni valore. Ogni valore consiste quindi nell'aggregazione di tutti i valori precedenti.

Esempio: Abbiamo in ingresso 2 segnali x0 e y0, vogliamo creare un segnale in uscita che sia la somma dei 2 in entrata diviso la somma dei valori medi

(x0 + y0) / (mean_x0 / mean_y0)

 

5. Funzioni con periodo 

Tutte le funzioni visto fin'ora lavorano in maniera puntuale, ossia il loro output dipende solo dal valore in esame e non ha nessun riferimento con i valori precedenti della serie. Databoom offre però tutta una serie di funzioni che lavorano con una finestra mobile di n periodi in grado di estrapolare un dato statistico dipendente dai valori contenuti nella finestra mobile.

  1. kf(percentile(f(x), rank),periodo) - Calcola l'ennesimo percentile di f(x)
  2. kf(ma(f(x), rank),periodo) - Calcola la media lineare di f(x)
  3. kf(wma(f(x), rank),periodo) - Calcola la media pesata di f(x)
  4. kf(ema(f(x), rank),periodo) - Calcola la media esponenziale di f(x)
  5. kf(ssd(f(x), rank),periodo) - Calcola la deviazione standard di f(x)
  6. kf(gradient(f(x), rank),periodo) - Calcola il gradiente di f(x)
  7. kf(ago(f(x), rank),periodo) - Calcola il valore di f(x) al periodo [periodo]

 

5.1 Note sul periodo

Il periodo indica quanto lunga è la finestra mobile di calcolo ossia quanti elementi della serie vengono presi in considerazione per il calcolo del valore, qualora si vogliano utilizzare tutti gli elementi della serie utilizzare come periodo "f".

 

EsempioAbbiamo in ingresso un segnale x0, vogliamo estrarre un segnale che rappresenti il 25° percentile del segnale su una finestra mobile di 14 valori

kf(percentile(x0,25),14)

 

EsempioAbbiamo in ingresso un segnale x0, vogliamo estrarre un segnale costante che rappresenti il gradiente di tutta la serie in esame (finestra fissa lunga quanto tutta la serie)

kf(gradient(x0),f)

 

6. Esecuzione programmata di Regole su base temporale

La valutazione delle regole normalmente avviene in base ai dati in ingresso, quando uno dei segnali/device che è collegato alla regola riceve un aggiornamento, il sistema valuta la regola sui dati appena inseriti. Qual'ora si volesse creare delle regole da valutare a intervalli fissi, come ad esempio una regola che imposta l'invio di un report giornaliero è necessario usare una sintassi specifica che dichiara un intervallo di tempo entro il quale va valutata la regola. Questo avviene attraverso l'operatore speciale eval.

EsempioValutare una regola ogni giorno alle 10:15 (+/- 15min)

eval(italy_date = moment.tz("Europe/Rome"); if(italy_date.hour()==10 && italy_date.minute()<=30) result=1; else result=0;)

EsempioValutare una regola ogni lunedì alle 8:00

eval(italy_date = moment.tz("Europe/Rome"); if(italy_date.hour()==8 && italy_date.minute()<=15 && italy_date.day()==1) result=1; else result=0;)

E' importante sempre fissare un range di tempo e non una data esatta perché il processo che analizza le regole è basato su code, quindi a seconda del traffico è possibile che ci siano dei lievi ritardi nella valutazione della stessa, per questo consigliamo di mantenere uno span di un quarto d'ora.

 

7. Utilizzo dell'opzione Applica sempre a tutti i dati (Segnali virtuali)

Databoom permette di visualizzare i dati con granularità differenti così per esempio se un segnale in entrata è campionato ogni 5 minuti è possibile vedere lo stesso segnale aggregato per ora, questo viene fatto (per i segnali non contatore) prendendo tutti i valori dell'ora e mediandoli ottenendo un valore unico per ora.

Questa operazione è la prima che viene eseguita nel flusso di generazione del segnale virtuale, ossia la formula impostata viene applicata sul dato già aggregato. Questa modalità è la più indicata per la maggior parte dei casi, alcune volte però potrebbe essere necessario applicare la formula prima di creare l'aggregazione per granularità. Ad esempio se abbiamo in ingresso un segnale tra 1 e 100 e vogliamo in uscita un segnale tra 0 e 1, applicando la seguente formula:

x0 > 30 ? 1 : 0

questa dovrà essere sempre calcolata sul segnale originale e non su quello elaborato con diversa granularità, in questo casi ci viene in aiuto l'opzione Applica sempre a tutti i dati, selezionando questa opzione ci assicuriamo che la formula sia la prima cosa che viene valutata durante il processo di visualizzazione del segnale virtuale.

 

8. Esempi Pratici

 

8.1 Abbiamo in ingresso 2 segnali x0 y0, vogliamo poter estrarre un segnale che rappresenti la media dei 2 segnali pesati per la differenza tra max e min del singolo segnale

x0*((max_x0 - min_x0)/((max_x0 - min_x0) + (max_y0 - min_y0)) + y0*((max_y0 - min_y0)/((max_x0 - min_x0) + (max_y0 - min_y0))

8.2 Abbiamo in ingresso 3 segnali x0 y0 z0, vogliamo poter estrarre un segnale che rappresenti la media pesata del prodotto assoluto dei 3 segnali con una finestra mobile di 12 periodi

kf(wma(abs(x0*y0*z0)),12)

 

9. F.A.Q.

Q. E' possibile avere più di una funzione con periodo all'interno dello stesso segnale virtuale?

No, al momento un segnale virtuale può contenere solo una singola funzione con periodo, è comunque possibile dividere il segnale virtuale in più segnali e comporlo come derivazione di parti.

Esempio: Abbiamo in ingresso 2 segnali x0 e y0, vogliamo calcolare la somma della media mobile e della media esponenziale mobile dei 2 segnali, 12 periodi

kf(ma(x0+y0),12) + kf(ema(x0+y0),12)

Questa non è una formula valida perchè è composta da più funzioni a finestra. La soluzione per ovviare a questo problema è creare 2 segnali virtuali v1 e v2 con gli stessi ingressi x0 e y0, rispettivamente con formule:

kf(ma(x0+y0),12)

e

kf(ema(x0+y0),12)

Infine si crea un terzo segnale virtuale con i 2 segnali v1 e v2 in ingresso e si applica la formula

v1 + v2
Altre domande? Invia una richiesta

0 Commenti

Accedi per aggiungere un commento.