Challenge #11: Identify Logical Groups ~データから文字列の検索と集計~ – Alteryx Weekly Challenge
こんにちは。Alteryxサポートエンジニアとして勉強中のスズです。
Alteryx Communityで公開されているWeekly Challengeに挑戦するシリーズ。今回はデータから文字列の検索と集計に挑戦します。
動作環境
当エントリの執筆には、以下の環境を利用しています。
- Windows 10 Pro
- Alteryx Designer 2018.4.5.55178 英語版
Challenge #11: Identify Logical Groups
お題
今回挑戦するお題はこちら。
Input側に用意されているデータは2つあります。1つ目は苦情のデータ。
2つ目は検索する文字列とバケット。
Output側のデータはこちら。検索した文字列をバケットに分類して数を出力しています。
模範解答には、バッチマクロを使用する方法と使用しない方法の2つが提示されています。
解答の概要
今回作成するワークフローの概要はこちら。バッチマクロを作成して使用しています。
なお、今回は学習の意味を兼ねてバッチマクロを作成して解答していますが、バッチマクロがないと目的のデータを作成できないものではありませんのでご注意ください。
解答の詳細
バッチマクロの前
Text Inputツール(In/Out -> Text Input)で用意されている検索文字列とバケットのデータは、バッチマクロの上の入力に接続します。
Input Dataツール(In/Out -> Input Data)で用意されている苦情のデータは、Record IDツール(Preparation -> Record ID)を使用して「RecordID」列の作成とIDを付与したのち、バッチマクロの下の入力に接続します。
バッチマクロの設定では、入力するフィールドを選択しています。
バッチマクロの内部
バッチマクロの内部は以下のとおりになっています。
入力されたデータは、Append Fieldツール(Join -> Append Fields)を使用して結合します。
結合されたデータに対して、Formulaツール(Preparation -> Formula)を使用して「Flag」列をInt32型で作成します。「Flag」列には、苦情のデータに検索文字列があった場合に1を、ない場合は0を出力するように設定します。
式は以下の通り設定しています。
if Contains([Data], [Search]) then 1 else 0 endif
Filterツール(Preparation -> Filter)を使用して、「Flag」列が0ではないデータに絞り込みます。
ここまでの処理をバッチマクロで行い、出力します。
バッチマクロの後
ここからはワークフローの紹介に戻ります。Output側の出力にあわせるため、Sortツール(Preparation -> Sort)を使用して、「Bucket」列を昇順で並べ替えます。
Summarizeツール(Transform -> Summarize)を使用して、「RecordID」列でグループ化、「Bucket」列の全ての文字列を出力、「Flag」列の最小値を出力します。
続いてSummarizeツールを使用して、「Concat_Bucket」列でグループ化し「Bucket(s)」列に出力、「Min_Flag」列の合計を「Count」列に出力します。
Sortツールを使用して、「Count」列を降順に並べ替えます。
結果を確認して完成です。
最後に
今回はWeekly ChallengeのChallenge #11: Identify Logical Groupsに挑戦しました。
Alteryxの導入なら、クラスメソッドにおまかせください
日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。