dataprepを利用して以下のようなカラムを追加したいと考え、
ウィンドウ機能を利用したのですが、データの仕組み上問題があります。
*元のカラム
・ユーザID
・日付(yyyy/mm/dd)
・購入金額
*追加したいカラム
・その日付行から30日前までの購入金額の和
*アイデア
・ウィンドウを利用して、以下を実施
計算:SUM
元の列:購入金額
ウィンドウのグループ化:ユーザID
ウィンドウのソート基準:日付(昇順)
開始位置:行の指定(オフセット値:30)
終了位置:行の指定(オフセット値:-1)
*問題点
日付からむは、購入日分しか存在しないためオフセット値を30にしたとしても日付30日分のSUMにはならない
何か他の方法で処理するアイデアはありますでしょうか?
解決済! 解決策の投稿を見る。
ユーザID×日付 のマスタを作成してから集計するという方法があります。
(あまりスマートな解決方法ではありませんので、他の解決方法があるからいらっしゃいましたら、ぜひご意見頂ければ幸いです。)
■最終的なデータレイアウト
ユーザID | 日付 | 購入金額 | 30日前までの購入金額の和 |
… | |||
User_1 | 2021/01/02 | 840 | (User_1の 2020/12/3-2021/1/2 までのΣ購入金額) |
… | |||
User_7 | 2021/01/26 | 380 | (User_7の 2020/12/27-2021/1/26 までのΣ購入金額) |
■事前準備
1. ユーザIDマスタ.csv を作成しておく
(集計されたユーザIDが一覧にされた1列のcsvファイル)
2. 日付マスタ.csv を事前に作成しておく
(該当日付(例 : 2021/01/01 - 2021/03/31)が一覧された1列のcsvファイル)
■ステップ
日付マスタ.csv から開始
「結合」ツールでユーザIDマスタ.csvと外積結合し、ユーザID × 日付 の全量マスターを作成する。
「ルックアップ」ツールを使って元データと結合
k-kishibe様と同じ方法で集計行を作成(日付は 降順ソート)
不要な行や列を削除して完成
■注意点
ユーザID × 日付 の外積を計算させるので、行数が爆発的に増えます。
例えば ユーザID : 100万、日付 : 1年(365日) だとすると 100万×365日 = 3.65億行 となってしまい、Data Prepのパフォーマンスに大きな影響が生じる可能性があります。
ご契約頂いているData Prepのサイズで処理可能な行数(*)に収まるように、ユーザIDを複数のプロジェクトで分割して処理することをお勧めします。
(*)処理可能な行数は、契約型番PAX-n の場合、 約 n百万行 となります。
例) ご契約が PAX-32 の場合、処理可能な行数は 約 3200万行
YUsukeHasegawaさん
ご回答ありがとうございます。
やはり現状Dataprepで成形するには日付データを増やして整える案がよいでしょうか。
データが爆発的に増えてしまうという部分は考慮しておりませんでした。ありがとうございます。
それ以外で、私が日付データを整えるのを避けたかった理由があります。
それは予測時に日付マスターを用意しないといけないというポイントです。
こちらを自動で生成して読み込む仕組みを用意できればよいですが、現状いい案が思いついていない状況です。
後はアイデアとしては何かしらの方法で行数ではなく日付でフィルタをかけて集計するようなことができれば、と考えたのですが調べた限りなさそうでした。
(例)現在の行の日付より小さい & (現在の行の日付-30)より大きい
に該当する行のSUM(購入金額)