練習 - 使用彙總函式摘要資料
我們使用了一個氣象資料集來比較 2007 年美國不同州的特定類型風災事件數,並將結果視覺化。 在這裡,您將探索其他彙總函式以描述此資料。
使用 avg()
函式描述風災類型的特性
在上一個單元中,您探討了以時間函式表示的風災數,以及這些風災所造成的損失。 讓我們看看其他可協助描述風災本身特性的統計資料。
首先,您會使用 avg()
函式來計算風災所造成的平均損失 (以美元為單位)。
下列查詢會使用 extend
運算子來建立計算結果欄,以新增所有損失值 (以美元為單位),在此案例中為 DamageProperty 和 DamageCrops。 然後,該查詢會篩選損失值大於零的事件。 接下來,該查詢會摘要每種風災類型所產生的平均損失。 最後,結果會依新的平均損失資料行排序。
執行下列查詢:
StormEvents | extend damage = DamageProperty + DamageCrops | where damage > 0 | summarize avg(damage) by EventType | sort by avg_damage
您應該會取得如下圖所示的結果:
執行此查詢更簡明的方式是使用
avgif()
函式。 此函式類似於avg()
函式,但只會針對述詞為 true 的結果求取平均值。 此函式的輸入是要評估的資料行,以及評估值所依據的條件。 因此,查詢where damage > 0 | summarize avg(damage) by EventType
相當於summarize avgif(damage, damage > 0) by EventType
。當我們執行此動作時,一起來使用
round()
函式來清除結果。 此函式會將結果四捨五入到小數點後的指定位數。 在此範例中,您將使用預設進位值 0。執行下列查詢:
StormEvents | extend damage = DamageProperty + DamageCrops | summarize round(avgif(damage, damage > 0)) by EventType | sort by avgif_damage
您應該會取得如下圖所示的結果:
使用 min()
和 max()
求極端值
現在讓我們看看損失極端值。
針對絕對最大值或最小值,請使用 min()
和 max()
彙總函式。 在這些函式中,您必須定義要計算最小值或最大值的資料行,以及要彙總資料的欄位。 下列查詢是以先前計算的 damage
資料行為基礎,並為相同的資料行新增 min()
和 max()
值。
執行下列查詢:
StormEvents | extend damage = DamageProperty + DamageCrops | where damage > 0 | summarize MaxDamage=max(damage), MinDamage=min(damage), AverageDamage=avg(damage) by EventType | sort by MaxDamage
您應該會取得如下圖所示的結果:
查看結果。 請注意,為了更容易記住資料行名稱,您已將查詢內的摘要資料行重新命名為 MinDamage 和 MaxDamage。
嘗試變更查詢以使用
minif()
和maxif()
函式。 這些函式類似於min()
和max()
函式,但只會針對述詞傳回 true 的記錄,傳回所提供運算式的最小值或最大值。 同樣地,您可以使用sumif()
函式,針對述詞傳回 true 的記錄,傳回所提供運算式的總和。
使用 percentiles()
函式
到目前為止,您已計算每個事件所造成損失的最小值、最大值和平均值。 若要完成這些值的分佈圖,計算百分位數可能很有用。 使用 percentiles()
函式,您可以定義要計算的輸入資料和百分位數。 在下列範例中,您將計算每個事件類型損失的第 5 個、第 20 個、第 50 個、第 80 個和第 95 個百分位數值。
「百分位數」代表頻率分佈,不應與整體比例的「百分比」混淆。
執行下列查詢:
StormEvents | extend damage = DamageProperty + DamageCrops | where damage > 0 | summarize percentiles(damage, 5, 20, 50, 80, 95) by EventType | sort by EventType asc
您應該會取得如下圖所示的結果:
查看結果。 您是否可以找出水災所造成損失的中間值? 中間值等於第 50 個百分位數。