练习 - 使用聚合函数汇总数据

已完成

我们已使用气象数据集来比较 2007 年美国各州中某些类型的风暴事件数量,并对结果进行了可视化。 在这里,你将探索其他聚合函数来描述数据。

使用 avg() 函数描绘风暴类型的特征

在最后一个单元中,你将风暴数量视为时间函数,并查看了这些风暴造成的损失。 让我们看一下有助于描述风暴本身特征的其他统计信息。

首先,你将使用 avg() 函数来计算风暴造成的平均损失(以美元为单位)。

以下查询使用 extend 运算符创建计算列以添加所有损坏值,在本例中为 DamageProperty 和 DamageCrops(以美元为单位)。 然后,查询会筛选导致损失大于零的事件。 接下来,查询汇总了每种风暴类型造成的平均损失。 最后,结果按新的平均损失列进行排序。

  1. 运行以下查询:

    运行查询

    StormEvents
    | extend damage = DamageProperty + DamageCrops
    | where damage > 0
    | summarize avg(damage) by EventType
    | sort by avg_damage
    

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

    Screenshot of avg aggregation function results.

  2. 运行此查询的更简洁方法是使用 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
    

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

    Screenshot of avg aggregation function results second version.

使用 min()max() 查找极值

现在让我们来看看损失极值。

对于绝对最大值或最小值,使用 min()max() 聚合函数。 在这些函数中,必须定义要计算最小值或最大值的列,以及要聚合数据的字段。 以下查询基于以前计算的 damage 列生成,为同一列添加 min()max() 值。

  1. 运行以下查询:

    运行查询

    StormEvents
    | extend damage = DamageProperty + DamageCrops
    | where damage > 0
    | summarize MaxDamage=max(damage), MinDamage=min(damage), AverageDamage=avg(damage) by EventType
    | sort by MaxDamage
    

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

    Screenshot of max aggregation function results.

  2. 查看结果。 请注意,为了使列名更好记,已将查询中的汇总列重命名为 MinDamage 和 MaxDamage。

  3. 尝试更改查询以使用 minif()maxif() 函数。 这些函数类似于 min()max() 函数,但仅为谓词返回 true 的记录返回提供的表达式的最小值或最大值。 同样,可以使用 sumif() 函数为谓词返回 true 的记录返回提供的表达式的总和。

使用 percentiles() 函数

到目前为止,你已计算每个事件造成的损失的最小值、最大值和平均值。 若要完成这些值的分布图,计算百分位数可能很有用。 使用 percentiles() 函数,可以定义要计算的输入数据和百分位数。 在以下示例中,你将计算每个事件类型的损失的第 5、20、50、80 和 95 个百分位值。

表示频率分布的百分位数不应与作为整体的一部分的百分比混淆。

  1. 运行以下查询:

    运行查询

    StormEvents
    | extend damage = DamageProperty + DamageCrops
    | where damage > 0
    | summarize percentiles(damage, 5, 20, 50, 80, 95) by EventType
    | sort by EventType asc
    

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

    Screenshot of percentiles aggregation function results.

  2. 查看结果。 能否确定淹没所造成损失的中值? 中值等于第 50 个百分位数。