Exercice - Totaliser des données à l’aide de fonctions d’agrégation
Nous avons utilisé un jeu de données météorologiques pour comparer le nombre de certains types d’événements de tempête dans différents états américains pour l’année 2007 et visualiser les résultats. Ici, vous allez explorer d’autres fonctions d’agrégation pour décrire les données.
Caractérisez les types de tempêtes à l’aide de la fonction avg()
Dans la dernière unité, vous avez examiné le nombre de tempêtes en fonction du temps et des dommages causés par ces tempêtes. Examinons d’autres statistiques qui peuvent aider à caractériser eux-mêmes les tempêtes.
Tout d’abord, vous allez utiliser la fonction avg()
pour calculer les dommages moyens causés par les tempêtes en dollars américains.
La requête suivante crée une colonne calculée à l’aide de l’opérateur extend
pour ajouter toutes les valeurs de dommages : dans ce cas DamageProperty et DamageCrops, en dollars américains. La requête filtre ensuite les événements qui ont causé des dommages supérieurs à zéro. Ensuite, la requête récapitule les dommages moyens créés par chaque type de tempête. Enfin, les résultats sont triés par la nouvelle colonne de dommages moyen.
Exécutez la requête suivante :
StormEvents | extend damage = DamageProperty + DamageCrops | where damage > 0 | summarize avg(damage) by EventType | sort by avg_damage
Vous devez obtenir des résultats qui ressemblent à l’image suivante :
Un moyen plus concis d’exécuter cette requête consiste à utiliser la fonction
avgif()
. Cette fonction est similaire à la fonctionavg()
, mais uniquement les résultats moyens pour lesquels le prédicat est vrai. L’entrée de cette fonction est la colonne à évaluer et la condition sur laquelle évaluer la valeur. Par conséquent, la requêtewhere damage > 0 | summarize avg(damage) by EventType
équivaut àsummarize avgif(damage, damage > 0) by EventType
.Pendant que nous y sommes, nous allons nettoyer les résultats à l’aide de la fonction
round()
. Cette fonction arrondit les résultats au nombre spécifié de chiffres après le point décimal. Dans cet exemple, vous allez utiliser la valeur d’arrondi par défaut de 0.Exécutez la requête suivante :
StormEvents | extend damage = DamageProperty + DamageCrops | summarize round(avgif(damage, damage > 0)) by EventType | sort by avgif_damage
Vous devez obtenir des résultats qui ressemblent à l’image suivante :
Rechercher des extrêmes à l’aide de min()
et max()
Examinons maintenant les dommages extrêmes.
Pour les valeurs maximales absolues ou minimales, utilisez les fonctions d’agrégation min()
et max()
. Dans ces fonctions, vous devez définir la colonne sur laquelle calculer la valeur minimale ou maximale et le champ sur lequel agréger les données. La requête suivante s’appuie sur la colonne calculée damage
précédemment, l’ajout des valeurs min()
et max()
pour la même colonne.
Exécutez la requête suivante :
StormEvents | extend damage = DamageProperty + DamageCrops | where damage > 0 | summarize MaxDamage=max(damage), MinDamage=min(damage), AverageDamage=avg(damage) by EventType | sort by MaxDamage
Vous devez obtenir des résultats qui ressemblent à l’image suivante :
Regardez les résultats. Notez que pour rendre les noms de colonnes plus convivial, vous avez renommé les colonnes résumées dans la requête en MinDamage et MaxDamage.
Essayez de modifier la requête pour utiliser les fonctions
minif()
etmaxif()
. Ces fonctions sont similaires aux fonctionsmin()
etmax()
mais retournent uniquement la valeur minimale ou maximale de l’expression fournie pour les enregistrements où le prédicat retourne true. De même, vous pouvez utiliser la fonctionsumif()
pour renvoyer la somme de l’expression fournie pour les enregistrements où le prédicat retourne true.
Utiliser la fonction percentiles()
Jusqu’à présent, vous avez calculé les valeurs minimales, maximales et moyennes des dommages causés par chaque événement. Pour terminer l’image de la distribution de ces valeurs, il peut être utile de calculer les centiles. À l’aide de la fonction percentiles()
, vous pouvez définir les données d’entrée et les centiles à calculer. Dans l’exemple suivant, vous allez calculer les valeurs de 5e, 20e, 50e, 80e et 95e centile pour chaque type d’événement.
Les centiles, qui représentent une distribution de fréquence, ne doivent pas être confondus avec les pourcentages, qui sont une proportion d’un ensemble.
Exécutez la requête suivante :
StormEvents | extend damage = DamageProperty + DamageCrops | where damage > 0 | summarize percentiles(damage, 5, 20, 50, 80, 95) by EventType | sort by EventType asc
Vous devez obtenir des résultats qui ressemblent à l’image suivante :
Regardez les résultats. Pouvez-vous identifier les dommages médians causés par les inondations ? La valeur médiane est égale au 50e centile.