Alteryxで列名にある数字ごとにデータをまとめる

2021.05.06

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

こんにちは、スズです。

今回は、列名にある数字ごとにデータをまとめるワークフローをご紹介します。具体的には、以下のように「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

ワークフローの概要

作成するワークフローの全体像はこちら。

ワークフローの概要は以下の通りです。

  1. 転置ツールで縦持ちに変換
  2. 正規表現ツールで英字と数字を抜き出す
  3. データの持ち方の変換と列名の作成
    1. クロスタブツールで横持ちに変換
    2. クロスタブツール、転置ツール、フォーミュラツールで列名の作成
  4. 動的リネームツールで列名の修正

ワークフローの詳細

列名の英字と数字の分解

ここからはワークフローの詳細をみていきます。データはテキスト入力ツールで用意しました。

転置ツールを使ってデータを縦持ちに変換します。キー列には何も選択せず、データ列で全ての列を選択します。

縦持ちに変換したデータは「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」列
  • 列の新しいフィールド名: 元の列名の列名がある列

これで目的のデータを作成できました。

さいごに

列名にある数字ごとにデータをまとめるワークフローをご紹介しました。