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では以下のような感じになります。
入力のデータ1, データ2はInput Data Toolで読み込んでおりそれぞれ上記で示したのと同じ以下のデータを渡しています。
Union Toolで結合した結果は以下のようになっています。
Union Toolの設定は以下のようになります。
「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を利用します。
各入力とJoinの結果は以下のようになります。
Join Toolの設定は以下のようになります。
「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は以下のようになります。
入力データ及び、Join, Union Toolの使い方はここまでで解説してきたのと同様です。 このフローでJoin Toolの出力の「L」は内部結合では結びつかなかった左側のテーブルのデータが含まれているので、それと内部結合したデータをUnionで結合しています。
- 内部結合の結果
- 左側のみに存在するデータ
- Unionしたデータ(左外部結合)
右外部結合や完全外部結合も同様にJoinとUnionを併用することで実現できます。
終わりに
今回はAlteryxで各種結合を実現する方法を解説しました。 Alteryxでは今回のように、単体のToolとしは存在していないが、いくつかのToolの結果を組み合わせることで実現できるというパターンが良くあります。 慣れるまでは目的の結果を実現するまでにどのように組み合わせていけばいいか難しいこともあるかもしれませんが、 このようなやり方を理解しておくことでより応用的な使い方も可能になります。