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

100本ノック

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

↓ネ

↓タ

↓バ

↓レ

↓防

↓止

答えと解説

設問はこちらでした。

P-052: レシート明細データ(receipt.csv)の売上金額(amount)を顧客ID(customer_id)ごとに合計の上、売上金額合計に対して2,000円以下を0、2,000円より大きい金額を1に二値化し、顧客ID、売上金額合計とともに10件表示せよ。ただし、顧客IDが”Z”から始まるのものは非会員を表すため、除外して計算すること。

※出力データはcustomer_id順に並べること
※2値化フィールド名はsales_flgとする

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

今回は複合的な問題となります。まずは、今までやってきた内容までさくっと進めたいと思います。

最初にすべきは、「顧客IDが”Z”から始まるのものは除外」ということなので、フィルターツールで不要なデータを取り除いて行きたいと思います。

「Z」から始まるということで、StartsWith関数が利用可能です。それを除外ということなので、Zから始まらない、ということになるので、「!」もしくはNOTをStartsWith関数の前につければOKです。計算式は以下のとおりです。

!StartsWith([customer_id], "Z")

次に、集計を行うために、先に型の変換を行いましょう。売上金額(amount)の合計を取っていくため、数値型に変換する必要があります。

次に、集計ツールで集計していきます。

顧客ID(customer_id)ごとに売上金額(amount)の合計をとる、ということなので、customer_idでグループ化し、amountの合計を取ります。集計ツールの設定は以下のとおりです。

ここまでは今までの内容の積み重ねかと思います。

次に、「売上金額合計に対して2,000円以下を0、2,000円より大きい金額を1に二値化」していきたいと思います。2値化といっても単にしきい値を決めてしきい値より大きければ1、小さければ0と、1もしくは0の2つの値で表現するのが2値化であり、決して特別なことではありません。

しきい値を決めて1もしくは0とするには、フォーミュラツールでIF文を使うことで簡単に達成可能です。

IF文

IF文は条件を指定し、条件によって出力を分岐させる関数(論理式)です。フォーミュラツールの関数メニューから挿入すると以下のように入力されます。

IF c THEN t ELSE f ENDIF
ccondition(条件)条件を記載する。結果はBoolean(True/False)で得られること
ttrueの場合条件がTrueであった場合はここに記載されているものが出力される
ffalseの場合条件がFalseであった場合はここに記載されているものが出力される

今回の場合に照らし合わせてみましょう。

2000円がしきい値で2000を含むのは小さいときなので、以下のように場合分けされます。

0[amount]<=0
1[amount]>0

これをIF文で表現すると、[amount]<=0の場合は0となるので、「t」のところに「0」、「f」のところに「1」を記載します。つまり、

IF [amount]<= 2000 THEN 0 ELSE 1 ENDIF

となります。実際のフォーミュラツールの設定は以下のとおりです。

結果は0か1とのことなので、Byte型で出力しましょう(Bool型だとTrue/Falseという表記になってしまいます)。

その後、customer_idで並べ替え、最初から10レコードをサンプリングツールで取れば完了です。

まとめ

今回は、これまで行ったことの復習とIF文の使い方がメインでした。IF文は非常によく使うので慣れておきましょう。

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

コメント

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