演習 - 集計関数を使用してデータを集計する
気象データセットを使用して、2007 年の米国のさまざまな州で発生したある種の暴風雨の数を比較し、結果を視覚化しました。 ここでは、他の集計関数を使ってデータを記述してみます。
avg()
関数を使用して暴風雨を分類する
最後のユニットでは、時間の関数としての暴風雨の回数と、それらの暴風雨によって引き起こされた被害を調べました。 嵐自体の分類に役立つ他の統計情報を見てみましょう。
まず、avg()
関数を使用し、嵐によって引き起こされた平均損害額を米ドル単位で計算します。
次のクエリでは、extend
演算子を使用して計算列を作成し、被害のすべての値を加算します。この場合は、DamageProperty と DamageCrops を加算します (米国ドル)。 次に、損害額が 0 より大きい事例をフィルター処理します。 次に、クエリで各種の暴風雨によって発生した被害の平均をまとめます。 最後に、新しい平均損害列によって結果が並べ替えられます。
次のクエリを実行します。
StormEvents | extend damage = DamageProperty + DamageCrops | where damage > 0 | summarize avg(damage) by EventType | sort by avg_damage
次の画像のような結果が得られるはずです。
このクエリを実行するより簡潔な方法は、
avgif()
関数を使用することです。 この関数はavg()
関数に似ていますが、述語が true の結果のみの平均を計算します。 この関数の入力は、評価する列と、値を評価するための条件です。 したがって、クエリwhere damage > 0 | summarize avg(damage) by EventType
はsummarize 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
次の画像のような結果が得られるはずです。
min()
と max()
を使用して極端なデータを見つける
それでは、極端な損害データを見てみましょう。
絶対最大値または最小値には、min()
集計関数と max()
集計関数を使用します。 これらの関数内では、最小値または最大値を計算する列と、データを集計するフィールドを定義する必要があります。 次のクエリは前に計算された damage
列に基づいて構築され、同じ列の min()
値と max()
値が追加されます。
次のクエリを実行します。
StormEvents | extend damage = DamageProperty + DamageCrops | where damage > 0 | summarize MaxDamage=max(damage), MinDamage=min(damage), AverageDamage=avg(damage) by EventType | sort by MaxDamage
次の画像のような結果が得られるはずです。
結果を確認します。 列名をわかりやすくするために、クエリ内の集計列の名前を MinDamage と MaxDamage に変更しました。
minif()
関数とmaxif()
関数を使用するようにクエリを変更してみてください。 これらの関数は、min()
関数とmax()
関数に似ていますが、述語が true を返すレコードに対して指定された式の最小値または最大値のみを返します。 同様に、sumif()
関数を使用して、述語が true を返すレコードに対して指定された式の合計を返すことができます。
percentiles()
関数を使用する
ここまでは、各イベントによって生じた被害の最小値、最大値、平均値を計算しました。 これらの値の分布の全体像を完成させるには、パーセンタイルを計算すると便利です。 percentiles()
関数を使用して、計算する入力データとパーセンタイルを定義できます。 次の例では、イベントの種類ごとに損害の 5 番目、20 番目、50 番目、80 番目、95 番目のパーセンタイル値を計算します。
頻度分布を表すパーセンタイル値と、全体との割合を示すパーセンテージ値を混同しないようにしてください。
次のクエリを実行します。
StormEvents | extend damage = DamageProperty + DamageCrops | where damage > 0 | summarize percentiles(damage, 5, 20, 50, 80, 95) by EventType | sort by EventType asc
次の画像のような結果が得られるはずです。
結果を確認します。 洪水による損害の中央値を特定できますか? 中央値は 50 パーセンタイルと等しくなります。