Ćwiczenie — podsumowywanie danych przy użyciu funkcji agregujących
Użyliśmy zestawu danych meteorologicznych, aby porównać liczbę niektórych rodzajów zdarzeń burzowych w różnych stanach USA w roku 2007 i zwizualizować wyniki. W tym miejscu poznasz inne funkcje agregacji, aby opisać dane.
Scharakteryzowanie typów burzy przy użyciu avg()
funkcji
W ostatniej lekcji przyjrzeliśmy się liczbie burz jako funkcji czasu i szkód spowodowanych przez te burze. Przyjrzyjmy się innym statystykom, które mogą pomóc scharakteryzować same burze.
Najpierw użyjesz avg()
funkcji , aby obliczyć średnie szkody spowodowane przez burze w dolarach amerykańskich.
Poniższe zapytanie tworzy kolumnę obliczeniową przy użyciu operatora , extend
aby dodać wszystkie wartości szkód — w tym przypadku DamageProperty i DamageCrops — w dolarach amerykańskich. Następnie zapytanie filtruje pod kątem zdarzeń, które spowodowały uszkodzenie większe niż zero. Następnie zapytanie podsumowuje średnie uszkodzenia każdego typu burzy utworzonego. Na koniec wyniki są sortowane według nowej średniej kolumny uszkodzeń.
Uruchom poniższe zapytanie:
StormEvents | extend damage = DamageProperty + DamageCrops | where damage > 0 | summarize avg(damage) by EventType | sort by avg_damage
Powinny zostać wyświetlone wyniki, które wyglądają jak na poniższej ilustracji:
Bardziej zwięzłym sposobem uruchamiania
avgif()
tego zapytania jest użycie funkcji . Ta funkcja jest podobnaavg()
do funkcji, ale tylko średnie wyniki, dla których predykat ma wartość true. Dane wejściowe dla tej funkcji to kolumna do oceny i warunek, na którym ma być obliczona wartość. Dlatego zapytaniewhere damage > 0 | summarize avg(damage) by EventType
jest równoważne .summarize avgif(damage, damage > 0) by EventType
Gdy jesteśmy w nim, wyczyśćmy wyniki przy użyciu
round()
funkcji . Ta funkcja zaokrągla wyniki do określonej liczby cyfr po przecinku dziesiętny. W tym przykładzie użyjesz domyślnej wartości zaokrąglania 0.Uruchom poniższe zapytanie:
StormEvents | extend damage = DamageProperty + DamageCrops | summarize round(avgif(damage, damage > 0)) by EventType | sort by avgif_damage
Powinny zostać wyświetlone wyniki, które wyglądają jak na poniższej ilustracji:
Znajdowanie skrajności przy użyciu i min()
max()
Przyjrzyjmy się teraz skrajnym szkodom.
W przypadku bezwzględnych wartości maksymalnych lub minimalnych użyj min()
funkcji agregacji i max()
. W ramach tych funkcji należy zdefiniować kolumnę, na której ma być obliczana minimalna lub maksymalna wartość oraz pole, na którym mają być agregowane dane. Poniższe zapytanie opiera się na wcześniej obliczonej damage
kolumnie, dodając min()
wartości i max()
dla tej samej kolumny.
Uruchom poniższe zapytanie:
StormEvents | extend damage = DamageProperty + DamageCrops | where damage > 0 | summarize MaxDamage=max(damage), MinDamage=min(damage), AverageDamage=avg(damage) by EventType | sort by MaxDamage
Powinny zostać wyświetlone wyniki, które wyglądają jak na poniższej ilustracji:
Przyjrzyj się wynikom. Zwróć uwagę, że aby nazwy kolumn są bardziej przyjazne, zmieniono nazwy podsumowanych kolumn w zapytaniu na MinDamage i MaxDamage.
Spróbuj zmienić zapytanie, aby używać
minif()
funkcji imaxif()
. Te funkcje są podobne domin()
funkcji imax()
, ale zwracają tylko minimalną lub maksymalną wartość podanego wyrażenia dla rekordów, w których predykat zwraca wartość true. Podobnie można użyćsumif()
funkcji , aby zwrócić sumę podanego wyrażenia dla rekordów, w których predykat zwraca wartość true.
Korzystanie z funkcji percentiles()
Do tej pory obliczyliśmy wartości minimalne, maksymalne i średnie szkody spowodowane przez każde zdarzenie. Aby ukończyć obraz rozkładu tych wartości, warto obliczyć percentyle. percentiles()
Za pomocą funkcji można zdefiniować dane wejściowe i percentyle do obliczenia. W poniższym przykładzie obliczysz wartości 5, 20, 50, 80 i 95. percentyla uszkodzenia dla każdego typu zdarzenia.
Percentyle, które reprezentują rozkład częstotliwości, nie powinny być mylone z wartościami procentowymi, które są proporcją całości.
Uruchom poniższe zapytanie:
StormEvents | extend damage = DamageProperty + DamageCrops | where damage > 0 | summarize percentiles(damage, 5, 20, 50, 80, 95) by EventType | sort by EventType asc
Powinny zostać wyświetlone wyniki, które wyglądają jak na poniższej ilustracji:
Przyjrzyj się wynikom. Czy można zidentyfikować mediany szkód spowodowanych przez powodzie? Mediana jest równa 50. percentylowi.