Challenge #54: Data Prep Address Parsing ~区切られていないデータの整形~ – Alteryx Weekly Challenge

2019.05.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

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

Alteryx Communityで公開されているWeekly Challengeに挑戦するシリーズ。今回は区切られていないデータの整形に挑戦します。

動作環境

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

  • Windows 10 Pro
  • Alteryx Designer 2019.1.6.58192 英語版

Challenge #54: Data Prep Address Parsing

お題

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

Input側のデータはこちら。データが1つの列にまとめられています。

Output側のデータはこちら。元のデータから「City」「State」「Zip」に列を分けています。

解答

今回作成するワークフローはこちら。

Recort IDツールでIDを付与したのち、「City」「State」「Zip」になるデータに分けて処理を行っていきます。まずは「City」列の処理を行います。

Text To Columnsツールでデータを分割します。Delimiters\sを指定して半角スペースでデータを分けるようにします。また、Split to rowsを指定して同じ列に出力します。

分割した結果はこちら。

Multi-Row Formulaツールを使用して、同じIDを持つデータに番号を振っていきます。新しく「Number」列をInt32型で作成します。

Expressionには以下のとおり設定します。1つ上の「RecordID」列と同じ場合は1つ上の「Number」列に1足して出力し、それ以外の場合は「1」を出力します。

IIF([Row-1:RecordID] == [RecordID], [Row-1:Number] + 1, 1)

Cross Tabツールを使用して、データを横持ちに変換します。

横持ちに変換して結果はこちら。

Formulaツールを使用して、V_WString型で「City」列を作成します。

設定は以下のとおりです。Output側のデータにあわせて、出力するデータの条件を設定しています。

if [RecordID] == 1 then [5] + " " + [6]
elseif [RecordID] == 2 or [RecordID] == 6 or [RecordID] == 7 then [4]
elseif [RecordID] == 8 then [5]
else [4] + " " + [5]
endif

続いて、RegExツールを使用して「State」列と「Zip」列を用意します。

「State」列はこちら。Regular Expression([A-Z]{2})を指定します。

「Zip」列はこちら。Regular Expression(\d{5})$を指定します。

「City」「State」「Zip」のデータの準備ができました。Jon Multipleツールを使用して、「RecordID」列で3つのデータを結合します。あわせて不要な列の削除と列名の修正を行います。

結果を確認して完成です。

最後に

今回はChallenge #54: Data Prep Address Parsingに挑戦しました。

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

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

alteryx_960x400