In questo articolo vi spiegherò come fare degli if statements con tre differenti nodi: il Math Formula, il Rule Engine ed il Column Expression.
L’obiettivo sarà mostrare le differenti sintassi dell’If Statement per ciascuno dei nodi considerati e come il funzionamento del nodo stesso sia differente, sottolineando quale sia più conveniente usare in base al tipo di operazione che stiamo svolgendo.
Facciamo innanzitutto un piccolo focus su ciascun nodo. Spiegando poi quale formula usare per creare un IF statement.
Rule Engine

Il Rule Engine è il nodo che permette di creare delle regole per ciascuna riga delle nostre tabelle di dati e, se la regola è valida, aggiunge il risultato in una nuova colonna o sostituisce la colonna sulla quale si sta creando la nuova regola. In questo nodo la colonna di input e di output non devono avere necessariamente lo stesso datatype, si possono quindi creare delle regole su colonne numeriche ed avere come risultato una colonna stringa (String datatype) senza alcun problema.
L’IF STATEMENT che andremo a creare utilizzerà come esempio questa tabella di dati:

Il nostro obiettivo è creare una nuova colonna che chiameremo Cluster per assegnare l’etichetta “Low” a tutti i prodotti che sono stati venduti con uno sconto (colonna Discount) inferiore al 20%; “Medium” per tutti i prodotti venduti con uno sconto inferiore al 40% e “High” per sconti superiori.
Con il Rule Engine la formula dovrà essere scritta nel seguente modo:
$Discount$ <= 0.2 => “Low”
$Discount$ <= 0.4 => “Medium”
TRUE => “High”

Questa formula assegna semplicemente l’etichetta Low (con il simbolo “=>”), a tutti i valori all’interno della colonna Discount che sono inferiori o uguali allo 0.2 (20%), Medium a quelli inferiori a 0.4 (40%) e High a tutti gli altri.
Scegliendo l’opzione “Append Column” in fondo alla finestra di dialogo, verrà creata una nuova colonna nella nostra tabella dati e ne potremo scegliere il nome, nel nostro caso Cluster. Eseguiamo il nodo.
Il risultato ottenuto è il seguente. Con un solo nodo abbiamo ottenuto il risultato desiderato.

Math Formula

Questo nodo risulta invece leggermente diverso dal rule engine, qui è possibile usare un numero superiore di formule matematiche applicandole a ciascuna riga numerica della nostra tabella di dati. Difatti questo nodo, a differenza del Rule Engine, deve avere come input ed output esclusivamente valori numerici.
Useremo l’IF STATEMENT sullo stesso esempio precedente in modo che possiate vedere meglio la differenza nella sintassi della formula; nonché i punti di debolezza di questo nodo per eseguire l’operazione desiderata.
Il Math Formula in questo caso non è infatti il procedimento migliore. Essendo che deve avere come input ed output esclusivamente valori numerici, non è possibile utilizzare la nostra colonna Discount per assegnare direttamente le etichette Low, Medium, High.
Il procedimento con la Math Formula risulta perciò leggermente più elaborato e richiede un secondo passaggio con il nodo Rule Engine.
Apriamo la finestra di dialogo del nodo Math Formula e inseriamo la formula che assegnerà a ciascuno sconto un valore numerico discrezionale, nel nostro esempio scegliamo l’1, il 2 e il 3 (output numerici).

La finestra del nodo ci fa vedere anche in questo caso la ”Column list”, la lista delle Colonne che possiamo usare per i nostri calcoli, che in questo caso è molto più ristretta di quella del Rule Engine, tenendo solamente in lista colonne con datatype numerico. E subito a destra la lista delle differenti “Function” che possiamo usare in questo nodo, con la relativa spiegazione sulla destra.
Selezioniamo la funzione if(x, y, z) cui sintassi è: if(cond, trueval,falseval) e scriviamo la formula:
if($Discount$<=0.2, 1,if($Discount$<=0.4, 2, 3) )
Se la condizione (cond) che lo sconto sia <20% si verifica, allora assegnerà il valore 1 (trueval), se invece non si verifica, applichiamo una seconda condizione if che verifica la condizione che lo sconto sia <40% assegnando il valore 2 ed infine se non si verifica ne la prima ne la seconda assegnamo il valore 3 (falseval).
Stiamo quindi assegnando agli sconti<20% il valore 1; a quelli <40% il valore 2 e a tutti gli altri il valore 3.
In fondo alla finestra di dialogo abbiamo infine l’opzione che ci permette di decidere se i risultati dell’operazione vogliamo che siano aggiunti in una nuova colonna (opzione Append column) o che vadano a sostituire una colonna nella nostra tabella di dati (Replace column).

Creiamo ora un nuovo nodo Rule Engine per assegnare a ciascun numero la propria etichetta. L’impostazione è in questo caso molto simile a quella precedentemente vista nel medesimo nodo.
Scegliamo in questo caso di sostituire la colonna precedentemente creata con la Math Formula, con quella nuova contenente le nostre etichette Low, Medium e High.

Column Expression

Il nodo delle Column expression si differenzia invece dai primi due in particolare perchè permette invece di modificare più colonne alla volta sia con formule matematiche sia con funzioni di manipolazione di caratteri testo (String manipulation functions).
Nel nostro caso sarà necessaria una unica formula sempre sulla colonna Discount.
La formula da usare in questo caso è molto simile a quella del Rule Engine con una differente sintassi:
if(column(“Discount”)<=0.2){“Low”}
else{ if(column(“Discount”)<=0.4) {“Medium”}
else {“High”} }
La sintassi è:
if (cond) {then}
Else {then}
In questo caso la condizione del nostro if statement viene inserita tra le parentesi tonde e il risultato della condizione viene inserito tra le parentesi graffe.
Inserendo un ulteriore if statement all’interno delle parentesi graffe dell’ else {} stiamo sostanzialmente ponendo una ulteriore condizione. Nel nostro caso che se non si verifica la prima condizione che lo sconto sia inferiore al 20%, allora deve verificare anche che lo sconto non sia inferiore al 40%, altrimenti mette l’etichetta “High”.

Anche in questo caso possiamo scegliere se aggiungere una nuova colonna o sostituirla attraverso l’opzione nel pannello in alto della finestra di dialogo, scegliendo inoltre il datatype della nostra colonna di output, in questo caso String, stringa di testo.
La tabella che ne risulterà sarà la medesima che con i due nodi precedenti.

Spero che questo articolo vi sia stato utile e possa aiutarvi al meglio nella vostra Data Preparation su KNIME! Ci vediamo presto con un nuovo articolo!