연습 - 집계 함수를 사용하여 데이터 요약

완료됨

우리는 기상 데이터 세트를 사용하여 2007년 한해 동안 미국의 여러 주에서 특정 종류에 속한 폭풍 이벤트의 수를 비교하고 결과를 시각화했습니다. 여기서는 다른 집계 함수를 탐색하여 데이터를 설명합니다.

avg() 함수를 사용하여 폭풍 형식 특성을 지정

마지막 단원에서는 시간과 함수 관계에 있는 폭풍의 수와 이러한 폭풍으로 인해 발생한 피해액을 살펴보았습니다. 폭풍 그 자체의 특징을 설명하는 데 도움이 될 수 있는 다른 통계를 살펴보겠습니다.

먼저 avg() 함수를 사용하여 폭풍으로 인해 발생한 평균 피해액(단위: 미국 달러)을 계산합니다.

다음 쿼리는 extend 연산자를 사용하여 모든 피해 값(이 경우 DamagePropertyDamageCrops)을 미국 달러로 추가하는 계산 열을 만듭니다. 그런 다음, 쿼리는 0보다 큰 피해를 일으킨 이벤트를 필터링합니다. 다음으로 쿼리는 각 유형의 폭풍으로 인해 발생한 평균 피해액을 요약합니다. 마지막으로, 결과는 새 평균 피해액 열별로 정렬됩니다.

  1. 다음 쿼리를 실행합니다.

    쿼리 실행

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

    다음 이미지와 같은 결과가 표시됩니다.

    Screenshot of avg aggregation function results.

  2. 이 쿼리를 실행하는 보다 간단한 방법은 avgif() 함수를 사용하는 것입니다. 이 함수는 avg() 함수와 비슷하지만 조건자가 true인 평균 결과만을 나타냅니다. 이 함수의 입력은 평가할 열, 그리고 값을 평가할 조건입니다. 따라서 쿼리 where damage > 0 | summarize avg(damage) by EventTypesummarize avgif(damage, damage > 0) by EventType에 해당합니다.

    작업하는 동안 round() 함수를 사용하여 결과를 정리해 보겠습니다. 이 함수는 결과를 소수점 뒤의 지정된 자리수로 반올림합니다. 이 예제에서는 기본 반올림 값 0을 사용합니다.

    다음 쿼리를 실행합니다.

    쿼리 실행

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

    다음 이미지와 같은 결과가 표시됩니다.

    Screenshot of avg aggregation function results second version.

min()max()를 사용하여 극단 찾기

이제 피해액의 극단을 살펴보겠습니다.

절대 최대값 또는 최소값의 경우, min()max() 집계 함수를 사용합니다. 해당 함수 내에서 최솟값 또는 최댓값을 계산할 열과 데이터를 집계할 필드를 정의해야 합니다. 다음 쿼리는 이전에 계산된 damage 열을 기반으로 하며 동일한 열에 대한 min()max() 값을 추가합니다.

  1. 다음 쿼리를 실행합니다.

    쿼리 실행

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

    다음 이미지와 같은 결과가 표시됩니다.

    Screenshot of max aggregation function results.

  2. 결과를 살펴봅니다. 열 이름을 더 친근하게 만들기 위해 쿼리 내에서 요약된 열의 이름을 MinDamageMaxDamage로 변경했습니다.

  3. minif()maxif() 함수를 사용하도록 쿼리를 변경해 보세요. 이러한 함수는 min() 함수 및 max() 함수와 비슷하지만 조건자가 true를 반환하는 레코드에 대해 제공된 식의 최소값 또는 최대값만 반환합니다. 마찬가지로 sumif() 함수를 사용하여 조건자가 true를 반환하는 레코드에 대해 제공된 식의 합계를 반환할 수 있습니다.

percentiles() 함수 사용

지금까지 각 이벤트로 인해 발생한 피해액의 최소값, 최대값 및 평균값을 계산했습니다. 이러한 값의 분포에 대한 그림을 완성하려면 백분위수를 계산하는 것이 도움이 됩니다. percentiles() 함수를 사용하여 계산할 입력 데이터 및 백분위수를 정의할 수 있습니다. 다음 예제에서는 각 이벤트 유형에 대한 피해의 5번째, 20번째, 50번째, 80번째 및 95번째 백분위수 값을 계산합니다.

빈도 분포를 나타내는 백분위수는 전체 중 차지하는 비율을 나타내는 백분율과 혼동해서는 안 됩니다.

  1. 다음 쿼리를 실행합니다.

    쿼리 실행

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

    다음 이미지와 같은 결과가 표시됩니다.

    Screenshot of percentiles aggregation function results.

  2. 결과를 살펴봅니다. 홍수로 인한 중간 피해액을 식별할 수 있나요? 중앙값은 50번째 백분위수와 같습니다.