Alteryxで列の積を求める

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、小澤です。

今回はAlteryxで列の値の積を求める方法を解説していきます。

Summarizeツールと掛け算

データ分析では、全体であったり特定の値ごとにグルーピングして総和を求めたいことがよくあります。 例えば、以下のようなデータがあるとします。

id num
1 1
1 2
1 3
2 2
2 3
2 4
3 3
3 4
3 5

これに対して、総和を求めるにはSummarizeツールを利用して以下のようにします(idに関わらず全体の和を取るにはGroupByの項目を外します)。

結果は以下のようになります。

id Sum_num
1 6
2 9
3 12

さて、Summarizeツールを使うと、総和(Sum)の他にカウント(Count)、平均(Avg)、最大値(Max)、最小値(Min)など様々な集約系関数が用意されています。 しかし、この中には掛け算(Prod)を行う処理がありません。

一工夫して掛け算を行う

さて、このように標準には含まれていない処理ですが、一工夫することで実現できます。 これには以下の2つの数学の性質を利用します。

[latex] \log(xy) = \log(x) + \log(y) \\ n^{\log_n x} = x [/latex]

対数の積が和で表すことができるのと、対数と指数が逆関数になっているという性質です。 よくわからない場合は、これから紹介するワークフローを定型のものとして使っても問題ありません。

では、やってみましょう。 以下のようなワークフローを作成します。

データは以下のようになっており、計算結果としては5! = 120となれば正解です。

num
1
2
3
4
5

まず、1つ目のFormulaツールでは、以下のような設定を行っています。

ここでまず、対象の値の対数をとっています。 次にこの値を使ってSummarizeツールで和をとります。

結果は以下のようになります。

この段階で、元のベクトルxに対して

[latex] \sum_i \log(x) = \log(\prod_i x) [/latex]

を計算した状態となります。

最後にFormulaツールを使ってこの値のexpを計算します。

この計算は先ほどの値にしたいてなので、

[latex] \exp(\log(\prod_i x)) = \prod_i x [/latex]

となり、無事積を取ることができます。 本当になっているか、結果を見てみましょう。

無事、120となっているのが確認できました。

おわりに

今回は、Alteryxで積(Prod)相当の計算をする方法を紹介しました。 実際の場面では、実装されている集約系に比べて利用頻度はそれほど高くないかもしれませんが、必要になった際にはお試しください。

また、数学的な性質を利用するため、計算内容が複雑に感じられた方もいるかもしれません。 そういった場合は定型的なものとして利用しても問題ありません。

Alteryxの導入なら、クラスメソッドにおまかせください

日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。

alteryx_960x400