トランザクションや実績等のデータにマスタのデータをフィールドとして追加する

こんにちは！IBMでSPSS ModelerのTechnical Salesをしている斉藤です。

トランザクションテーブルのデータなどからマスタのデータを参照したい時があります。

しかし双方のデータに結合キーがなく、トランザクションデータのフィールド名がマスタでは値の場合、参照が少々厄介です。
例

<img width="600px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435996/53e504c1-070e-d418-c82b-91edafb19f6d.png">


今日はトランザクションデータにマスタのデータをフィールドとして追加する方法をご紹介します。（その後割合まで計算します。）


## シナリオ1 フルーツの割合を調べる

全国展開の喫茶店があります。

店舗A～Eは季節ごとに自由にフルーツポンチのフルーツの構成を決めることができます。本店はこの度、レシピを統一すべく、各店舗のフルーツの構成を確認することにしました。

確認したい内容
・フルーツの生、シロップ漬けのバランス
・フルーツの味（酸味と甘み）のバランス
・フルーツのカッティング（カット無し、サイの目）のバランス


データ
・[使用率.csv（トランザクションデータ）](https://github.com/AsukaSaito0222/qiita/blob/main/%E4%BD%BF%E7%94%A8%E7%8E%87.csv)
・[加工マスタ.csv（マスタデータ）](https://github.com/AsukaSaito0222/qiita/blob/main/%E5%8A%A0%E5%B7%A5%E3%83%9E%E3%82%B9%E3%82%BF.csv)


## ストリーム解説
[・ストリーム](https://github.com/AsukaSaito0222/qiita/blob/main/Qiita_%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AB%E3%83%9E%E3%82%B9%E3%82%BF%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%A8%E3%81%97%E3%81%A6%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B.str)

使用率.csvには、フルーツの味、加工などの情報が含まれていません。今回はどのようなフルーツでフルーツポンチを構成しているか割合を調べたいので、使用率と加工マスタを結合します。


使用率.csvは店舗がキーになっており、フルーツの名称がフィールドになっているため、このままだとデータの結合が難しい状態です。そこで、「行列入替」ノードを使います。

1\. csvをそれぞれ読み込み、行列入替ノードを配置します。使用率.csvを行列入替ノードに接続します。行列入替ノードの行列入替方法は「フィールドからレコードへ」を選択します。
<img width="600px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435996/26e5d934-73a4-0d2b-94d2-92e949ad989f.png">

行列入替された結果をテーブルノードで見てみると以下のようにvariableフィールドにフルーツ名が配置されています。
<img width="200px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435996/782774a2-9759-943c-eed7-7d611fdacae4.png">

2\. 使用率.csvと加工マスタ.csvを接続する
レコード結合ノードを配置し、行列入替した使用率のデータと加工マスタ.csvを接続します。レコード結合方法を「条件」にして「variable =フルーツ」と記載します。これで使用率.csvのレコードに、加工マスタ.csvの情報が結合されます。
<img width="600px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435996/927058f9-b6e6-c44e-7354-271f6be4bf72.png">

<img width="300px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435996/cf9afbc2-d7d5-ca40-bd5b-b7a714671a8b.png">

3\. 加工の構成割合を確認する
レコード集計ノードを配置し、レコード結合と接続します。レコード集計ノードのキーフィールドは「店舗」と「加工」を選択します。集計フィールド「value」は「合計」を選択します。

<img width="600px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435996/1d810c42-382c-650d-49b0-863c6f497282.png">

この段階で中身を確認してみると以下のように加工（生、シロップ）の割合を確認できます。

<img width="270px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435996/e0db3321-823e-32fd-be02-edf5f158878f.png">

ただこれだと見にくいので、店舗ごと1レコードにしたいと思います。これも行列入替ノードを使います。索引に「店舗」、フィールドに「加工」、値にレコード集計の集計結果をセットします。

<img width="600px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435996/4c2e81f3-07e5-f465-8f74-60ec0e6919b7.png">

このように加工（生、シロップ）の割合を1レコードに表現することができました。

<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435996/ab698298-e9ee-6be0-f305-686efeca3adb.png">

加工の他に味やカッティングも同様の方法で割合を求め、1レコードに表現することができます。

![stream.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435996/d18eb278-a91f-9f5a-508c-bf61b9c13279.png)

以上「トランザクションデータにマスタのデータをフィールドとして追加する」でした。