Exercício – Resumir dados usando funções de agregação
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.
Execute a seguinte 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:
Uma maneira mais concisa de executar essa consulta é usar a função
avgif()
. Ela é semelhante à funçãoavg()
, 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 consultawhere damage > 0 | summarize avg(damage) by EventType
é equivalente asummarize 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:
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:
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.
Execute a seguinte 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:
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.
Tente alterar a consulta para usar as funções
minif()
emaxif()
. Elas são semelhantes às funçõesmin()
emax()
, 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çãosumif()
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.
Execute a seguinte 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:
Confira os resultados. Você consegue identificar a mediana dos danos causados por enchentes? O valor mediano é igual ao 50º percentil.