データサイエンス100本ノックをAlteryxで。62日目(解答)

100本ノック

このページは解答編です。

↓ネ

↓タ

↓バ

↓レ

↓防

↓止

答えと解説

設問はこちらでした。

P-062: レシート明細データ(receipt.csv)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、売上金額合計を自然対数化(底e)して顧客ID、売上金額合計とともに10件表示せよ。ただし、顧客IDが”Z”から始まるのものは非会員を表すため、除外して計算すること。

※出力は、フィールド名をlog_amountとし、customer_idの昇順とすること

解答ワークフローは以下のようになります。

今回は、対数化を行う問題です。61問目では底が10の常用対数を取っていましたが、今回は底がネイビア数e(2.718281828459)の自然対数を使います。通常、底が省略されている場合やlnと書かれている場合は底はeとなります。

LOG関数

対数化するには底を10に取る場合と自然対数を使う場合がありますが、今回の問題では底をeにとる自然対数を使います。これにはLOG関数を使います。

LOG関数は以下のような書式となります。

LOG(x)

x:数値

実際のワークフロー

それでは、実際のワークフローを作っていきましょう。途中までは61問目などと同じやり方になります。

まず、顧客ID(customer_id)がZで始まるレコードをフィルターツールで取り除きます。カスタムフィルターで、「!StartsWith([customer_id], “Z”)」で取り除けます。

!StartsWith([customer_id], "Z")

次に、amountについて型変更を行います。セレクトツールを使い数値型(Int16)に変更します。ついでに不要なフィールドも削除しておきましょう。

その後、customer_idごとにamountを合計します。もちろん集計ツールを使いますが、customer_idでグループ化し、amountの合計を取ります。

59問目、60問目などとここまではやり方は同じです。

いよいよメインの部分になります。フォーミュラツールでLOG関数を使っていきます。0値対策のため、0.5で足したいと思います。

LOG([amount]+0.5)

あとは、customer_idの昇順に並べ、先頭から10レコードを取得します。最終的なワークフローは以下の通りとなります。

まとめ

今回は、対数化を行う問題でした。単に対数の関数を使うのではなく、0.5を足すのがポイントです。

解答ワークフローダウンロード

コメント

タイトルとURLをコピーしました