练习 - 使用 count 函数计算事件数量

已完成

可以使用 Kusto 查询来浏览数据集并获取见解。 回想一下,我们有一个气象数据集,并且想要比较要从此数据中获取见解的事件。 在这里,你将了解特定区域中发生的特定类型的事件数。

使用 count 函数

我们使用的示例数据库具有 2007 年在美国发生的每个风暴事件的条目,总共大约有 6 万条记录。

若要将这些事件分组为信息区块,你将使用 summarize 运算符。 summarize 用于聚合多行的值组以形成单个汇总值的所有函数。 例如,可以通过使用以下查询计算结果数量来汇总整个表:

运行查询

显示计数运算符常规查询和结果的屏幕截图。

还可以通过指定聚合的分组方式来将数据汇总为类似类型的事件组。 例如,若要按州计算事件数量,需要按 state 将查询写入 summarizecount。 事实上,上一个句子与实际查询非常相似。 你将使用称为 count() 的聚合函数,该函数按组计算行数。 此函数生成一个新列,该列提供按州分组的事件计数,我们已在查询中从默认名称 count_ 重命名为 EventCount。 重命名新列是建议的做法,可使查询及其结果更易于阅读。

  1. 将查询复制并粘贴到查询编辑器中。

    运行查询

    StormEvents
    | summarize EventCount = count() by State
    | sort by EventCount
    
  2. 通过选择查询窗口上方的“运行”按钮或按 Shift+Enter 来运行查询

    应获得如下图所示的结果:

    显示计数运算符用法和结果的屏幕截图。

使用 dcount()countif() 函数

上一个查询返回每个州的事件数。 但是,有更复杂的方法来计算事件数量。

  • 例如,只能计算某些类型的事件数量。 countif() 函数计算谓词为 true 的记录数量。 使用 countif(DamageCrops > 0) 的查询将计算作物损坏大于零的记录数。
  • 还可以使用 dcount() 函数计算不同类型的事件数。

我们构造了一个查询,该查询使用带有这些计数函数的 summarize 运算符来回答以下问题:

  • 每个州发生了多少起风暴事件?
  • 每个州中有多少事件造成了损坏?
  • 每个州发生了多少种不同类型的事件?

请注意,summarize 运算符中的所有元素都用逗号分隔,并按同一列分组,在本例中为“州”。 summarize 运算符中未命名的列将被删除。 如果要包含其他列,请在汇总数据的列后面命名它们。

  1. 运行以下查询:

    运行查询

    StormEvents
    | summarize count(),
        EventsWithDamageToCrops = countif(DamageCrops > 0),
        Count = dcount(EventType) by State
    | sort by Count
    

    应获得如下图所示的结果:

    按状态计数事件的 Kusto 查询的屏幕截图。

  2. 请注意结果中的列名。 查询的哪个部分对应于每个列? 你可以看到 dcount() 函数创建了一个新列,并为其指定了名称 Count。 你还会注意到,将此名称用作查询中 sort 运算符的列。 德克萨斯州发生了多少种不同类型的风暴?

使用 distinct 运算符

在这些数据覆盖的时间段内,上一个查询返回了德克萨斯州的 27 种不同类型的风暴的不同计数。 进一步向下钻取并查看所有这些类型的风暴的名称会很有趣。 若要查看德克萨斯州中每种不同类型的事件的列表,请使用 distinct() 运算符,该运算符列出了特定列的不同值。

  1. 运行以下查询:

    运行查询

    StormEvents
    | where State == "TEXAS"
    | distinct EventType
    | sort by EventType asc
    

    应获得如下图所示的结果:

    使用 distinct 运算符的 Kusto 查询的屏幕截图。

  2. 查看生成的列表。 任何风暴类型是否让你感到惊讶?