Esercizio - Riepilogare i dati usando le funzioni di aggregazione

Completato

È 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.

  1. Eseguire la query riportata di seguito:

    Eseguire la query

    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:

    Screenshot dei risultati della funzione di aggregazione per la media.

  2. Un modo più conciso per eseguire questa query consiste nell'usare la funzione avgif(). Questa funzione è simile alla funzione avg(), 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 query where damage > 0 | summarize avg(damage) by EventType equivale quindi a summarize 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:

    Eseguire la query

    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:

    Screenshot dei risultati della funzione di aggregazione per la media, seconda versione.

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.

  1. Eseguire la query riportata di seguito:

    Eseguire la query

    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:

    Screenshot dei risultati della funzione di aggregazione per il valore massimo.

  2. 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.

  3. Provare a modificare la query per usare le funzioni minif() e maxif(). Queste funzioni sono simili alle funzioni min() e max(), ma restituiscono solo il valore minimo o massimo dell'espressione specificata per i record in cui il predicato restituisce true. Analogamente, è possibile usare la funzione sumif() 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.

  1. Eseguire la query riportata di seguito:

    Eseguire la query

    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:

    Screenshot dei risultati della funzione di aggregazione per i percentili.

  2. Si osservino i risultati. È possibile identificare i danni mediani causati da inondazioni? Il valore mediano è uguale al 50° percentile.