last update: 2004年11月26日

xtbseq.sh

概要:同一ブランドの連続購入シーケンスを作成する

書式:xtbseq.sh -c 顧客項目名 -d 日付項目名 -b ブランド項目名 -B 連続購入回数 [-u] [-A 選択する連続購入前の来店回数(default=0)] [-C 選択する連続購入後の来店回数(default=0)] [-iファイル] [-o出力ファイル名] [-T ワークディレクトリ名]
[-V] [-h]

-u : ブランドの連続購入をユニークな連続購入のみに限定する
-V : スクリプト内部のコマンド完了メッセージを表示させる。
-h : ヘルプの表示

説明

ある顧客が以下のような順序(左から右の順)でブランド"A","B","C"を購入していたとする。途中ブランドCを5回連続で購入しているが、このモジュールを利用すれば、このような同一ブランドの連続購入シーケンスを抜き出すことができる。

図1.ブランド購入シーケンス
A B B C C C C C A B A

選択条件

1)連続購入回数

同一ブランドを何回連続で購入したシーケンスを選択するかを"-B"パラメータで指定できる。"-B 5"とすれば、同一ブランドを5回以上連続購入したシーケンスを選択することになる。

2)同一日に異なるブランドが混入してよいかどうかの指定

以下に示すように、ブランドCを連続5回購入しているが、途中、同一日にブランドAも同時購入していた場合はブランドCを連続購入していると見なしたくなければ"-u"オプションを指定する。"-u"オプションの指定がなければ、このような他ブランドが混入していても連続購入と見なす。

図2.ブランド購入シーケンス
A B B C C C C C A B A
A

3)連続購入前後のシーケンスの選択

同一ブランドの連続購入の前後のシーケンスも選択したい場合、"-A"パラメータで連続購入前何回のシーケンスを抜き出すか指定できる。"-C"パラメータで連続購入後何回のシーケンスを抜き出すか指定できる。例えば図1の例で"-A 2 -C 1"と指定すれば、以下のようなシーケンスが抜き出される。

B B C C C C C A

入出力データの形式

このモジュールで扱う入力データには、顧客ID、日付、ブランドを表す項目が含まれている必要がある。それぞれの項目名は、"-c","-d","-b"のパラメータにて指定する。同一顧客同一日に同一ブランドが複数行含まれていてはいけない(動作不定)。3つの項目以外の項目が含まれていていれば、そのままの出力データに反映される。

入力データ コマンド 出力データ
顧客ID 日付 ブランド 数量 金額
A
A
A
A
A
A
A
A
A
A
A
20020101
20020103
20020105
20020107
20020110
20020111
20020115
20020118
20020120
20020121
20020125
A
B
B
C
C
C
C
C
A
B
A
1
2
1
1
2
1
1
1
1
1
2
650
1240
620
600
1200
600
600
600
630
620
1240
B
B
B
B
B
B
B
B
B
20020102
20020103
20020104
20020106
20020106
20020108
20020115
20020120
20020130
C
C
A
A
C
A
B
C
B
1
1
1
1
1
1
1
1
1
600
610
620
620
610
620
610
620
600
顧客Aは、ブランドCを5回連続購入
顧客Bは、ブランドAを3回連続購入
(途中ブランドCを購入しているが
ブランドAも同一日に購入している
ので、連続と見なされる)
xtbseq.sh -c 顧客ID -d 日付 -b ブランド -A 2 -B 3 -C 1
顧客ID targetBrand seqNo term 日付 ブランド 数量 金額
A
A
A
A
A
A
A
A
C
C
C
C
C
C
C
C
1
1
1
1
1
1
1
1
A
A
B
B
B
B
B
C
20020103
20020105
20020107
20020110
20020111
20020115
20020118
20020120
B
B
C
C
C
C
C
A
2
1
1
2
1
1
1
1
1240
620
600
1200
600
600
600
630
B
B
B
B
B
B
B
A
A
A
A
A
A
A
1
1
1
1
1
1
1
A
A
B
B
B
B
C
20020102
20020103
20020104
20020106
20020106
20020108
20020115
C
C
A
A
C
A
B
1
1
1
1
1
1
1
600
610
620
620
610
620
610

出力データでは、新たに"targetBrand", "seqNo", "term"の3項目が追加される。それぞれの意味は以下のとおり。
targetBrand: 連続購入のブランド
seqNo: 同一顧客同一targetBrandが複数ある場合、それらの識別番号
term:Aは連続購入以前のシーケンス、Bは連続購入シーケンス、Cは連続購入以降のシーケンスをそれぞれ表す。

同一顧客に複数の連続購入シーケンスがある例)

入力データ コマンド 出力データ
顧客ID 日付 ブランド 数量 金額
A
A
A
A
A
A
A
A
A
A
A
20020101
20020103
20020105
20020107
20020110
20020111
20020115
20020118
20020120
20020121
20020125
A
B
B
C
C
C
B
A
A
A
A
1
2
1
1
2
1
1
1
1
1
2
650
1240
620
600
1200
600
600
600
630
620
1240
顧客Aは、ブランドCを3回、
ブランドAを4回連続購入している。
xtbseq.sh -c 顧客ID -d 日付 -b ブランド -A 1 -B 3 -C 2
顧客ID targetBrand seqNo term 日付 ブランド 数量 金額
A
A
A
A
A
A
C
C
C
C
C
C
1
1
1
1
1
1
A
B
B
B
C
C
20020105
20020107
20020110
20020111
20020115
20020118
B
C
C
C
B
A
1
1
2
1
1
1
620
600
1200
600
600
600
A
A
A
A
A
A
A
A
A
A
1
1
1
1
1
A
B
B
B
B
20020115
20020118
20020120
20020121
20020125
B
A
A
A
A
1
1
1
1
2
600
600
630
620
1240
targetBrandがCの5,6行目と、targetBrandがAの1,2行目は
重複して出力されていることに注意。

例5)パイプで連結して

以下のようにパイプで連結して記述することも可能である。

#!/usr/bin/env bash

xtagg -k 顧客,日付,ブランド -f 数量,金額 -c sum -i input.xt |
xtbseq.sh -c 顧客 -d 日付 -b ブランド -B 4 -u |
xtcut -f 顧客,targetBrand,seqNo -o output.xt