练习 - 使用 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
运算符来回答以下问题:
- 每个州发生了多少起风暴事件?
- 每个州中有多少事件造成了损坏?
- 每个州发生了多少种不同类型的事件?
请注意,summarize 运算符中的所有元素都用逗号分隔,并按同一列分组,在本例中为“州”。 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
应获得如下图所示的结果:
查看生成的列表。 任何风暴类型是否让你感到惊讶?