Challenge #40: Parsing a HTML File ~HTMLファイルのパース~ – Alteryx Weekly Challenge

2019.03.27

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

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

Alteryx Communityで公開されているWeekly Challengeに挑戦するシリーズ。今回はHTMLファイルのパースに挑戦します。

動作環境

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

  • Windows 10 Pro
  • Alteryx Designer 2019.1.4.57073 英語版

Challenge #40: Parsing a HTML File

お題

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

ワークフローとは別にyxdbファイルでデータが提供されています。そのデータをAlteryxで読み込むと、以下のように表示されます。

「DownloadData」列の中身を見てみると、h3h4といった部分に今回処理していくデータがあります。
※以下の画像はExcelファイルに出力したものです。

Output側のデータは以下のようになっています。「DownloadData」列を処理してデータを用意します。

解答

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

yxdbファイルをAlteryxで読み込むと、処理するデータ「DownloadData」列で1つにまとめられています。まずはText To ColumnsツールでDelimiters\nを指定して、データを分けていきます。\nを指定すると、改行でデータを分けるようになります。また、Split to rowsを指定することで、同じ列にデータを分けていきます。

出力したデータは以下のようになっています。

分けたデータを分類していきます。Formulaツールを使用して、新しく「Category」列をV_WString型で作成します。

以下の条件で出力します。

  • 「DownloadData」列にh3が含まれる場合は「Physician」を出力
  • 「DownloadData」列にh4が含まれる場合は「Address」を出力
  • 「DownloadData」列にh5が含まれる場合は「Practice」を出力
  • それ以外の場合はNullにする

「Category」列がNullになっているデータは不要になりますので、Filterツールを使って取り除きます。

Nullが取り除かれたデータを確認してみます。「Physician」「Address」「Practice」のセットで1人分のデータになります。

Multi-Row Formulaツールを使用してIDを割り当てていきます。新しく「ID」列をInt32型で作成します。

Expressionには以下のとおり設定しています。「Category」列が「Physician」の場合は1つ上の「ID」列の数字に1足して出力し、それ以外の場合は1つ上の「ID」列の数字を出力します。これにより1人分のデータに同じIDを割り当てていきます。

iif([Category] == "Physician", [Row-1:ID] + 1, [Row-1:ID])

Cross Tabツールを使用して、「Category」列のカテゴリ別に「DownloadData」列のデータを出力します。

以下のとおり設定しています。

  • Group Data by these Values: 「ID」列
  • New Column Headers: 「Category」列
  • Value for New Columns: 「DownloadData」列

以下のデータが出力されました。

「Address」列には、最終的に「Address」列に出力するデータのほかに、「City」列に出力するデータが含まれています。Formulaツールを使用して新しく「City」列をV_WString型で作成します。

以下の設定をしています。

Right([Address], Length([Address]) -  FindString([Address], "/>") - 2)
Left([City], FindString([City], "</h4>"))

RegExツールを使用して、「Address」列から住所のデータを抜き出します。

Output MedhodParseを設定し、Regular Expression:には以下の通り設定しています。

<span>(.*)</span>

RegExツールをもう1つ使用し、同じように「Physician」列から人名のデータを抜き出します。

Output MedhodParseを設定し、Regular Expression:には以下の通り設定しています。

.*>(.*)</a>

Formulaツールを使用してデータを整えていきます。

「Practice」列には以下の式を設定して不要な文字列を削除します。

Trim(Left([Practice], FindString([Practice], "</h5>")), "<h5>")

また、「Practice」列「City」列「RegExOut1」列に、空になっているデータをNullにするよう設定します。

IIF(IsEmpty(<列>), Null(), <列>)

Selectツールを使用して、不要な列の削除、列名の修正、順番の並べ替えを行います。

Data Cleansingツールを使用して、データに含まれる不要な空白を削除します。

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

最後に

今回はWeekly ChallengeのChallenge #40: Parsing a HTML Fileに挑戦しました。

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

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

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

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

alteryx_960x400