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 certos tipos de eventos de tempestade em diferentes estados dos EUA para o 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ê viu o número de tempestades em função do tempo e os danos que essas tempestades causaram. 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 dano; neste caso, DamageProperty e DamageCrops,em dólares americanos. Em seguida, a consulta filtra os eventos que causaram danos maiores que zero. Em seguida, a consulta resume o dano médio que cada tipo de tempestade criou. 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:

    Captura de tela dos resultados da função de agregação média.

  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:

    Captura de tela dos resultados da função de agregação avg, segunda versão.

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:

    Captura de tela dos resultados da função de agregação máxima.

  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ínimos, máximos e médios de dano que cada evento causou. 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:

    Captura de tela dos resultados da função de agregação de percentis.

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