Esercizio - Riepilogare i dati usando le funzioni di aggregazione
È stato usato un set di dati meteorologici per confrontare il numero di determinati tipi di eventi di tempesta in stati degli Stati Uniti diversi per l'anno 2007 e visualizzare i risultati. In questo caso si esamineranno altre funzioni di aggregazione per descrivere i dati.
Caratterizzare i tipi di tempesta usando la funzione avg()
Nell'ultima unità è stato esaminato il numero di tempeste come funzione del tempo e i danni causati da queste tempeste. Esaminiamo altre statistiche che possono aiutare a caratterizzare le tempeste stesse.
In primo luogo, si userà la funzione avg()
per calcolare i danni medi causati dalle tempeste in dollari USA.
La query seguente crea una colonna calcolata usando l'operatore extend
per aggiungere tutti i valori di danno, in questo caso DamageProperty e DamageCrops in dollari USA. La query filtra quindi gli eventi che hanno causato danni maggiori di zero. La query riepiloga quindi i danni medi creati da ogni tipo di tempesta. Infine, i risultati vengono ordinati in base alla nuova colonna di danno medio.
Eseguire la query riportata di seguito:
StormEvents | extend damage = DamageProperty + DamageCrops | where damage > 0 | summarize avg(damage) by EventType | sort by avg_damage
Dovrebbero essere visualizzati risultati simili all'immagine seguente:
Un modo più conciso per eseguire questa query consiste nell'usare la funzione
avgif()
. Questa funzione è simile alla funzioneavg()
, ma esegue la media dei risultati per i quali il predicato è true. L'input per questa funzione è la colonna da valutare e la condizione in cui valutare il valore. La querywhere damage > 0 | summarize avg(damage) by EventType
equivale quindi asummarize avgif(damage, damage > 0) by EventType
.Mentre è in corso, è possibile pulire i risultati usando la funzione
round()
. Questa funzione arrotonda i risultati al numero specificato di cifre dopo il separatore decimale. In questo esempio si userà il valore di arrotondamento predefinito pari a 0.Eseguire la query riportata di seguito:
StormEvents | extend damage = DamageProperty + DamageCrops | summarize round(avgif(damage, damage > 0)) by EventType | sort by avgif_damage
Dovrebbero essere visualizzati risultati simili all'immagine seguente:
Trovare gli estremi usando min()
e max()
Esaminiamo ora i danni estremi.
Per i valori massimi o minimi assoluti, usare le funzioni di aggregazione min()
e max()
. All'interno di queste funzioni è necessario definire la colonna in cui calcolare il valore minimo o massimo e il campo in cui aggregare i dati. La query seguente si basa sulla colonna damage
calcolata in precedenza, aggiungendo valori min()
e max()
per la stessa colonna.
Eseguire la query riportata di seguito:
StormEvents | extend damage = DamageProperty + DamageCrops | where damage > 0 | summarize MaxDamage=max(damage), MinDamage=min(damage), AverageDamage=avg(damage) by EventType | sort by MaxDamage
Dovrebbero essere visualizzati risultati simili all'immagine seguente:
Si osservino i risultati. Si noterà che, per rendere più descrittivi i nomi delle colonne, le colonne riepilogate all'interno della query sono state rinominate MinDamage e MaxDamage.
Provare a modificare la query per usare le funzioni
minif()
emaxif()
. Queste funzioni sono simili alle funzionimin()
emax()
, ma restituiscono solo il valore minimo o massimo dell'espressione specificata per i record in cui il predicato restituisce true. Analogamente, è possibile usare la funzionesumif()
per restituire la somma dell'espressione fornita per i record in cui il predicato restituisce true.
Usare la funzione percentiles()
Finora sono stati calcolati i valori minimo, massimo e medio dei danni causati da ogni evento. Per completare l'immagine della distribuzione di questi valori, può essere utile calcolare i percentili. Usando la funzione percentiles()
è possibile definire i dati di input e i percentili da calcolare. Nell'esempio seguente verranno calcolati i valori del 5°, del 20°, del 50°, dell'80° e del 95° percentile per ogni tipo di evento.
I percentili, che rappresentano una distribuzione di frequenza, non devono essere confusi con le percentuali, che sono una proporzione di un intero.
Eseguire la query riportata di seguito:
StormEvents | extend damage = DamageProperty + DamageCrops | where damage > 0 | summarize percentiles(damage, 5, 20, 50, 80, 95) by EventType | sort by EventType asc
Dovrebbero essere visualizzati risultati simili all'immagine seguente:
Si osservino i risultati. È possibile identificare i danni mediani causati da inondazioni? Il valore mediano è uguale al 50° percentile.