Alteryxで各種結合をする

alteryx

こんにちは、小澤です。

今回はAlteryxでのJoinの話をしたいと思います。

結合の種類と実現方法

複数のデータを合体させる際に複数のパターンがあります。 まずは、この結合のパターンを解説します。

Union

まずは縦方向にデータを結合するUnionです。 以下の2つのようなデータがあるとします

  • データ1
名前 年齢 性別
Aさん 10代
Bさん 20代
Cさん 30代
  • データ2
名前 年齢 性別
Dさん 40代
Eさん 50代
Fさん 60代

2回にわたり、何らかのアンケートをとって、それぞれ別々に集計したものを全体で1つにまとめたい場合などを想像してください。 この2つのデータをUnionで縦方向に結合すると以下のようになります。

名前 年齢 性別
Aさん 10代
Bさん 20代
Cさん 30代
Dさん 40代
Eさん 50代
Fさん 60代

Alteryxでは以下のような感じになります。

スクリーンショット 2017-04-03 15.53.09

入力のデータ1, データ2はInput Data Toolで読み込んでおりそれぞれ上記で示したのと同じ以下のデータを渡しています。

スクリーンショット 2017-04-03 15.53.21

スクリーンショット 2017-04-03 15.53.34

Union Toolで結合した結果は以下のようになっています。

スクリーンショット 2017-04-03 15.53.49

Union Toolの設定は以下のようになります。

スクリーンショット 2017-04-03 16.17.57

「Auto Config by Name」とある部分で結合のしかたを指定しています。

  • Auto Config by Name : 同一の名前のカラム同士を対象にする
  • Auto Config by Position : 列の順番を合わせて結合する
  • Manually Configure Fields : どのカラムとどのカラムが同一のものかを手動で指定する

となります。

「When Fields Differ」で、2つのテーブルで列数や列名に異なるものが存在する場合の挙動を指定します。

「Output Order」で結合する時の並び順を指定します。

内部結合

次にJoinの説明をします。Joinはテーブルを横方向に結合します。

以下のような2つのテーブルがあるとします。

名前 年齢 性別
Aさん 10代
Bさん 20代
Cさん 30代
名前 犬派・猫派 満腹度
Aさん 80
Bさん 15
Cさん 120

この各人に対する情報を1つのテーブルとしてまとめると、以下のようになります。

名前 年齢 性別  犬派・猫派 満腹度
Aさん 10代  猫 80
Bさん 20代  犬 15
Cさん 30代  猫 120

データソースがRDBの場合テーブルが正規化されていたり、複数のデータソースを利用する場合などは、 このようにJoinを利用することで1つのユーザに対する一通りの情報をまとめたものを作成できます。

さて、ここで以下のようなデータを考えてみます

  • データ1
名前 年齢 性別
Aさん 10代
Bさん 20代
Cさん 30代
  • データ2
名前 犬派・猫派 満腹度
Bさん  犬 15
Cさん  猫 120
Dさん  猫 50

このデータではAさんはデータ1のみ、Dさんはデータ2のみに存在します。 内部結合の場合、両方にキーとなる値が存在するもののみを残します。 上記のデータだと、以下のように結合されます。

名前 年齢 性別  犬派・猫派 満腹度
Bさん 20代  犬 15
Cさん 30代  猫 120

どちらのデータにも共通するBさん、Cさんの情報のみが残っています。

Alteryxで内部結合をするにはJoin Toolを利用します。

スクリーンショット 2017-04-03 17.06.50

各入力とJoinの結果は以下のようになります。

スクリーンショット 2017-04-03 17.07.41

スクリーンショット 2017-04-03 17.07.55

スクリーンショット 2017-04-03 17.08.20

Join Toolの設定は以下のようになります。

スクリーンショット 2017-04-03 17.10.29

「Join by Specific Fields」で結合の際にキーとなら列を指定しています。 今回の場合、データ1, データ2双方で名前が結合のキーとなるため、それを指定しています。 ここでのLeft, RightとはJoin Toolの入力部分にある「L」と「R」を表してします。 Alteryx上のToolでは上下に並んでいますが、テーブルの結合は左右に並ぶ状態になるため、それぞれ左側, 右側と表現しています。

その下のベン図のようなものは3種類の出力を表しています。

  • 「L」は左側のテーブルのみに存在する項目。今回であればAさんのレコード
  • 「J」は内部結合の結果
  • 「R」は右側のテーブルのみに存在する項目。今回であればDさんのレコード

一番下の各カラムが表示されている部分ではSelect Toolと同様の操作ができます。 必要な列を絞り込んだり、名前を変えたり、順番を変えたりできます。

外部結合

外部結合、どちらか片方にのみキーの値が含まれる場合に、Join後の結果にもそれを含むためのものになります。 外部結合は3種類に分かれます。左外部結合、右外部結合、完全外部結合となります。

左外部結合では、左側のテーブルのデータをそのまま残します。 上記のデータですと、

名前 年齢 性別  犬派・猫派 満腹度
Aさん 10代
Bさん 20代  犬 15
Cさん 30代  猫 120

という結果になります。 Aさんの情報がデータ1にしかないのでデータ2の右側のテーブルの部分はnullになっています。

右外部結合は逆に右側のテーブルのデータがそのまま残ります。

名前 年齢 性別  犬派・猫派 満腹度
Bさん 20代  犬 15
Cさん 30代  猫 120
Dさん  猫 50

完全外部結合は両方を残します。

名前 年齢 性別  犬派・猫派 満腹度
Aさん 10代
Bさん 20代  犬 15
Cさん 30代  猫 120
Dさん  猫 50

Alteryxではこの外部結合を行う単体のToolはありません。 そのため、Join ToolとUnion Toolを組み合わせることで実現可能です。

ここでは左側外部結合を例にします。 Workflowは以下のようになります。

スクリーンショット 2017-04-03 17.40.21

入力データ及び、Join, Union Toolの使い方はここまでで解説してきたのと同様です。 このフローでJoin Toolの出力の「L」は内部結合では結びつかなかった左側のテーブルのデータが含まれているので、それと内部結合したデータをUnionで結合しています。

  • 内部結合の結果

スクリーンショット 2017-04-03 18.12.35

  • 左側のみに存在するデータ

スクリーンショット 2017-04-03 18.12.47

  • Unionしたデータ(左外部結合)

スクリーンショット 2017-04-03 18.12.59

右外部結合や完全外部結合も同様にJoinとUnionを併用することで実現できます。

終わりに

今回はAlteryxで各種結合を実現する方法を解説しました。 Alteryxでは今回のように、単体のToolとしは存在していないが、いくつかのToolの結果を組み合わせることで実現できるというパターンが良くあります。 慣れるまでは目的の結果を実現するまでにどのように組み合わせていけばいいか難しいこともあるかもしれませんが、 このようなやり方を理解しておくことでより応用的な使い方も可能になります。