演習 - 集計関数を使用してデータを集計する

完了

気象データセットを使用して、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 パーセンタイルと等しくなります。