Ejercicio: resumen de datos mediante funciones de agregado

Completado

Hemos usado un conjunto de datos meteorológico para comparar el número de determinados tipos de eventos de tormenta en diferentes estados de EE. UU. durante el año 2007 y hemos visualizado los resultados. Aquí, explorará otras funciones de agregación para describir los datos.

Caracterización de los tipos de tormenta mediante la función avg()

En la última unidad, examinó el número de tormentas como función de tiempo y el daño causado por estas tormentas. Echemos un vistazo a otras estadísticas que pueden ayudar a caracterizar las tormentas.

En primer lugar, usará la función avg() para calcular el daño promedio causado por tormentas en dólares estadounidenses.

La consulta siguiente crea una columna calculada con el operador extend para agregar todos los valores de daño, en este caso DamageProperty y DamageCrops en dólares estadounidenses. A continuación, la consulta filtra los eventos que causaron daños mayores que cero. A continuación, la consulta resume el daño promedio creado por cada tipo de tormenta. Por último, los resultados se ordenan por la nueva columna de daño promedio.

  1. Ejecute la siguiente consulta:

    Ejecución de la consulta

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

    Debería obtener resultados similares a la imagen siguiente:

    Screenshot of avg aggregation function results.

  2. Una manera más concisa de ejecutar esta consulta es usar la función avgif(). Esta función es similar a la función avg(), pero solo calcula los resultados promedio para los que el predicado es true. La entrada de esta función es la columna que se va a evaluar y la condición por la que se va a evaluar el valor. Por lo tanto, la consulta where damage > 0 | summarize avg(damage) by EventType es equivalente a summarize avgif(damage, damage > 0) by EventType.

    Mientras tanto, vamos a limpiar los resultados con la función round(). Esta función redondea los resultados al número especificado de dígitos después de la coma decimal. En este ejemplo, usará el valor de redondeo predeterminado de 0.

    Ejecute la siguiente consulta:

    Ejecución de la consulta

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

    Debería obtener resultados similares a la imagen siguiente:

    Screenshot of avg aggregation function results second version.

Búsqueda de extremos mediante min() y max()

Ahora echemos un vistazo a los extremos de daños.

Para valores de máximo o mínimo absolutos, use las funciones de agregación min() y max(). Dentro de estas funciones, debe definir la columna en la que se va a calcular el valor mínimo o máximo, y el campo en el que se van a agregar los datos. La consulta siguiente se basa en la columna damage calculada anteriormente, agregando los valores min() y max() para la misma columna.

  1. Ejecute la siguiente consulta:

    Ejecución de la consulta

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

    Debería obtener resultados similares a la imagen siguiente:

    Screenshot of max aggregation function results.

  2. Mire los resultados. Tenga en cuenta que para que los nombres de columna sean más descriptivos, ha cambiado el nombre de las columnas resumidas dentro de la consulta a MinDamage y MaxDamage.

  3. Pruebe a cambiar la consulta para usar las funciones minif() y maxif(). Estas funciones son similares a las funciones min() y max(), pero solo devuelven el mínimo o máximo de la expresión proporcionada para los registros en los que el predicado devuelve true. De forma similar, puede usar la función sumif() para devolver la suma de la expresión proporcionada para los registros en los que el predicado devuelve true.

Usar la función percentiles()

Hasta ahora, ha calculado los valores mínimo, máximo y promedio de los daños causados por cada evento. Para completar la imagen de la distribución de estos valores, puede ser útil calcular los percentiles. Con la función percentiles(), puede definir los datos de entrada y los percentiles que se van a calcular. En el ejemplo siguiente, calculará los valores de daños de los percentiles 5, 20, 50, 80 y 95 para cada tipo de evento.

Los percentiles, que representan una distribución de frecuencia, no deben confundirse con los porcentajes, que son una proporción de un todo.

  1. Ejecute la siguiente consulta:

    Ejecución de la consulta

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

    Debería obtener resultados similares a la imagen siguiente:

    Screenshot of percentiles aggregation function results.

  2. Mire los resultados. ¿Puede identificar los daños medios causados por inundaciones? El valor medio es igual al percentil 50.