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

100本ノック

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

↓ネ

↓タ

↓バ

↓レ

↓防

↓止

答えと解説

設問はこちらでした。

P-053: 顧客データ(customer.csv)の郵便番号(postal_cd)に対し、東京(先頭3桁が100〜209のもの)を1、それ以外のものを0に二値化せよ。さらにレシート明細データ(receipt.csv)と結合し、全期間において売上実績のある顧客数を、作成した二値ごとにカウントせよ。

※郵便番号(postal_cd)2値化したフィールドはpostal_flgという名称とすること

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

52問目に続き、2値化する問題です。

まず、郵便番号(postal_cd)の先頭3桁の値の範囲に対して2値化するとのことなので、フォーミュラツールを使ってまず左から3文字を切り出します。左から文字を切り取る場合は、「Left関数」を使います。フィールド名は「Top3Number」とでもしておきましょう。

なお、出力は数値で出したいので、ToNumber関数でさらに囲みます。以下のようになります。

ToNumber(Left([postal_cd], 3))

次に、フォーミュラツールは一つのツール内に複数の式を持つことができます。プラスボタンから追加しましょう。

次に、先ほど作った「Top3Number」を使って2値化するためのIF文を組み立てます。100以上、209以下なら1、それ以外は0とのことなので、以下のような数式となります。

IF [Top3Number]>=100 AND [Top3Number]<=209 THEN 1 ELSE 0 ENDIF

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

2値化後は、レシート明細データ(receipt.csv)と結合する必要があります。結合ツールを使いましょう。特定のフィールドで結合、とし、キーフィールドは「customer_id」となります。

ここで、売上実績のある顧客というのは、レシート明細データと結合できたレコードなので、「J出力」の結果を使います。

次に、今回作成した「postal_flg」フィールドの2値化された値ごとに顧客数をカウントするわけですが、データは重複しているので重複を除いてカウントする必要があります。posta__flgでグループ化し、customer_idに対して「重複を除いてカウント」します。

これで完了です。

計算式をまとめる

今回、2値化する際に、フォーミュラツール内で二つの式に分けて実行しました。分けることで、最初の式の結果を見ることができますが、慣れていれば特に分ける必要はありません。ということで、フォーミュラツール内で分けずにやってみたいと思います。

今回二つに分けていましたが、それぞれの計算式は以下の通りでした。

ToNumber(Left([postal_cd], 3))
IF [Top3Number]>=100 AND [Top3Number]<=209 THEN 1 ELSE 0 ENDIF

上の計算式は下の計算式の[Top3Number]に該当します。つまり、上の式をそのまま下の[Top3Number]にコピペすればオッケーです。

つまり、以下のようになります。

IF ToNumber(Left([postal_cd], 3))>=100 AND ToNumber(Left([postal_cd], 3))<=209 
THEN 1 ELSE 0 ENDIF

実際の設定は以下のようになります。

まとめ

今回も、これまで行ったことの復習とIF文の使い方がメインでした。

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

コメント

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