2.2. msequence 多頻度系列パターンの列挙

多頻度系列パターンを列挙する。 内部的には、 Takeのコアメソッドlcmseq を用いている。

パラメータ

i= : 型=str , 必須

系列データファイル名を指定する。

O= : 型=str , 任意(default=./take_現在日付時刻)

出力ディレクトリ名を指定する。

x= : 型=str , 任意(default=階層分類を使わない)

taxonomyファイル名を指定する。
item 項目の値を対応するtaxonomyに変換して実行する。例えば、アイテムa,bのtaxonomyをX、c,dのtaxonomyをYとすると、
シーケンス aeadd は XeXYY に変換される。

tid= : 型=str , 任意(default=tid)

トランザクションID項目名(i=上の項目名)

time= : 型=str , 任意(default=time)

系列の順序関係を表す時間項目名を指定する。

item= : 型=str , 任意(default=item)

アイテム項目名(i=,t=上の項目名)

cls= : 型=str , 任意(default=class)

クラス項目名(c=上の項目名)

taxo= : 型=str , 条件付き必須(x=指定時)


s= : 型=float , 任意(default=0.05)

最小支持度(全トランザクション数に対する割合による指定)

S= : 型=int , 任意(default=1)

最小支持度(件数による指定)
s=,S=共に指定しなければ、s=0.05が指定されたことになる。
両方指定されれば、S=が優先される。

sx= : 型=float , 任意(default=1.0)

最大支持度(全トランザクション数に対する割合による指定)

Sx= : 型=bool , 任意(default=False)

最大支持度(件数による指定)
sx=,Sx=共に指定しなければ、sx=1.0が指定されたことになる。
両方指定されれば、Sx=が優先される。

l= : 型=int , 任意(default=制限なし)

パターンサイズの下限(1以上20以下の整数)

u= : 型=int , 任意(default=制限なし)

パターンサイズの上限(1以上20以下の整数)

p= : 型=float , 任意(default=0.5)

最小事後確率

g= : 型=float , 任意(default=制限なし)

最小増加率
p=,g=共に指定しなければ、p=0.5が指定されたことになる。
両方指定されれば、g=が優先される。

gap= : 型=int , 任意(default=0)

パターンのギャップ長の上限(0以上の整数)を指定する。
0を指定すれば制限なしとなる。

win= : 型=int , 任意(default=0)

パターンのウィンドウサイズの上限(0以上の整数)を指定する。
0を指定すれば制限なしとなる。

padding= : 型=bool , 任意(default=False)

時刻を整数とみなし、連続でない時刻に特殊なアイテムがあることを想定する。
gap=win= の指定に影響する。
パターンのウィンドウサイズの上限(0以上の整数)を指定する。

top= : 型=int , 任意(default=制限なし)

列挙するパターン数の上限を指定する。
例えばtop=10と指定すると、支持度が10番目高いパターンの支持度を最小支持度として頻出パターンを列挙する。
よって、同じ支持度のパターンが複数個ある場合は10個以上のパターンが列挙されるかもしれない。

T= : 型=str , 任意(default=/tmp)

ワークディレクトリを指定する。

利用例

入力データの準備

 1with open('dat1.csv','w') as f:
 2  f.write(
 3'''tid,time,item
 4T1,0,C
 5T1,2,B
 6T1,3,A
 7T1,7,C
 8T2,2,D
 9T2,3,A
10T2,5,B
11T2,6,C
12T3,1,C
13T3,2,B
14T3,4,D
15T3,8,E
16T4,2,A
17T4,5,C
18T4,6,B
19T5,0,B
20T5,1,A
21T5,2,D
22T5,3,D
23T5,7,C
24T5,9,C
25T6,0,A
26T6,5,B
27T6,6,D
28T6,8,B
29T6,9,C
30''')
31
32with open('dat2.csv','w') as f:
33  f.write(
34'''tid,time,item,class
35T1,0,C,cls1
36T1,2,B,cls1
37T1,3,A,cls1
38T1,7,C,cls1
39T2,2,D,cls1
40T2,3,A,cls1
41T2,5,B,cls1
42T2,6,C,cls1
43T3,1,C,cls1
44T3,2,B,cls1
45T3,4,D,cls1
46T3,8,E,cls1
47T4,2,A,cls1
48T4,5,C,cls1
49T4,6,B,cls1
50T5,0,B,cls2
51T5,1,A,cls2
52T5,2,D,cls2
53T5,3,D,cls2
54T5,7,C,cls2
55T5,9,C,cls2
56T6,0,A,cls2
57T6,5,B,cls2
58T6,6,D,cls2
59T6,8,B,cls2
60T6,9,C,cls2
61''')

基本例

出現頻度が3以上の長さが2の系列パターンのみを列挙する。

 1import nysol.take as nt
 2nt.msequence(O="result", i="dat1.csv", S=3, l=2, u=2).run()
 3### result/patterns.csv の内容
 4# pid,pattern,size,count,total,support%0nr
 5# 3,A C,2,5,6,0.8333333333
 6# 1,B C,2,4,6,0.6666666667
 7# 0,C B,2,3,6,0.5
 8# 2,B D,2,3,6,0.5
 9# 4,A B,2,3,6,0.5
10#  :
11### result/tid_pats.csv の内容
12# tid%0,pid%1
13# T1,0
14# T1,1
15# T1,3
16# T2,1
17# T2,3
18#  :

パターン長の制限

2件以上で出現する系列パターン。 入力データの項目名は、全てデフォルトのものと同じなので省略していることに注意する。

 1import nysol.take as nt
 2nt.msequence(O="result", i="dat1.csv", S=2).run()
 3### result/patterns.csv の内容
 4# pid,pattern,size,count,total,support%0nr
 5# 1,C,1,6,6,1
 6# 4,B,1,6,6,1
 7# 11,A C,2,5,6,0.8333333333
 8# 10,A,1,5,6,0.8333333333
 9# 16,D,1,4,6,0.6666666667
10#  :
11### result/tid_pats.csv の内容
12# tid%0,pid%1
13# T1,0
14# T1,1
15# T1,10
16# T1,11
17# T1,2
18#  :

gap長とwindowサイズの指定

出現頻度が2以上、長さが2以上の系列パターンのうち、gap長が2、windowサイズが4のパターンを列挙する。

 1import nysol.take as nt
 2nt.msequence(O="result", i="dat1.csv", S=2, l=2, gap=2, win=4).run()
 3### result/patterns.csv の内容
 4# pid,pattern,size,count,total,support%0nr
 5# 0,C B,2,3,6,0.5
 6# 2,B C,2,3,6,0.5
 7# 3,B D,2,3,6,0.5
 8# 4,A C,2,3,6,0.5
 9# 5,A B,2,3,6,0.5
10#  :
11### result/tid_pats.csv の内容
12# tid%0,pid%1
13# T1,0
14# T1,1
15# T1,2
16# T1,4
17# T2,2
18#  :

paddingにより時間を考慮する

前の例と同じ条件で、 padding オプションを指定することで、 時間を考慮したgap長とwindowサイズ制約により系列パターンを列挙する。

 1import nysol.take as nt
 2nt.msequence(O="result", i="dat1.csv", S=2, l=2, gap=2, win=4, padding=True).run()
 3### result/patterns.csv の内容
 4# pid,pattern,size,count,total,support%0nr
 5# 0,C B,2,3,6,0.5
 6# 3,B D,2,3,6,0.5
 7# 1,B A,2,2,6,0.3333333333
 8# 2,B C,2,2,6,0.3333333333
 9### result/tid_pats.csv の内容
10# tid%0,pid%1
11# T1,0
12# T1,1
13# T2,2
14# T3,0
15# T3,3
16#  :

顕在系列パターンの列挙

最初の例と同じ条件で、クラス項目を指定することで顕在パターンを列挙する。

 1import nysol.take as nt
 2nt.msequence(O="result", i="dat2.csv", S=2, cls="class", padding=True).run()
 3### result/patterns.csv の内容
 4# class%0nr,pid,pattern,size,pos%2nr,neg,posTotal,negTotal,total,support,growthRate,postProb%1nr
 5# cls1,1,B C,2,3,0,4,2,6,0.75,inf,1
 6# cls2,10,A D,2,2,0,2,4,6,1,inf,1
 7# cls2,9,B C D,3,2,0,2,4,6,1,inf,1
 8# cls2,11,A C D,3,2,0,2,4,6,1,inf,1
 9# cls1,0,C,1,4,2,4,2,6,1,1,0.6666666667
10#  :
11### result/tid_pats.csv の内容
12# tid%0,class%1,pid%2
13# T1,cls1,0
14# T1,cls1,1
15# T1,cls1,2
16# T1,cls1,3
17# T1,cls1,4
18#  :

関連メソッド