AlteryxのWeekly Challenge-7を解答例よりも少ないツール数で実現
こんにちは、小澤です。
AlteryxにはWeekly Challengeという毎週お題が与えられてそれを実現するためのワークフローを作成する、というチャレンジ企画があります。
チャレンジ企画だし、「やってみた」ブログで解答をのせてしまうのも...と思っていたのですが、過去の問題は既に解答例が用意されてるし、このWeekly Challengeがどういったものなのか、という紹介も兼ねて古い問題を1問やってみようかと思います。 そして、せっかくなので「解答例よりも少ないツール数で実現する」という縛りプレイにしたいと思いますw
どの問題をやってみるか
さて、ではどの問題をやってみるかをまず決めます。
Weekly Challengeは2018/06/22現在121問目まであります。 また、以下に全問題のインデックスとして、難易度やジャンルに関する情報も記載されています。
難易度は、Beginner, Intermediate, Advancedと3段階ありますが、ここはAdvanced一択でしょうw というわけで問題番号7番の「Download Data and Parse JSON」に挑みます。
いざ挑戦
Challenge #7: Download Data and Parse JSONからchallenge_7_start_file.yxmdファイルをダウンロードしてチャレンジ開始です。
ファイルを開くと以下のようなワークフローが表示されます。
内容としては、左側にあるデータを右側にあるデータまで持っていければ勝ちとなります。
入力データはタイトルにある通りダウンロードを行うためか、URLが記載された1行のデータになっています。
出力側は以下のような形式のデータになっています。
どうやらダウンロードしたデータを整形することでこの形に持っていけるようです。
実装
では、やっていきましょう。
データのダウンロード
まず最初にやるのはURLのデータのダウンロードです。 これにはDownloadツールを利用します。
DownloadツールのURL > Fieldに先ほどの入力データのURLが記載されている「Field1」を選択して実行すると、以下のようにデータがダウンロードできます。
DownloadData列に取得したデータが入っているのですが、このままでは見通しが悪いですね。 データはJson形式なのでJSON Parseツールでパースしましょう。
こちらも設定はJSON Fieldに「DownloadData」を選択するのみです。 以下のような結果になりました。
この中から規則性を見つけ出すのですが、今回のデータからこの後の処理に必要なもの絞って解説すると以下のような構造になっています。
- dataset.data.X.Yにデータが入っている(X, Yはそれぞれ0から始まる連番)
- Xの値が同じでものが1行のデータでYの値で何列目のデータかを示している
- 列名はdataset.column_names.Yに入っている
データを整形する
ではまず、データの部分を整形しましょう。
最初に全体からデータの部分だけをFilterツールで抜き出します。 先ほどの構造にしたがって、以下のような式で実現します。
StartsWith([JSON_Name], "dataset.data.")
これで必要な行のみに絞り込めました。 これを元にdataset.data.X.Y中のXの値が同じものは同一行、Yの値ごとに列を作成するという処理をします。
Text to ColumnツールでJson_Name列を分割します。
今回は区切り文字は「.」、分割数は4です。
分割すると以下のようなデータになるのが確認できます。
Xに該当する列は「JSON_Name3」、 Yに相当するのが「JSON_Name4」となっています。Cross Tabツールで行列を整形しましょう。
Group Data By these ValuesがJSON_Name3、New Column HeadersがJSON_Name4、Value for New Columnsは実際のデータが入っているJSON_Valule_Stringとなります。 この条件でデータに重複は無いのでMethodは何を指定しても問題ありません。
結果は以下のようなデータになります。
だいぶゴールに近づいてきましたね。
もうJSON_Name3は必要ないのでSelectツールで削除しておきます。
列名を取得する
さて、次に必要なのが列名の取得です。 先ほどのデータ構造から規則性はわかっているので、データを取得した時と同様にFilterツールで欲しい情報だけを取り出しましょう。
StartsWith([JSON_Name], "dataset.column_names")
これだけで取得できました。
あとはこれをDynamic Renameツールで先ほどの列名に設定します。
「L」側に整形したデータ、「R」側に列名を持っているデータを接続します。
以下のように「Rename Mode」で「Take Field Names from Right Input Rows」を選択して、 「New Field Name from Column」でJson_Value_Stringを選択します。
これで以下のように最終的な結果となりました!
あとは、必須ではないですが型を整えたりソートしたりして、最終的なワークフローは以下のようになりました。
必須ではない最初から配置されていたツールと必須ではない最後の3つのツールを除くと全部8ツールを使ってワークフローを作成しました。
公式の解答例と見比べてみる
はしてこのツール数は公式の解答例に勝っているのでしょうか? 先ほどのページから、今度はchallenge_7_solution.yxmdをダウンロードして見て見ましょう。
このようなワークフローになっています。 Text InputとBrowseツールを除くとツール数は12です。 無事勝利を収めることができました。
終わりに
今回はWeekly Challengeの問題にて、公式の解答と戦ってみましたw 本来はそういう勝負じゃないなく、純粋にワークフロー作成力を高めるのに非常に有益な問題が多く揃っているのでぜひ気軽にチャレンジしてみてください。
Alteryxの導入なら、クラスメソッドにおまかせください
日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。