Övning – Sammanfatta data med hjälp av aggregerade funktioner
Vi har använt en meteorologisk datamängd för att jämföra antalet vissa typer av stormhändelser i olika amerikanska delstater för år 2007 och visualiserat resultaten. Här utforskar du andra aggregeringsfunktioner för att beskriva data.
Karakterisera stormtyper med hjälp av avg()
funktionen
I den senaste lektionen tittade du på antalet stormar som en funktion av tiden och de skador som dessa stormar orsakade. Låt oss titta på annan statistik som kan hjälpa till att karakterisera stormarna själva.
Först använder avg()
du funktionen för att beräkna den genomsnittliga skadan som orsakas av stormar i amerikanska dollar.
Följande fråga skapar en beräknad kolumn med operatorn extend
för att lägga till alla värden för skador – i det här fallet DamageProperty och DamageCrops – i us-dollar. Frågan filtrerar sedan efter händelser som orsakat skador som är större än noll. Därefter sammanfattar frågan den genomsnittliga skadan för varje typ av storm som skapas. Slutligen sorteras resultaten efter den nya genomsnittliga skadekolumnen.
Kör följande fråga:
StormEvents | extend damage = DamageProperty + DamageCrops | where damage > 0 | summarize avg(damage) by EventType | sort by avg_damage
Du bör få resultat som ser ut som följande bild:
Ett mer kortfattat sätt att köra den här frågan är att använda
avgif()
funktionen. Den här funktionen liknaravg()
funktionen, men bara medelvärden för resultat som predikatet är sant för. Indata för den här funktionen är den kolumn som ska utvärderas och villkoret för att utvärdera värdet. Fråganwhere damage > 0 | summarize avg(damage) by EventType
motsvararsummarize avgif(damage, damage > 0) by EventType
alltså .När vi håller på rensar vi resultatet med hjälp
round()
av funktionen . Den här funktionen avrundar resultatet till det angivna antalet siffror efter decimaltecknet. I det här exemplet använder du standardvärdet för avrundning på 0.Kör följande fråga:
StormEvents | extend damage = DamageProperty + DamageCrops | summarize round(avgif(damage, damage > 0)) by EventType | sort by avgif_damage
Du bör få resultat som ser ut som följande bild:
Hitta extremiteter med hjälp av min()
och max()
Låt oss nu titta på de extrema skadorna.
Använd aggregeringsfunktionerna min()
och max()
för absoluta max- eller minimivärden. I dessa funktioner måste du definiera den kolumn som du vill beräkna det lägsta eller högsta värdet på och det fält som data ska aggregeras på. Följande fråga bygger på den tidigare beräknade damage
kolumnen och lägger till min()
och max()
värden för samma kolumn.
Kör följande fråga:
StormEvents | extend damage = DamageProperty + DamageCrops | where damage > 0 | summarize MaxDamage=max(damage), MinDamage=min(damage), AverageDamage=avg(damage) by EventType | sort by MaxDamage
Du bör få resultat som ser ut som följande bild:
Ta en titt på resultaten. Observera att för att göra kolumnnamnen vänligare har du bytt namn på de sammanfattade kolumnerna i frågan till MinDamage och MaxDamage.
Prova att ändra frågan så att den
minif()
använder funktionerna ochmaxif()
. Dessa funktioner liknarmin()
funktionerna ochmax()
, men returnerar bara minimi- eller maxvärdet för det angivna uttrycket för poster där predikatet returnerar true. På samma sätt kan du användasumif()
funktionen för att returnera summan av det angivna uttrycket för poster där predikatet returnerar true.
Använda percentiles()
-funktionen
Hittills har du beräknat minsta, högsta och genomsnittliga värden för skador som varje händelse har orsakat. För att slutföra bilden av fördelningen av dessa värden kan det vara användbart att beräkna percentilerna. Med hjälp av percentiles()
funktionen kan du definiera indata och percentilerna som ska beräknas. I följande exempel beräknar du skadornas 5:e, 20:e, 50:e, 80:e och 95:e percentilen för varje händelsetyp.
Percentiler, som representerar en frekvensfördelning, bör inte förväxlas med procentandelar, som är en andel av en helhet.
Kör följande fråga:
StormEvents | extend damage = DamageProperty + DamageCrops | where damage > 0 | summarize percentiles(damage, 5, 20, 50, 80, 95) by EventType | sort by EventType asc
Du bör få resultat som ser ut som följande bild:
Ta en titt på resultaten. Kan du identifiera medianskadorna som orsakas av översvämningar? Medianvärdet är lika med den 50:e percentilen.