Challenge #2: Preparing Delimited Data 〜複数の区切り文字を持つデータの整形 ツールしばり編〜 – Alteryx Weekly Challenge
こんにちは。Alteryxサポートエンジニアとして勉強中のスズです。
Alteryx CommunityのWeekly Challengeに挑戦するシリーズ。今回は以前すでに解答をご紹介しているお題にしばりを入れて挑戦してみます。
Challenge #2: Preparing Delimited Data
お題
今回挑戦するお題はこちら。niino氏が挑戦したChallenge#2の「区切り文字のデータ整形」です。
以前のエントリでは、元のデータを分割するためにText To Columnsツールを使用していました。今回のエントリでは、データの分割にText To Columnsを使用しないというしばりで、お題に挑戦してみます。
RegExツールを使う
Parse -> RegExを使用してデータを分割して出力してみます。Regular Expression には以下の通り入力します。
(".*"),(\d\d\d),('.*')
- 「(".*")」でダブルクォーテーションの中にある文字列を抽出
- 「(\d\d\d)」で3つ並んでいる数字を抽出
- 「('.*')」でシングルクォーテーションの中にある文字列を抽出
結果を確認すると、「RegExOut1」「RegExOut2」「RegExOut3」という列が作成され、それぞれに抽出した文字列が出力されています。
あとは、FormulaツールやSelectツールを使用して整形して完了です。
Formulaツールを使う
今度はPreparation -> Formulaを使用してみます。Formulaツールには以下の通り設定しました。
「Poem」「Poem_ID」「Poem_Read_Date」列を作成してそれぞれに分割したデータを出力しています。順番に見ていきます。
- 「Poem」列
Replace(Left([Field_1], FindString([Field_1], ",")), '"', '')
「FindString([Field_1], ",")」ではカンマの場所を探しています。「Left([Field_1], FindString([Field_1], ","))」とすることで、カンマの前までの文字列を抜き出しています。また、Replace関数を使用して、ダブルクォーテーションを削除しています。
- 「Poem_ID」列
Replace(Substring([Field_1],FindString([Field_1], ","),4), ",", "")
「Poem」列と同様にFindString関数でカンマの場所を探しています。「Substring([Field_1],FindString([Field_1], ","),4)」とすることで、カンマから4文字を抜き出しています。カンマが含まれていますので、Replace関数を使用してカンマを削除しています。
- 「Poem_Read_Date」列
DateTimeParse(Replace(Right([Field_1], 11), "'", ""),"%d-%b-%y")
「Right([Field_1], 11」を使用して右から11文字を抽出しています。Replace関数でシングルクォーテーションを削除し、DateTimeParse関数で年月日の表記を整えています。
最後にSelectツールで不要な列を削除して完成です。
最後に
今回はWeekly ChallengeのChallenge #2: Preparing Delimited Dataに挑戦してみました。通常Alteryxを使用する際にツールを制限する必要はありませんが、Weekly Challengeに挑戦する際はしばりを入れることで普段とは違う使い方に出会えるかもしれません。