Challenge #36: Data Cleansing Extract Authors ~記事ごとの著者の一覧~ – Alteryx Weekly Challenge

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

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

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

今回は記事ごとの著者の一覧の作成に挑戦します。

動作環境

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

  • Windows 10 Pro
  • Alteryx Designer 2018.4.3.54046 英語版

Challenge #36: Data Cleansing Extract Authors

お題

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

「Input」側のデータはこちら。各記事のデータが1列になっています。PMIDが記事を表し、FAUが著者を表しています。

「Output」側のデータはこちら。記事ごとに著者が出力されています。

解答の概要

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

  1. Formula、FilterツールでPMIDとFAUのデータを抽出
  2. Multi-Row Formula、Formulaツールで列名を準備
  3. Cross Tab、Select、Sort、FilterツールでPMIDごとに著者名を表示

PMIDとFAUのデータを抽出

Formulaツール(Preparation -> Formula)を使用して新しく「New_Field」列をV_WString型で作成し、PMIDにある記事の番号とFAUにある著者名を抜き出します。

式は以下の通り設定しています。

if Left([Field_1], 5) == "PMID-" then Right([Field_1], Length([Field_1]) - 6)
elseif Left([Field_1], 5) == "FAU -" then Right([Field_1], Length([Field_1]) - 6)
else Null()
endif
  • 「Field_1」列の初めの5文字が「PMID-」の場合は「Field_1」列の「PMID- 」以降を出力
  • 「Field_1」列の初めの5文字が「FAU -」の場合は「Field_1」列の「FAU - 」以降を出力
  • それ以外はNullを出力

Filterツール(Preparation -> Filter)を使用して、「New_Field」列がNullではないデータのみ抽出します。

列名の準備

Multi-Row Formulaツール(Preparation -> Multi-Row Formula)を使用して、新しく「Author_Num」列をV_WString型で作成し、「PMID」か著者の番号を出力します。

式は以下の通り設定しています。

if left([Field_1], 4) == "PMID" then "PMID"
elseif left([Row-1:Field_1], 4) == "PMID" then 1
else tonumber([Row-1:Author_Num]) + 1
endif
  • 「Field_1」列の初めの4文字が「PMID」の場合は「PMID」を出力
  • 1つ上の「Field_1」列の初めの4文字が「PMID」の場合は「1」を出力
  • それ以外の場合は1つ上の「Author_Num」列の数値に1足して出力

Formulaツールを使用して、新しく「Field_Name」列をV_WString型で作成します。「PMID」または「Author」に番号を付けて出力します。

式は以下の通り設定しています。

if [Author_Num] == "PMID" then [Author_Num] 
else "Author" + [Author_Num]
endif
  • 「Author_Num」列が「PMID」の場合は「Author_Num」列を出力
  • それ以外の場合は「Author」に続けて「Author_Num」列(番号)を出力

Multi-Row Formulaツールを使用して新しく「ID」列を作成し、各記事にIDを割り当てていきます。

式は以下の通り設定しています。

if [New_Field] == "23755305" then 1
elseif left([Field_1], 4) == "PMID" then [Row-1:ID] + 1
else [Row-1:ID]
endif
  • 「New_Field」列が「23755305」の場合は「1」を出力
  • 「Field_1」列の初めの4文字が「PMID」の場合は1つ上の「ID」列の数値に1足して出力
  • それ以外の場合は1つ上の「ID」列を出力

PMIDごとに著者名を表示

Cross Tabツール(Transform -> Cross Tab)を使用して、IDごとにデータが表示されるようにします。Group Data by these Values に「ID」列を、New Column Headers に 「Field_Name」列を、Value for New Columns に「New_Field」列を、Method for Aggregationg ValuesConcatenateを選択します。

Selectツール(Preparation -> Select)を使用して、「PMID」列を初めに移動し、「ID」列を削除します。

Sortツール(Preparation -> Sort)を使用して、「PMID」列を Ascending (昇順)で並べ替えます。

この時点のデータでは、「Author1」列がNullではないけれど空白になっているデータがあります。Filterツールを使用して、「Author1」列が空白のものを取り除きます。

フィルタリングの条件として、Custom Filter で以下の通り設定しています。

[Author1] != ""

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

最後に

今回はWeekly ChallengeのChallenge #36: Data Cleansing Extract Authorsに挑戦しました。

明日もお楽しみに!

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

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

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

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

alteryx_960x400