Alteryxで行と列を入れ替える

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

こんにちは、小澤です。

Alteryxで扱うデータはRDBのテーブルのような形式になっています。 列ごとに型が異なるという性質から単純に転置を行うようなツールは用意されていません。

今回は、それを実現するワークフローを作成してみたいと思います。

行と列の入れ替えとは

行と列の入れ替えでは、行列の転置のような操作をします。 元のデータで1行目のデータは1列目のデータとなり、2行目のデータは2列目のデータとなり...というような形式になります。

例えば、以下のようなデータがあるとします。

このデータでは、ユーザごとに商品に対する5段階評価を行なったようなものになっています(欠損値となっている部分は未評価の商品)。 これに対して、商品ごとの評価にデータを変換したいとします。

Alteryxで実現する

この操作をAlteryxで実現するワークフローをみてみましょう。

やってることはTransposeしてCross Tabするのみです。 この2つはそれぞれ縦持ち横持ちを変換するツールなので、これだけみると元に戻ってそうですねw

では、まずTransposeの設定をみてみましょう。

Key FeildsにはUserのみ、それ以外はData Fieldsに設定しています。 これによって、以下のように縦持ち形式のデータが生成されます。

さて、すでに感づかれた方もいるかもしれませんが、続いてのCross Tabでは横持ちに変換する列をここでのNameにしています。

以下のように行列が入れ替わったデータが無事取得できました。

最後のSelectツールでは、表品一覧の列名をItemに変換してるのみです。

マクロ化してしまう

せっかくなんで、マクロにしちゃいましょうw

まずは、最初のText Inputで 右クリック > Convert to Macro Input とします。

その次に一番最後にMacro Outputを接続します。 この段階で以下のようなワークフローになりました。

続いて、行列の入れ替え部分のインターフェースを設定します。

まずは、Drop Downで列の一覧を受け取ります。 これは、行から列への返還対象となるデータがどの列にあるのかを指定します。

TransposeにつながるActionツールでは、以下の指定をしています。

  • Select an action type : Update Value
  • Value or Attribute to Update : Transpose > KeyFields > Field > @filed - value="User"

また、Transposeツールの設定にて、Data Fieldsに"Dynamic or Unknown Fields"にチェックが入っている状態にしておきます。

これは何をしているかというと、"マクロ作成時に存在していない未知の列を対象に含める"というものになります。 マクロ化に際しては、データが入力されるまで行方向に持って行く列にどのようなものが入ってくるかわかりません。 そのため、これにチェックを入れておくことでどんな列が入ってきても対応できるようにしています。

同一のDrop DownからCross Tabの方に接続したActionツールも設定は対象となる項目が異なる以外はほぼ同じ設定になります。

  • Select an action type : Update Value
  • Value or Attribute to Update : Cross Tab > HeaderField > @field - value="User"

続いてSelectツールで行列入れ替え後の列名を設定する部分は以下のようにしています。

Text Boxにて、変換後の列名を入力します。 入力された値を使って、ActionツールでSelectツールの値を置き換えています。

Actionツールの設定は以下のようになっています。

  • Select an action type : Update Value (Default)
  • Value or Attribute to Update : Select > SelectFields > SelectField[@field='Name'] > @rename - value="Item"

マクロを使ってみる

このマクロを利用するための簡単なワークフローを作成します。

入力は、先ほど行列を入れ方結果のデータを利用し、入れ替えたものを元に戻すことで動作確認します。

ツールの設定は以下のようにしています(設定画面に表示される項目はインターフェールツールの設定から変更しています)。

列方向に入れ替えるのはItem列、入れ替わった結果の行方向はUserとします。

このワークフローを実行した結果は以下のようになります。

順番は変わっていますが、データとしては元に戻っているのが確認できます。

おわりに

今回はAlteryxで行と列を入れ替える方法を解説しのち、それをマクロ化してみました。 マクロ化したので、需要があればGalleryに公開しようかとも考えてますが、その場合はだれかアイコンの絵を書いてくださいw

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

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

alteryx_960x400