練習:使用 count 函式計算事件
您可以使用 Kusto 查詢來探索資料集並取得見解。 回想一下,我們有一個氣象資料集,並想要比較事件,以從此資料取得深入解析。 在此,您將瞭解特定區域中發生多少特定類型的事件。
使用 count
函式
我們在 2007 年美國所使用的每個暴風雨事件都有一個樣本資料庫,總計有 6 萬筆記錄。
若要將這些事件分組為資訊區塊,您將使用 summarize
運算子。 summarize
會用於彙總數個資料列值群組,以形成單一摘要值的所有函式。 例如,您可以使用下列查詢來計算結果數目,以摘要整份資料表:
您也可以藉由指定要分組彙總的方式,將資料摘要成類似型別的事件群組。 例如,若要依狀態計算事件,您可以透過 state
將查詢寫入至 summarize
count
。 事實上,上一句與實際查詢的非常類似。 您將使用稱為 count()
的彙總函式,其會依群組計算資料列的數目。 此函式會產生新的資料行,提供依狀態分組的事件計數,我們已在查詢內將此資料行從預設名稱 count_ 重新命名為 EventCount。 重新命名新的資料行是建議做法,讓查詢及其結果更容易閱讀。
將查詢複製並貼上查詢編輯器中。
StormEvents | summarize EventCount = count() by State | sort by EventCount
選取查詢視窗上方的 [執行] 按鈕或按 Shift+Enter 鍵來執行查詢。
您應該會取得如下圖所示的結果:
使用 dcount()
和 countif()
函式
先前的查詢會傳回每個狀態的事件數目。 不過,有更複雜的方法來計數事件。
- 例如,您只能計數特定類型的事件。
countif()
函式會計數述詞為 true 的記錄。 使用countif(DamageCrops > 0)
的查詢將計算裁剪損毀大於零的記錄數目。 - 您也可以使用
dcount()
函式來計數不同類型的事件。
我們已建構使用 summarize
運算子並搭配這些 count 函式的查詢來回答下列問題:
- 各州發生多少次暴風雨事件?
- 每州中有多少個事件造成損害?
- 每州中發生了多少不同類型的事件?
請注意,summarize 運算子中的所有元素皆以逗號分隔,並依相同的資料行分組,在此案例中為 State。 運算子中未命名的資料行 summarize
會遭卸除。 如果想要包含其他資料行,請以摘要資料的資料行命名它們。
執行下列查詢:
StormEvents | summarize count(), EventsWithDamageToCrops = countif(DamageCrops > 0), Count = dcount(EventType) by State | sort by Count
您應該會取得如下圖所示的結果:
請注意結果中的資料行名稱。 查詢的哪個部分會對應至每個資料行? 您可以看到
dcount()
函式已建立新的資料行,並將其命名為 Count。 您也會注意到,您已將此名稱當做查詢中sort
運算子的資料行使用。 德州有多少不同類型的暴風雨?
使用 distinct
運算子
上一個查詢在這項資料涵蓋期間,傳回德州中有 27 種不同類型暴風雨的相異計數。 進一步向下切入並查看所有類型的暴風雨名稱,別具趣味性。 若要查看德州中每個不同種類型的事件的清單,請使用 distinct()
運算子,其將列出特定資料行的相異值。
執行下列查詢:
StormEvents | where State == "TEXAS" | distinct EventType | sort by EventType asc
您應該會取得如下圖所示的結果:
查看結果產生的清單。 有無任何暴風雨類型令您感到意外?