Challenge #78: Find the Best Housing Markets ~最適な住宅市場を探す~ – Alteryx Weekly Challenge

こんにちは。Alteryxサポートエンジニアとして勉強中のスズです。

当エントリは『Alteryx Weekly Challenge:Intermediate Level Advent Calendar 2018』の24日目です。

『Alteryx Weekly Challenge:Intermediate Level Advent Calendar 2018』では、Alteryx Communityで公開されているWeekly ChallengeのIntermediate Levelにひたすら1人で挑戦していきます。

今回は最適な住宅市場を探すに挑戦します。

動作環境

当エントリの執筆には、以下の環境を利用しています。

  • Windows 10 Pro
  • Alteryx Designer 2018.4.4.54346 英語版

Challenge #78: Find the Best Housing Markets

お題

今回挑戦するお題はこちら。

「Input」側には2つ用意されています。1つ目にはURLが記載されており、アクセスするとデータが表示されます。

2つ目にはデータはありませんが項目名が用意されています。

「Output」側のデータはこちら。

解答の概要

今回作成するワークフローは以下の通りです。

  1. URLからデータの読み取りと表示
  2. データを項目ごとに分割
  3. 項目名の付与と出力の調整

URLからデータの読み取りと表示

Downloadツール(Connectors -> Download)を使用して、URLからデータを取得します。

取得したデータは以下のようになっています。URLから取得したデータは「DownloadData」列に出力されています。

Selectツール(Preparation -> Select)を使用して、不要な列を削除します。

データが1つのセルに出力されているため、Text To Columnsツール(Parse -> Text To Columns)を使用して分割します。Delimiters\n を設定し、Split to rows を選択します。

データを分割して表示することができました。

データを項目ごとに分割

Record IDツール(Preparation -> Record ID)でIDを付与したのち、RegExツール(Parse -> RegEx)を2つ使用して必要なデータを抜き出します。

1つ目のRegExツールの Regular Expression には以下の通り設定します。

(\d\d\d) (\d\d\d\d\d) (.*[A-Z|,|\*]) *(\d*) *(\d*) *(\d*) *(\d*) *(\d*)

一部のデータは改行されているため、取りこぼしがあります。取りこぼしを拾うため、2つ目のRegExツールの Regular Expression には以下の通り設定します。

 *([A-Z,-]*) *(\d*) *(\d*) *(\d*) *(\d*) *(\d*)

Joinツール(Join -> Join)を使用して、RegExツールで作成した2つのデータを「RecordID」列で結合します。あわせて不要な列を削除します。

また、「RecordID」列の「397」より後は不要なデータとなります。Filterツール(Preparation -> Filter)を使用して、「RecordID」列が「397」以下のデータを抽出します。

今回作成したデータでは、取りこぼしがある場合、1つ下のセルがNullになっています。また、取りこぼしたデータは「Right_」の列に出力されています。

Multi-Row Formulaツール(Preparation -> Multi-Row Formula)を使用して、データを更新します。

「RegExOut3」列の更新には以下の式を設定します。

if isnull([Row+1:RegExOut3]) then [RegExOut3] + " " + [Row+1:Right_RegExOut1]
else [RegExOut3]
endif
  • 1つ下の「RegExOut3」列がNullの場合は「RegExOut3」列と空欄、1つ下の「Right_RegExOut1」列を出力
  • それ以外の場合は「RegExOut3」列を出力(更新なし)

「RegExOut4」列の更新には以下の式を設定します。

if isnull([Row+1:RegExOut4]) then [Row+1:Right_RegExOut2]
else [RegExOut4]
endif
  • 1つ下の「RegExOut4」列がNullの場合は「Right_RegExOut2」列を出力
  • それ以外の場合は「RegExOut4」列を出力(更新なし)

「RegExOut5」から「RegExOut8」列も同様の処理を行います。

Filterツールで「RegExOut1」列がNullではないデータを抽出し、Selectツールで不要な列を削除します。URLから取得したデータの整形が完了しました。

項目名の付与と出力の調整

整形したデータと「Input」側にある2つ目のデータ(項目名)を、Unionツール(Join -> Union)を使用して結合します。データの結合には Auto Config by Position を使用し、整形したデータの項目名を修正します。

Sortツール(Preparation -> Sort)で「Total」列を降順に並べ替え、Sampleツール(Preparation -> Sample)で上位10件を出力します。結果を確認して完成です。

最後に

今回はWeekly ChallengeのChallenge #78: Find the Best Housing Marketsに挑戦しました。長かったアドベントカレンダーも残すところあと1日となりました。

明日もお楽しみに!

サンプルワークフローのご案内

クラスメソッドでご契約のユーザー様向けに、当ブログでご紹介したワークフローを専用ポータルにて公開しております。当エントリでご紹介したワークフローも公開予定ですので、ご参考にしていただきますと幸いです。

Alteryxの導入なら、クラスメソッドにおまかせください

日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。

alteryx_960x400