Alteryxで縦持ちデータに一意なIDを振る
こんにちは、小澤です。
データに一意なIDが振られていると、結合のキーなどに利用できるため、何かと便利なことがあります。 AlteryxではRecord IDツールを利用するすることで後から連番での値を振ることができ、これを利用することがよくあります。 しかし、場合によっては同じIDを振るべきレコードが複数あるような状況もあります。
今回は元のデータが縦持ちになっている場合に、同一のレコードには同一のIDを振る方法を紹介します。
データの形式
さて、縦持ちデータに一意なIDを振ると言っても、それを判断できる情報が必要になります。 これは
- 項目数が決まっている
- 必須項目が決まっている
- 主キーとなる要素を割り出せる
などの条件が必要になります。 この部分に関しては、今回のメインテーマではないので、いずれかは満たされているものとします。
例えば、以下のようなデータがあるとします。
ユーザ名 | 購入アイテム | 購入数 | 購入日 |
---|---|---|---|
ココア | カプチーノ | 3 | 2017-11-01 |
ココア | エスプレッソ | 2 | 2017-11-01 |
ココア | カフェラテ | 2 | 2017-11-01 |
チノ | エスプレッソ | 2 | 2017-11-01 |
チノ | モカ | 2 | 2017-11-01 |
リゼ | アメリカン | 5 | 2017-11-02 |
ココア | カフェラテ | 2 | 2017-11-02 |
ココア | カフェモカ | 2 | 2017-11-02 |
千夜 | ぜんざい | 3 | 2017-11-02 |
チノ | ブルーマウンテン | 2 | 2017-11-02 |
チノ | キリマンジャロ | 2 | 2017-11-02 |
... | ... | ... | ... |
このデータの性質として、1人1日1回のみの購入となっているものとします。 そのため、例えばココアちゃんは2017-11-01の1回の買い物で3つの商品を購入しています。 ここでは、1回の買い物ごとにIDを振るのを目的とします。
また、シャロちゃんはカフェイン酔いするのと、お金がなかったため購入していません。
実際にやってみる
さて、このデータに1回の買い物ごとのIDを振るワークフローを見てみましょう。 今回は、2種類のワークフローで実現していみたいと思います。
横持ちに変換する方法
このワークフローでは、まず最初にデータを横持ちに変換しています。
設定は以下のように
- Group Byにユーザ名と購入日
- 列名に購入アイテム
- 値に購入数
としています。
このデータにRecord IDツールで一意なIDを振ったのち、Transposeツールで再び縦持ちに戻しています。
最後にFilterツールでnullの項目を削除し、列名がNameとValueになっているのを購入アイテム、購入数に戻すことで、一意なIDを振ることができました。
累積和で計算する方法
もう1つの方法は、累積和で計算する方法になります。
まず、キーとなるユーザ名、購入日の順でソートします。
このデータに対して、Multi-Row Formulaツールでユーザ名か購入日のどちらかが変わるタイミングで1、それ以外は0となるような計算を行います。
abs([Row-1:ユーザ名] != [ユーザ名] or [Row-1:購入日] != [購入日])
ここでは、Alteryx上でのBool値の扱いとして、Tureなら-1, Falseなら0となるのを利用して、それの絶対値をとっています。
最後にRunning Totalツールでこの値の累積和を求めます。 IDの変化が必要なタイミングで1がプラスされて、それ以外は0なので値の変化なしとなります。
これでIDを振ることができました。
こちらの方法では、Multi-Row Formulaで値に1を入れるべきタイミングさえ決められれてば、幅広く応用可能です。
おわりに
今回は、縦持ちになっているデータに対して、同一のものには同一のIDを振る方法を紹介しました。 実際には、何らかの判断が可能な基準がないと復元できないなどの問題もありますが、役に立つ場面もあるかと思います。
Alteryxの導入なら、クラスメソッドにおまかせください
日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。