「再構成」ノードと「データ型」ノード

~縦持ちデータを横持ちデータに変換する方法~

 

縦持ちデータと横持ちデータについて

下記のように、各ユーザーIDがどの商品を買ったかを示すデータがあるとします。(sale.csv)

 

このテーブルを次のように変換する方法についてご説明します。

変換後のテーブルでは、ユーザーごとに、各商品を買っていれば1、買っていなければ0のフラグ変数を作成しています。

 


元のテーブルのように、同じユーザーIDが何度も出現するデータを「縦持ちデータ」と呼びます。

一方で、変換後のように、各ユーザーIDが重複しない代わりに、商品ごとの変数が横に並んでいるデータを「横持ちデータ」呼びます。

データマイニングの現場では、販売履歴データ(POS)やアクセスログデータなど、膨大な履歴データが縦持ちで蓄積されていることが多いです。

これをユーザーごとの横持ちのデータに変換してから分析を行うということがよくあります。

 

作成するストリーム

今回は次のようなストリームを作成します。

「データ型」ノードで前処理

「データ型」ノードは、それを挿入した箇所のデータの情報を読み込んだり指定したりして、それより下流のノードでその情報を利用するために使います。

「再構成」ノードや各種モデル作成ノードを使用する前には、その上流側に「データ型」ノードが必要になります。

読み込んだり設定したりする情報には、

・変数がどんな種類なのか?(文字列データ、数値データなど)

・モデル作成時に説明変数にするのか被説明変数にするのか

など、様々なものがあります。

今回の「再構成」ノードのように「データ型」ノードを必要とするノードを下流で使用する場合は、

あらかじめ「値の読み込み」ボタンをクリックし、Modelerにデータを読み込ませる必要があります。

 

<値の読み込み前>

 

<値の読み込み後>

  

「データ型」ノードより上流側でデータの加工を進めたり、CSVファイルの中身を変えたりした場合、「データ型」ノードの情報と実際の情報が一致しなくなることがあります。

それによりModeler上で、想定しない処理がなされてしまうことがあります。

しかもこの場合、「データ型」ノードは、一見、何の不具合も起こしていないように見えてしまうという問題があり、様々なバグにつながりかねない危険性をはらんでいます。

そのため、「データ型」ノードよりも上流側でデータに変更があった場合は、かならずデータ型ノードの「値の消去」などを行ってリフレッシュする必要があります。

 

 

「再構成」ノードで商品ごとの変数を追加

縦持ちから横持ちへの変換をする際に、コアになるのがこのノードです。

 

再構成ノードの前には必ず「データ型」ノードが必要になるので注意してください。


ここでは「利用可能なフィールド」で「item」変数を選択しています。「item」変数を選択すると、先ほどの「データ型」ノードにより、「item」変数には「A

」、「B」、「C」の3つの商品カテゴリが存在することが分かっているので、これらが「利用可能な値」の欄に表示されます。

これらを「再構成フィールドの作成」の欄に入力すると「item_A」、「item_B」、「item_C」という各商品の購買有無を表す3つの変数が作成されます。

この時点でプレビューボタンを押すと下のようになります。

 

ID」、「item」の変数は元のデータから変更がありません。それらに加えて、新しく3つの変数「item_A」、「item_B」、「item_C」が追加されていることが分かります。

 

 

 

 

「レコード集計」ノードでユーザーIDごとに集約

 

「再構成」ノードで作成したデータを、1ユーザー1行に集約するために「レコード集計」ノードを使います。

 

ここでは、キーフィールドに「ID」を指定します。これにより、1ユーザー1行にデータが集約されます。

その際に、どのような集計を行うかを指定するのが、「集計フィールド」の欄です。

ここでは、「item_A」、「item_B」、「item_C」の最大値を、各ユーザーIDごとに算出しています。

これにより、各商品を買っていれば1、買っていなければ0となる変数が作成されます。

ちなみに、各商品ごとの購買数が必要な場合には、「最大」ではなく「合計」を選択します。

 

 

「ソート」ノードで整形

 

 このようにすることで、データの並び順を整えることができます。

 

以上により、下のような横持ちのテーブルを作成することができます。