Alteryxで列名にある数字ごとにデータをまとめる
こんにちは、スズです。
今回は、列名にある数字ごとにデータをまとめるワークフローをご紹介します。具体的には、以下のように「A_1」、「B_1」、「B_2」という列があるデータを、
A_1 | B_1 | C_1 | B_2 | A_3 | B_3 | A_4 | B_4 | B_5 | C_5 |
---|---|---|---|---|---|---|---|---|---|
あ | い | う | え | お | か | き | く | け | こ |
「ABC_1」、「B_2」というように変換してみます。
ABC_1 | B_2 | AB_3 | AB_4 | BC_5 |
---|---|---|---|---|
あ,い,う | え | お,か | き,く | け,こ |
環境
本エントリの執筆に使用した環境は以下の通りです。
- Alteryx Designer 2020.2
- Windows 10 Pro
ワークフローの概要
作成するワークフローの全体像はこちら。
ワークフローの概要は以下の通りです。
- 転置ツールで縦持ちに変換
- 正規表現ツールで英字と数字を抜き出す
- データの持ち方の変換と列名の作成
- クロスタブツールで横持ちに変換
- クロスタブツール、転置ツール、フォーミュラツールで列名の作成
- 動的リネームツールで列名の修正
ワークフローの詳細
列名の英字と数字の分解
ここからはワークフローの詳細をみていきます。データはテキスト入力ツールで用意しました。
転置ツールを使ってデータを縦持ちに変換します。キー列には何も選択せず、データ列で全ての列を選択します。
縦持ちに変換したデータは「Name」列に「A_1」などの元の列名、「Value」列に「あ」などの元のデータが入っています。「Name」列の英字と数字をそれぞれ抜き出して新しい列を作成するため、正規表現ツールを使用します。
以下の通り設定します。
- 解析する列: 「Name」列
- 正規表現:
([a-zA-Z]*)_(\d*)
- 出力方法: 解析
データの持ち方変換
ここで処理が2つに分かれます。ここでは、クロスタブツールを使用して横持ちに変換します。この際、正規表現ツールで抜き出した数字を列名として設定します。
以下の通り設定します。集計方法には、今回は全ての文字列を出力するため、連結を選択しています。
- 列ヘッダーの変更: 元の列名の数字がある列
- 新しい列の値: 「Value」列
- 値の集計方法: 連結
- 区切り文字: , (カンマ)
列名の作成
もう一方の処理では、列名の作成を行います。クロスタブツールで英字の組み合わせを作成します。
以下の通り設定します。完成形の列名は「ABC_1」のようになるので、英字を続けて出力するよう区切り文字は空欄にしておきます。
- 列ヘッダーの変更: 元の列名の数字がある列
- 新しい列の値: 元の列名の英字がある列
- 値の集計方法: 連結
- 区切り文字: なし
再度、転置ツールを使ってデータを縦持ちに変換します。キー列には何も選択せず、データ列で全ての列を選択します。
縦持ちに変換したデータは「Name」列に「1」などの数字、「Value」列に「ABC」などの英字が入っています。2つの列を組み合わせて、フォーミュラツールで列名を完成させた新しい列を作成します。
列名の変更
ここまでで2つのデータを作成しました。
1つ目のデータ:
2つ目のデータ:
最後の仕上げとして、2つ目のデータを使って1つ目のデータの列名を変更します。列名の変更には、動的リネームツールを使用します。
設定内容は以下の通りです。1つ目のデータの列名が「1」「2」などになっており、2つ目のデータの「Name」列は「1」「2」などになっています。対応した列名を変更するように設定します。
- 名前の変更モード: 右入力(R)データの行からフィールド名を取得
- 列の古いフィールド名: 「Name」列
- 列の新しいフィールド名: 元の列名の列名がある列
これで目的のデータを作成できました。
さいごに
列名にある数字ごとにデータをまとめるワークフローをご紹介しました。