Exercício – Resumir dados usando funções de agregação

Concluído

Usamos um conjunto de dados meteorológicos para comparar o número de determinados tipos de eventos de tempestade em diferentes estados dos EUA no ano de 2007 e visualizamos os resultados. Aqui, você vai explorar outras funções de agregação para descrever os dados.

Caracterizar tipos de tempestade usando a função avg()

Na última unidade, você analisou o número de tempestades em função do tempo, bem como os danos causados por essas tempestades. Vamos examinar outras estatísticas que podem ajudar a caracterizar as tempestades.

Primeiro, você usará a função avg() para calcular os danos médios causados por tempestades em dólares americanos.

A consulta a seguir cria uma coluna calculada usando o operador extend para adicionar todos os valores de danos, nesse caso DamageProperty e DamageCrops, em dólares americanos. Em seguida, a consulta filtra os eventos que causaram danos maiores que zero. Depois, ela resume o dano médio causado por cada tipo de tempestade. Por fim, os resultados são classificados pela nova coluna de dano médio.

  1. Execute a seguinte consulta:

    Executar a consulta

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

    Você deve obter resultados parecidos com a seguinte imagem:

    Screenshot of avg aggregation function results.

  2. Uma maneira mais concisa de executar essa consulta é usar a função avgif(). Ela é semelhante à função avg(), mas só gera resultados médios para os quais o predicado é verdadeiro. As entradas dessa função são a coluna a ser avaliada e a condição segundo a qual avaliar o valor. Portanto, a consulta where damage > 0 | summarize avg(damage) by EventType é equivalente a summarize avgif(damage, damage > 0) by EventType.

    Vamos aproveitar para limpar os resultados usando a função round(). Essa função arredonda os resultados para o número especificado de dígitos após o ponto decimal. Neste exemplo, você usará o valor de arredondamento padrão de 0.

    Execute a seguinte consulta:

    Executar a consulta

    StormEvents
    | extend damage = DamageProperty + DamageCrops
    | summarize round(avgif(damage, damage > 0)) by EventType
    | sort by avgif_damage
    

    Você deve obter resultados parecidos com a seguinte imagem:

    Screenshot of avg aggregation function results second version.

Localizar extremos usando min() e max()

Agora, vamos examinar os extremos dos danos.

Para valores máximos ou mínimos absolutos, use as funções de agregação min() e max(). Dentro dessas funções, você precisa definir a coluna na qual calcular o valor mínimo ou máximo e o campo no qual agregar os dados. A consulta a seguir se baseia na coluna damage calculada anteriormente, adicionando os valores de min() e max() para a mesma coluna.

  1. Execute a seguinte consulta:

    Executar a consulta

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

    Você deve obter resultados parecidos com a seguinte imagem:

    Screenshot of max aggregation function results.

  2. Confira os resultados. Observe que, para tornar os nomes de coluna mais amigáveis, você renomeou as colunas resumidas dentro da consulta como MinDamage e MaxDamage.

  3. Tente alterar a consulta para usar as funções minif() e maxif(). Elas são semelhantes às funções min() e max(), mas retornam apenas o mínimo ou máximo da expressão fornecida para registros em que o predicado retorna true. De modo semelhante, você pode usar a função sumif() para retornar a soma da expressão fornecida para registros em que o predicado retorna true.

Usar a função percentiles()

Até agora, você calculou os valores mínimo, máximo e médio dos danos causados por cada evento. Para completar a imagem da distribuição desses valores, pode ser útil calcular os percentis. Usando a função percentiles(), você pode definir os dados de entrada e os percentis a serem calculados. No exemplo a seguir, você calculará os valores do 5º, 20º, 50º, 80º e 95º percentil de danos para cada tipo de evento.

Percentis, que representam uma distribuição de frequência, não devem ser confundidos com percentuais, que são uma proporção de um todo.

  1. Execute a seguinte consulta:

    Executar a consulta

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

    Você deve obter resultados parecidos com a seguinte imagem:

    Screenshot of percentiles aggregation function results.

  2. Confira os resultados. Você consegue identificar a mediana dos danos causados por enchentes? O valor mediano é igual ao 50º percentil.