Oefening: gegevens samenvatten met statistische functies
We hebben een meteorologische gegevensset gebruikt om het aantal stormgebeurtenissen in verschillende Amerikaanse staten voor het jaar 2007 te vergelijken en de resultaten te visualiseren. Hier verkent u andere aggregatiefuncties om de gegevens te beschrijven.
Stormtypen karakteriseren met behulp van de avg()
functie
In de laatste eenheid keek u naar het aantal stormen als een functie van tijd en de schade die deze stormen veroorzaakten. Laten we eens kijken naar andere statistieken die kunnen helpen om de stormen zelf te karakteriseren.
Eerst gebruikt u de avg()
functie om de gemiddelde schade te berekenen die wordt veroorzaakt door stormen in Amerikaanse dollars.
Met de volgende query wordt een berekende kolom gemaakt met behulp van de extend
operator om alle waarden van schade toe te voegen, in dit geval DamageProperty en DamageCrops, in Amerikaanse dollars. De query filtert vervolgens op gebeurtenissen die schade hebben veroorzaakt die groter zijn dan nul. Vervolgens geeft de query een overzicht van de gemiddelde schade die elk type storm heeft gemaakt. Ten slotte worden de resultaten gesorteerd op de nieuwe kolom met gemiddelde schade.
Voer de volgende query uit.
StormEvents | extend damage = DamageProperty + DamageCrops | where damage > 0 | summarize avg(damage) by EventType | sort by avg_damage
U krijgt resultaten die eruitzien als de volgende afbeelding:
Een beknoptere manier om deze query uit te voeren, is door de
avgif()
functie te gebruiken. Deze functie is vergelijkbaar met deavg()
functie, maar alleen gemiddelden resultaten waarvoor het predicaat waar is. De invoer voor deze functie is de kolom die moet worden geëvalueerd en de voorwaarde waarop de waarde moet worden geëvalueerd. De querywhere damage > 0 | summarize avg(damage) by EventType
is dus gelijk aansummarize avgif(damage, damage > 0) by EventType
.Terwijl we eraan werken, gaan we de resultaten opschonen met behulp van de
round()
functie. Met deze functie worden de resultaten afgerond op het opgegeven aantal cijfers na het decimaalteken. In dit voorbeeld gebruikt u de standaard afrondende waarde van 0.Voer de volgende query uit.
StormEvents | extend damage = DamageProperty + DamageCrops | summarize round(avgif(damage, damage > 0)) by EventType | sort by avgif_damage
U krijgt resultaten die eruitzien als de volgende afbeelding:
Extremen vinden met behulp van min()
en max()
Laten we nu eens kijken naar de schade extremen.
Gebruik de min()
functies en max()
aggregatiefuncties voor absolute maximum- of minimumwaarden. Binnen deze functies moet u de kolom definiëren waarop de minimum- of maximumwaarde moet worden berekend en het veld waarop de gegevens moeten worden geaggregeerd. De volgende query bouwt voort op de eerder berekende damage
kolom en voegt min()
waarden toe voor max()
dezelfde kolom.
Voer de volgende query uit.
StormEvents | extend damage = DamageProperty + DamageCrops | where damage > 0 | summarize MaxDamage=max(damage), MinDamage=min(damage), AverageDamage=avg(damage) by EventType | sort by MaxDamage
U krijgt resultaten die eruitzien als de volgende afbeelding:
Bekijk de resultaten. U ziet dat als u de kolomnamen vriendelijker wilt maken, u de naam van de samengevatte kolommen in de query hebt gewijzigd in MinDamage en MaxDamage.
Wijzig de query om de
minif()
enmaxif()
functies te gebruiken. Deze functies zijn vergelijkbaar met demin()
functies,max()
maar retourneren alleen het minimum of maximum van de opgegeven expressie voor records waarbij het predicaat waar retourneert. Op dezelfde manier kunt u desumif()
functie gebruiken om de som van de opgegeven expressie te retourneren voor records waarbij het predicaat waar retourneert.
De functie percentiles()
gebruiken
Tot nu toe hebt u de minimum-, maximum- en gemiddelde waarden berekend van schade die elke gebeurtenis heeft veroorzaakt. Om het beeld van de verdeling van deze waarden te voltooien, kan het handig zijn om de percentielen te berekenen. Met behulp van de percentiles()
functie kunt u de invoergegevens en de percentielen definiëren die moeten worden berekend. In het volgende voorbeeld berekent u de 5e, 20e, 50e, 80e en 95e percentielwaarden van schade voor elk gebeurtenistype.
Percentielen, die een frequentieverdeling vertegenwoordigen, mogen niet worden verward met percentages, die een aandeel van een geheel zijn.
Voer de volgende query uit.
StormEvents | extend damage = DamageProperty + DamageCrops | where damage > 0 | summarize percentiles(damage, 5, 20, 50, 80, 95) by EventType | sort by EventType asc
U krijgt resultaten die eruitzien als de volgende afbeelding:
Bekijk de resultaten. Kunt u de mediaanschade identificeren die wordt veroorzaakt door overstromingen? De mediaanwaarde is gelijk aan het 50e percentiel.