2.1. mitemset アイテム集合列挙

多頻度アイテム集合を列挙する。 列挙のアルゴリズムにはlcmを用いている。 以下のような特徴を持っている。

  • 分類階層を扱うことが可能

  • 頻出パターン, 飽和頻出パターン, 極大頻出パターンの3種類のパターンを列挙可能

  • 分類クラスを指定することで、上記3パターンに関する顕在パターン(emerging patterns)を列挙可能

パラメータ

i= : 型=str , 必須

アイテム集合データベースファイル名を指定する。

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

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

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

taxonomyファイル名を指定する。
x=が指定されたとき、itemに対応するtaxonomyをトランザクションに追加して実行する。
例えば、アイテムa,bのtaxonomyをX、c,dのtaxonomyをYとすると、あるトランザクションabdはabdXYとなる。
ただしreplaceTaxoオプションが指定されると、taxonomyは追加ではなく置換して実行する。
前例ではトランザクションabdはXYに置換される。

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

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

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

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

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

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

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


type= : 型=str , 任意(default=F)

抽出するパターンの型(F,C,M)を指定する。
F:頻出集合, C:飽和集合, M:極大集合

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=が優先される。

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

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

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

taxonomyを置換する。

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

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

利用例

入力データの準備

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

基本例

3件以上で出現する頻出アイテム集合を列挙する。

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

アイテム集合のサイズに制限を加えた例

出現頻度が3以上で、アイテム集合のサイズ3のパターンを列挙する。

1import nysol.take as nt
2nt.mitemset(S=3,l=3,u=3,tid="tid",item="item",i="dat1.csv",O="result").run()
3### result/patterns.csv の内容
4# pid,size,count,total,support%0nr,lift,pattern
5# 0,3,3,6,0.5,1.35,B D F
6# 1,3,3,6,0.5,1.8,A B D

飽和集合の列挙例

 1import nysol.take as nt
 2nt.mitemset(S=3,type="C",tid="tid",item="item",i="dat1.csv",O="result").run()
 3### result/patterns.csv の内容
 4# pid,size,count,total,support%0nr,lift,pattern
 5# 1,1,5,6,0.8333333333,1,D
 6# 2,2,4,6,0.6666666667,1.2,B D
 7# 3,1,4,6,0.6666666667,1,E
 8# 5,2,4,6,0.6666666667,1.2,D F
 9# 4,2,3,6,0.5,0.9,D E
10#  :

極大集合の列挙例

1import nysol.take as nt
2nt.mitemset(S=3,type="M",tid="tid",item="item",i="dat1.csv",O="result").run()
3### result/patterns.csv の内容
4# pid,size,count,total,support%0nr,lift,pattern
5# 0,2,3,6,0.5,0.9,D E
6# 1,3,3,6,0.5,1.35,B D F
7# 2,3,3,6,0.5,1.8,A B D

アイテムの階層分類を使った例

 1import nysol.take as nt
 2nt.mitemset(S=4,tid="tid",item="item",i="dat1.csv",x="taxo.csv",taxo="taxonomy",O="result").run()
 3### result/patterns.csv の内容
 4# pid,size,count,total,support%0nr,lift,pattern
 5# 1,1,6,6,1,1,Z
 6# 2,1,5,6,0.8333333333,1,D
 7# 19,2,4,6,0.6666666667,1.2,D X
 8# 13,2,4,6,0.6666666667,1,B Z
 9# 14,1,4,6,0.6666666667,1,X
10#  :

オリジナルアイテムを階層分類で置換する例

1import nysol.take as nt
2nt.mitemset(S=4,tid="tid",item="item",i="dat1.csv",x="taxo.csv",taxo="taxonomy",replaceTaxo=True,O="result").run()
3### result/patterns.csv の内容
4# pid,size,count,total,support%0nr,lift,pattern
5# 1,1,6,6,1,1,Z
6# 2,1,4,6,0.6666666667,1,X
7# 3,2,4,6,0.6666666667,1,X Z

顕在パターンの列挙例

 1import nysol.take as nt
 2nt.mitemset(S=2,tid="tid",item="item",cls="class",i="dat2.csv",p=0.6,O="result").run()
 3### result/patterns.csv の内容
 4# class%0nr,pid,pattern,size,pos%2nr,neg,posTotal,negTotal,total,support,growthRate,postProb%1nr
 5# cls2,18,B D E,3,2,0,2,4,6,1,inf,1
 6# cls2,14,B E,2,2,0,2,4,6,1,inf,1
 7# cls2,13,A E,2,2,0,2,4,6,1,inf,1
 8# cls2,17,A D E,3,2,0,2,4,6,1,inf,1
 9# cls2,15,A B E,3,2,0,2,4,6,1,inf,1
10#  :

関連メソッド