#はじめに
Azure Data Factory や Azure Synapse Pipeline の Data Flow (GUIとノーコードでデータ加工できるツール)を使ってデータ集計や予測モデル用のデータ加工をするときのテクニックを整理しています
#やりたいこと
各データの期間別の要約統計量(平均、標準偏差、分散、中央値、第1四分位数、第3四分位数、等)を算出したい要件があると思います
Data Flow の式関数で算出できるのですが、平均、標準偏差、分散については1ステップで算出できるのですが、中央値、第1四分位数、第3四分位数については、median的な関数は残念ながらData Flowにはなく、ちょっとテクニック(2ステップで算出)が必要なのでその方法をこれから記載します
#方法
#####平均、標準偏差、分散の算出方法
①集計(Aggregate)モジュールを使用して統計量を算出したい単位に(下記例ではセンサーIDと年月)グループ化して
②平均(avg)、標準偏差(stddev)、分散(variance)の集計関数で集約する
※標準偏差と分散に関してはグループ化した集計対象データ件数が1件しかないとエラーになるので注意 対応策としては1件しかないデータを削除してから集計する(そもそも統計量を取得する上で極少件数しかないデータは1件でなくとも除外すべき)
#####中央値、第1四分位数、第3四分位数の算出方法
######Step1. nTile関数を使ってデータを昇順に4等分する
①ウィンドウ(Window)モジュールを使用して、[1.Over]タブで統計量を算出したい単位に(下記例ではセンサーIDと年月)グループ化して
②[2.並べ替え]タブで対象項目を昇順に並べ替え
③[3.範囲]タブはデフォルト設定のまま変更なし
④[4.ウィンドウの列]タブでnTile関数を使って4等分する
下記はイメージ
######Step2. 4等分されたデータから中央値、第1四分位数、第3四分位数を算出
⑤集計(Aggregate)モジュールを使用して統計量を算出したい単位に(下記例ではセンサーIDと年月)グループ化して
⑥max関数とmin関数を使用して下記の計算式で集約する
・中央値の場合、第2四分位のmax値と第3四分位のmin値を足して2で割ると中央値が算出できる
(max(iif(test3_tile==2, test3, toFloat(null()))) + min(iif(test3_tile==3, test3, toFloat(null())))) / 2
・第1四分位数
(max(iif(test3_tile==1, test3, toFloat(null()))) + min(iif(test3_tile==2, test3, toFloat(null())))) / 2
・第3四分位数
(max(iif(test3_tile==3, test3, toFloat(null()))) + min(iif(test3_tile==4, test3, toFloat(null())))) / 2
#参照
https://docs.microsoft.com/ja-jp/azure/data-factory/data-flow-expression-functions#ntile