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 - Qiita
- Alteryx Weekly Challenge:Intermediate Level Advent Calendar 2018 | シリーズ | Developers.IO
『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」側のデータはこちら。記事ごとに著者が出力されています。
解答の概要
今回作成するワーフクローは以下の通りです。
- Formula、FilterツールでPMIDとFAUのデータを抽出
- Multi-Row Formula、Formulaツールで列名を準備
- 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 Values にConcatenate
を選択します。
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日間の無料トライアルも実施中ですので、お気軽にご相談ください。