このページは解答編です。
↓ネ
↓タ
↓バ
↓レ
↓防
↓止
答えと解説
設問はこちらでした。
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を足すのがポイントです。
コメント