nysol-take 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/mbiclique.rb +317 -0
- data/bin/mbipolish.rb +362 -0
- data/bin/mccomp.rb +235 -0
- data/bin/mclique.rb +295 -0
- data/bin/mclique2g.rb +105 -0
- data/bin/mcliqueInfo.rb +203 -0
- data/bin/mfriends.rb +202 -0
- data/bin/mgdiff.rb +252 -0
- data/bin/mhifriend.rb +456 -0
- data/bin/mhipolish.rb +465 -0
- data/bin/mitemset.rb +168 -0
- data/bin/mpal.rb +410 -0
- data/bin/mpolishing.rb +399 -0
- data/bin/msequence.rb +165 -0
- data/bin/mtra2g.rb +476 -0
- data/bin/mtra2gc.rb +360 -0
- data/ext/grhfilrun/extconf.rb +12 -0
- data/ext/grhfilrun/grhfilrun.c +85 -0
- data/ext/grhfilrun/src/_sspc.c +358 -0
- data/ext/grhfilrun/src/aheap.c +545 -0
- data/ext/grhfilrun/src/aheap.h +251 -0
- data/ext/grhfilrun/src/base.c +92 -0
- data/ext/grhfilrun/src/base.h +59 -0
- data/ext/grhfilrun/src/fstar.c +497 -0
- data/ext/grhfilrun/src/fstar.h +80 -0
- data/ext/grhfilrun/src/grhfil.c +214 -0
- data/ext/grhfilrun/src/itemset.c +713 -0
- data/ext/grhfilrun/src/itemset.h +170 -0
- data/ext/grhfilrun/src/problem.c +415 -0
- data/ext/grhfilrun/src/problem.h +179 -0
- data/ext/grhfilrun/src/queue.c +533 -0
- data/ext/grhfilrun/src/queue.h +182 -0
- data/ext/grhfilrun/src/sample.c +19 -0
- data/ext/grhfilrun/src/sspc.c +597 -0
- data/ext/grhfilrun/src/sspc2.c +491 -0
- data/ext/grhfilrun/src/stdlib2.c +1482 -0
- data/ext/grhfilrun/src/stdlib2.h +892 -0
- data/ext/grhfilrun/src/trsact.c +817 -0
- data/ext/grhfilrun/src/trsact.h +160 -0
- data/ext/grhfilrun/src/vec.c +745 -0
- data/ext/grhfilrun/src/vec.h +172 -0
- data/ext/lcmrun/extconf.rb +20 -0
- data/ext/lcmrun/lcmrun.cpp +99 -0
- data/ext/lcmrun/src/aheap.c +216 -0
- data/ext/lcmrun/src/aheap.h +111 -0
- data/ext/lcmrun/src/base.c +92 -0
- data/ext/lcmrun/src/base.h +59 -0
- data/ext/lcmrun/src/itemset.c +496 -0
- data/ext/lcmrun/src/itemset.h +157 -0
- data/ext/lcmrun/src/lcm.c +427 -0
- data/ext/lcmrun/src/problem.c +349 -0
- data/ext/lcmrun/src/problem.h +177 -0
- data/ext/lcmrun/src/queue.c +528 -0
- data/ext/lcmrun/src/queue.h +176 -0
- data/ext/lcmrun/src/sgraph.c +359 -0
- data/ext/lcmrun/src/sgraph.h +173 -0
- data/ext/lcmrun/src/stdlib2.c +1282 -0
- data/ext/lcmrun/src/stdlib2.h +823 -0
- data/ext/lcmrun/src/trsact.c +747 -0
- data/ext/lcmrun/src/trsact.h +159 -0
- data/ext/lcmrun/src/vec.c +731 -0
- data/ext/lcmrun/src/vec.h +171 -0
- data/ext/lcmseq0run/extconf.rb +20 -0
- data/ext/lcmseq0run/lcmseq0run.cpp +59 -0
- data/ext/lcmseq0run/src/aheap.c +216 -0
- data/ext/lcmseq0run/src/aheap.h +111 -0
- data/ext/lcmseq0run/src/base.c +92 -0
- data/ext/lcmseq0run/src/base.h +59 -0
- data/ext/lcmseq0run/src/itemset.c +518 -0
- data/ext/lcmseq0run/src/itemset.h +157 -0
- data/ext/lcmseq0run/src/itemset_zero.c +522 -0
- data/ext/lcmseq0run/src/lcm_seq.c +446 -0
- data/ext/lcmseq0run/src/lcm_seq_zero.c +446 -0
- data/ext/lcmseq0run/src/problem.c +439 -0
- data/ext/lcmseq0run/src/problem.h +179 -0
- data/ext/lcmseq0run/src/problem_zero.c +439 -0
- data/ext/lcmseq0run/src/queue.c +533 -0
- data/ext/lcmseq0run/src/queue.h +182 -0
- data/ext/lcmseq0run/src/stdlib2.c +1350 -0
- data/ext/lcmseq0run/src/stdlib2.h +864 -0
- data/ext/lcmseq0run/src/trsact.c +747 -0
- data/ext/lcmseq0run/src/trsact.h +159 -0
- data/ext/lcmseq0run/src/vec.c +779 -0
- data/ext/lcmseq0run/src/vec.h +172 -0
- data/ext/lcmseqrun/extconf.rb +20 -0
- data/ext/lcmseqrun/lcmseqrun.cpp +101 -0
- data/ext/lcmseqrun/src/aheap.c +216 -0
- data/ext/lcmseqrun/src/aheap.h +111 -0
- data/ext/lcmseqrun/src/base.c +92 -0
- data/ext/lcmseqrun/src/base.h +59 -0
- data/ext/lcmseqrun/src/itemset.c +518 -0
- data/ext/lcmseqrun/src/itemset.h +157 -0
- data/ext/lcmseqrun/src/itemset_zero.c +522 -0
- data/ext/lcmseqrun/src/lcm_seq.c +447 -0
- data/ext/lcmseqrun/src/lcm_seq_zero.c +446 -0
- data/ext/lcmseqrun/src/problem.c +439 -0
- data/ext/lcmseqrun/src/problem.h +179 -0
- data/ext/lcmseqrun/src/problem_zero.c +439 -0
- data/ext/lcmseqrun/src/queue.c +533 -0
- data/ext/lcmseqrun/src/queue.h +182 -0
- data/ext/lcmseqrun/src/stdlib2.c +1350 -0
- data/ext/lcmseqrun/src/stdlib2.h +864 -0
- data/ext/lcmseqrun/src/trsact.c +747 -0
- data/ext/lcmseqrun/src/trsact.h +159 -0
- data/ext/lcmseqrun/src/vec.c +779 -0
- data/ext/lcmseqrun/src/vec.h +172 -0
- data/ext/lcmtransrun/extconf.rb +18 -0
- data/ext/lcmtransrun/lcmtransrun.cpp +264 -0
- data/ext/macerun/extconf.rb +20 -0
- data/ext/macerun/macerun.cpp +57 -0
- data/ext/macerun/src/aheap.c +217 -0
- data/ext/macerun/src/aheap.h +112 -0
- data/ext/macerun/src/itemset.c +491 -0
- data/ext/macerun/src/itemset.h +158 -0
- data/ext/macerun/src/mace.c +503 -0
- data/ext/macerun/src/problem.c +346 -0
- data/ext/macerun/src/problem.h +174 -0
- data/ext/macerun/src/queue.c +529 -0
- data/ext/macerun/src/queue.h +177 -0
- data/ext/macerun/src/sgraph.c +360 -0
- data/ext/macerun/src/sgraph.h +174 -0
- data/ext/macerun/src/stdlib2.c +993 -0
- data/ext/macerun/src/stdlib2.h +811 -0
- data/ext/macerun/src/vec.c +634 -0
- data/ext/macerun/src/vec.h +170 -0
- data/ext/sspcrun/extconf.rb +20 -0
- data/ext/sspcrun/src/_sspc.c +358 -0
- data/ext/sspcrun/src/aheap.c +545 -0
- data/ext/sspcrun/src/aheap.h +251 -0
- data/ext/sspcrun/src/base.c +92 -0
- data/ext/sspcrun/src/base.h +59 -0
- data/ext/sspcrun/src/fstar.c +496 -0
- data/ext/sspcrun/src/fstar.h +80 -0
- data/ext/sspcrun/src/grhfil.c +213 -0
- data/ext/sspcrun/src/itemset.c +713 -0
- data/ext/sspcrun/src/itemset.h +170 -0
- data/ext/sspcrun/src/problem.c +415 -0
- data/ext/sspcrun/src/problem.h +179 -0
- data/ext/sspcrun/src/queue.c +533 -0
- data/ext/sspcrun/src/queue.h +182 -0
- data/ext/sspcrun/src/sample.c +19 -0
- data/ext/sspcrun/src/sspc.c +598 -0
- data/ext/sspcrun/src/sspc2.c +491 -0
- data/ext/sspcrun/src/stdlib2.c +1482 -0
- data/ext/sspcrun/src/stdlib2.h +892 -0
- data/ext/sspcrun/src/trsact.c +817 -0
- data/ext/sspcrun/src/trsact.h +160 -0
- data/ext/sspcrun/src/vec.c +745 -0
- data/ext/sspcrun/src/vec.h +172 -0
- data/ext/sspcrun/sspcrun.cpp +54 -0
- data/lib/nysol/enumLcmEp.rb +338 -0
- data/lib/nysol/enumLcmEsp.rb +284 -0
- data/lib/nysol/enumLcmIs.rb +275 -0
- data/lib/nysol/enumLcmSeq.rb +143 -0
- data/lib/nysol/items.rb +201 -0
- data/lib/nysol/seqDB.rb +256 -0
- data/lib/nysol/take.rb +39 -0
- data/lib/nysol/taxonomy.rb +113 -0
- data/lib/nysol/traDB.rb +257 -0
- metadata +239 -0
data/lib/nysol/items.rb
ADDED
@@ -0,0 +1,201 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "rubygems"
|
3
|
+
require "nysol/mcmd"
|
4
|
+
|
5
|
+
require "nysol/taxonomy.rb"
|
6
|
+
|
7
|
+
module TAKE
|
8
|
+
|
9
|
+
#=アイテムクラス
|
10
|
+
# 頻出パターンマイニングで使われるアイテムを扱うクラス。
|
11
|
+
#
|
12
|
+
#===利用例
|
13
|
+
# 以下tra.csvの内容
|
14
|
+
# ---
|
15
|
+
# items
|
16
|
+
# a b c
|
17
|
+
# a c
|
18
|
+
# b
|
19
|
+
# c b d
|
20
|
+
#
|
21
|
+
# 以下taxo.csvの内容
|
22
|
+
# ---
|
23
|
+
# item,taxo
|
24
|
+
# a,X1
|
25
|
+
# b,X1
|
26
|
+
# c,X2
|
27
|
+
# d,X2
|
28
|
+
#
|
29
|
+
# 以下rubyスクリプト
|
30
|
+
# ---
|
31
|
+
# require 'rubygems'
|
32
|
+
# require 'mining'
|
33
|
+
# items=Items.new("tra.csv","items","item")
|
34
|
+
# puts items.file # => ./1252810329_1850/dat/1
|
35
|
+
# puts items.itemFN # => "item"
|
36
|
+
# puts items.idFN # => "iid"
|
37
|
+
# puts items.size # => 4
|
38
|
+
# puts items.taxonomy # =>nil
|
39
|
+
#
|
40
|
+
# taxo=Taxonomy.new("taxo.csv","item","taxo")
|
41
|
+
# items.addTaxo(taxo)
|
42
|
+
# puts items.file # => ./1252810329_1850/dat/3
|
43
|
+
# puts items.itemFN # => "item"
|
44
|
+
# puts items.idFN # => "iid"
|
45
|
+
# puts items.size # => 4
|
46
|
+
# p items.taxonomy # => #<Taxonomy:0x1698eac @itemSize=4, @iFile="taxo.csv", @taxoFN="taxo", @itemFN="item", ...,@file="./1252810329_1850/dat/2">
|
47
|
+
#
|
48
|
+
#=====./1252810329_1850/dat/1 の内容
|
49
|
+
# item,iid
|
50
|
+
# a,1
|
51
|
+
# b,2
|
52
|
+
# c,3
|
53
|
+
# d,4
|
54
|
+
#
|
55
|
+
#=====./1252810329_1850/dat/3 の内容
|
56
|
+
# item,iid
|
57
|
+
# X1,5
|
58
|
+
# X2,6
|
59
|
+
# a,1
|
60
|
+
# b,2
|
61
|
+
# c,3
|
62
|
+
# d,4
|
63
|
+
#
|
64
|
+
class Items
|
65
|
+
# itemsファイル (=>Mfile)
|
66
|
+
attr_reader :file
|
67
|
+
|
68
|
+
# アイテムの項目名(=>String)
|
69
|
+
attr_reader :itemFN
|
70
|
+
|
71
|
+
# id項目名(=>String)
|
72
|
+
attr_reader :idFN
|
73
|
+
|
74
|
+
# アイテムの種類数(=>Fixnum)
|
75
|
+
attr_reader :size
|
76
|
+
|
77
|
+
# 分類階層クラス(=>Taxonomy)
|
78
|
+
attr_reader :taxonomy
|
79
|
+
|
80
|
+
private
|
81
|
+
|
82
|
+
#==初期化
|
83
|
+
#=====引数
|
84
|
+
# iFile: アイテム項目を含むファイル名
|
85
|
+
# itemFN: 新しいアイテム項目名
|
86
|
+
# idFN: 連番によるアイテムidの項目名(デフォルト:"iid")
|
87
|
+
#=====機能
|
88
|
+
#* iFile上のアイテム項目(@itemFN)からアイテム(@itemFN)と連番("num")の2項目からなるファイルを生成する。
|
89
|
+
#* itemFN項目の値としては、スペースで区切られた複数のアイテムであってもよい。
|
90
|
+
#* 同じアイテムが重複して登録されていれば単一化される。
|
91
|
+
#* アイテム順にソートされる。
|
92
|
+
#* アイテムの件数(種類数)がセットされる。
|
93
|
+
def initialize(iFile,itemFN,idFN="__iid")
|
94
|
+
@temp=MCMD::Mtemp.new
|
95
|
+
|
96
|
+
@iFile = Array.new
|
97
|
+
@iPath = Array.new
|
98
|
+
@iFile.push(iFile)
|
99
|
+
@iPath.push(File.expand_path(iFile))
|
100
|
+
@taxonomy = nil
|
101
|
+
@file = @temp.file # 出力ファイル名
|
102
|
+
@itemFN=itemFN
|
103
|
+
@idFN=idFN
|
104
|
+
|
105
|
+
f=""
|
106
|
+
f << "mcut f=#{itemFN} i=#{iFile} |"
|
107
|
+
f << "msortf f=#{itemFN} |"
|
108
|
+
f << "muniq k=#{itemFN} |"
|
109
|
+
f << "mnumber s=#{itemFN} a=#{idFN} S=0 o=#{@file}"
|
110
|
+
system(f)
|
111
|
+
|
112
|
+
@size = MCMD::mrecount("i=#{@file}") # itemの数
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
public
|
117
|
+
|
118
|
+
def show
|
119
|
+
puts "#### BEGIN Items class"
|
120
|
+
puts "@temp=#{@temp}"
|
121
|
+
puts "@iFile=#{@iFile}"
|
122
|
+
puts "@iPath=#{@iPath}"
|
123
|
+
puts "@taxonomy=#{@taxonomy}"
|
124
|
+
puts "@itemFN=#{@itemFN}"
|
125
|
+
puts "@idFN=#{@idFN}"
|
126
|
+
puts "@file=#{@file}"
|
127
|
+
puts "@file:"
|
128
|
+
system("cat #{@file}")
|
129
|
+
puts "#### END Items class"
|
130
|
+
end
|
131
|
+
|
132
|
+
#==アイテムの追加
|
133
|
+
# iFileのitemFN項目をアイテムとして追加する。
|
134
|
+
#=====引数
|
135
|
+
# iFile: アイテム項目を含むファイル名
|
136
|
+
# itemFN: iFile上のアイテム項目名
|
137
|
+
#=====機能
|
138
|
+
#* itemFNとしては、スペースで区切られた複数のアイテムであってもよい。
|
139
|
+
#* 同じアイテムが重複していれば単一化される。
|
140
|
+
#* 追加後アイテム順にソートされる。
|
141
|
+
#* アイテム数が更新される。
|
142
|
+
def add(iFile,itemFN)
|
143
|
+
|
144
|
+
@iFile.push(iFile)
|
145
|
+
@iPath.push(File.expand_path(iFile))
|
146
|
+
|
147
|
+
xx=MCMD::Mtemp.new
|
148
|
+
xx1=xx.file
|
149
|
+
xx2=xx.file
|
150
|
+
f=""
|
151
|
+
f << "msortf f=#{@itemFN} i=#{iFile} |"
|
152
|
+
f << "mcommon k=#{@itemFN} m=#{@file} |"
|
153
|
+
f << "mcut f=#{itemFN}:#{@itemFN} |"
|
154
|
+
f << "msortf f=#{@itemFN} |"
|
155
|
+
f << "muniq k=#{@itemFN} |"
|
156
|
+
f << "mnumber s=#{@itemFN} S=#{@size+1} a=#{@idFN} o=#{xx1}"
|
157
|
+
system(f)
|
158
|
+
|
159
|
+
f=""
|
160
|
+
f << "mcat i=#{@file},#{xx1} |"
|
161
|
+
f << "msortf f=#{@itemFN} o=#{xx2}"
|
162
|
+
system(f)
|
163
|
+
|
164
|
+
# 新itemファイル登録&item数更新
|
165
|
+
FileUtils.mv(xx2,@file)
|
166
|
+
@size = MCMD::mrecount("i=#{@file}")
|
167
|
+
|
168
|
+
end
|
169
|
+
|
170
|
+
#==Taxonomyの設定
|
171
|
+
# Taxonomy(分類階層)を設定する。
|
172
|
+
#=====引数
|
173
|
+
# taxo: taxonomy オブジェクト
|
174
|
+
#=====機能
|
175
|
+
#* Taxonomyオブジェクトをメンバとして追加する。
|
176
|
+
#* 分類項目をアイテムとして追加する。
|
177
|
+
def addTaxo(taxo)
|
178
|
+
|
179
|
+
@taxonomy=taxo
|
180
|
+
|
181
|
+
add(@taxonomy.file,@taxonomy.taxoFN) # taxonomyをアイテムとして追加登録
|
182
|
+
|
183
|
+
end
|
184
|
+
|
185
|
+
def repTaxo(taxo)
|
186
|
+
|
187
|
+
#@taxonomy=taxo #replaceの場合はtaxonomyを登録しない
|
188
|
+
|
189
|
+
@file = @temp.file # 出力ファイル名
|
190
|
+
f=""
|
191
|
+
f << "mcut f=#{taxo.taxoFN}:#{@itemFN} i=#{taxo.file} |"
|
192
|
+
f << "msortf f=#{@itemFN} |"
|
193
|
+
f << "muniq k=#{@itemFN} |"
|
194
|
+
f << "mnumber s=#{@itemFN} a=#{@idFN} S=1 o=#{@file}"
|
195
|
+
system(f)
|
196
|
+
|
197
|
+
end
|
198
|
+
|
199
|
+
end
|
200
|
+
|
201
|
+
end # module
|
data/lib/nysol/seqDB.rb
ADDED
@@ -0,0 +1,256 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "rubygems"
|
3
|
+
require "nysol/mcmd"
|
4
|
+
|
5
|
+
require "nysol/items"
|
6
|
+
|
7
|
+
module TAKE
|
8
|
+
|
9
|
+
#=トランザクションデータクラス
|
10
|
+
# 頻出パターンマイニングで使われるトランザクションデータを扱うクラス。
|
11
|
+
# トランザクションファイルは、トランザクションID項目とアイテム集合項目から構成される。
|
12
|
+
# アイテム集合は、スペースで区切られた文字列集合として表現される。
|
13
|
+
#
|
14
|
+
#===利用例
|
15
|
+
# 以下tra.csvの内容
|
16
|
+
# ---
|
17
|
+
# items
|
18
|
+
# a b d
|
19
|
+
# a d e
|
20
|
+
# c e
|
21
|
+
# a d
|
22
|
+
# c d e
|
23
|
+
# c e
|
24
|
+
# a d e
|
25
|
+
#
|
26
|
+
# 以下taxo.csvの内容
|
27
|
+
# ---
|
28
|
+
# item,taxo
|
29
|
+
# a,X1
|
30
|
+
# b,X1
|
31
|
+
# c,X2
|
32
|
+
# d,X2
|
33
|
+
# e,X2
|
34
|
+
#
|
35
|
+
# 以下rubyスクリプト
|
36
|
+
# ---
|
37
|
+
# require 'rubygems'
|
38
|
+
# require 'mining'
|
39
|
+
#
|
40
|
+
# tra=SeqDB.new("tra.csv",nil,"items")
|
41
|
+
# puts tra.file # => ./1252813069_2179/dat/1
|
42
|
+
# puts tra.numTraFile # => nil
|
43
|
+
# puts tra.idFN # => tid
|
44
|
+
# puts tra.itemsetFN # => items
|
45
|
+
# puts tra.recCnt # => 7
|
46
|
+
# p tra.items # => #<Items:0x16a39ec @iItemFN=["items"],...
|
47
|
+
#
|
48
|
+
# taxo=Taxonomy.new("taxo.csv","item","taxo")
|
49
|
+
# tra.addTaxo(taxo)
|
50
|
+
# tra.mkNumTra
|
51
|
+
# puts tra.numTraFile #=> ./1252813069_2179/dat/6
|
52
|
+
# p tra.items #=> #<Items:0x16a39ec @iItemFN=["items", "taxo"],..., @taxonomy=#<Taxonomy:0x168ba7c ...
|
53
|
+
#
|
54
|
+
#=====./1252813069_2179/dat/1 の内容
|
55
|
+
# tid,items
|
56
|
+
# 1,a b d
|
57
|
+
# 2,a d e
|
58
|
+
# 3,c e
|
59
|
+
# 4,a d
|
60
|
+
# 5,c d e
|
61
|
+
# 6,c e
|
62
|
+
# 7,a d e
|
63
|
+
#
|
64
|
+
#=====./1252813069_2179/dat/6 の内容
|
65
|
+
# 1 2 3 4 5 6 7
|
66
|
+
# 1 2 4 6 7
|
67
|
+
# 1 4 5 6 7
|
68
|
+
# 3 5 7
|
69
|
+
# 1 4 6 7
|
70
|
+
# 3 4 5 7
|
71
|
+
# 3 5 7
|
72
|
+
# 1 4 5 6 7
|
73
|
+
#
|
74
|
+
class SeqDB
|
75
|
+
attr_reader :file # トランザクションファイル名
|
76
|
+
attr_reader :idFN # トランザクションID項目名(String)
|
77
|
+
attr_reader :timeFN # 時間項目名(String)
|
78
|
+
attr_reader :itemFN # アイテム集合項目名(String)
|
79
|
+
attr_reader :clsFN # クラス項目名(String)
|
80
|
+
attr_reader :size # トランザクションサイズ(Num)
|
81
|
+
attr_reader :items # Itemsクラス
|
82
|
+
attr_reader :taxonomy # 階層分類クラス
|
83
|
+
attr_reader :clsNameRecSize # クラス別件数
|
84
|
+
attr_reader :clsSize # クラス数
|
85
|
+
attr_reader :cFile # クラスファイル
|
86
|
+
|
87
|
+
private
|
88
|
+
|
89
|
+
#=== SeqDBクラスの初期化
|
90
|
+
#
|
91
|
+
#====引数
|
92
|
+
# iFile: transactionファイル名
|
93
|
+
# iItemsetFN: iFile上のアイテム集合項目名
|
94
|
+
# idFN: 新しく命名するトランザクションID項目名
|
95
|
+
# itemsetFN: 新しく命名するアイテム集合項目名
|
96
|
+
#
|
97
|
+
#====機能
|
98
|
+
#* トランザクションIDとアイテム集合の2項目から構成するトランザクションデータを新たに作成する。
|
99
|
+
#* ID項目が指定されていなければ、1から始まる連番によってID項目を新規に作成する。
|
100
|
+
#* トランザクション件数(iFileのレコード件数)を計算する。
|
101
|
+
#* アイテム集合項目からItemsオブジェクトを生成する。
|
102
|
+
def initialize(iFile,idFN,timeFN,itemFN,padding,clsFN=nil)
|
103
|
+
@temp=MCMD::Mtemp.new
|
104
|
+
|
105
|
+
@iFile = iFile # 入力ファイル
|
106
|
+
@iPath = File.expand_path(@iFile) # フルパス
|
107
|
+
@idFN = idFN # トランザクションID項目名
|
108
|
+
@timeFN = timeFN # 時間項目名
|
109
|
+
@itemFN = itemFN # アイテム項目名
|
110
|
+
@file = @temp.file # 出力ファイル名
|
111
|
+
@padding= padding # 時系列パディング
|
112
|
+
|
113
|
+
# padding指定の場合は、asciiコードの先頭文字列を挿入
|
114
|
+
f=""
|
115
|
+
if @padding then
|
116
|
+
f << "mcut f=#{@idFN},#{@timeFN},#{@itemFN} i=#{@iFile} |"
|
117
|
+
f << "msortf f=#{@idFN},#{@timeFN}%n,#{@itemFN} |"
|
118
|
+
f << "muniq k=#{@idFN},#{@timeFN},#{@itemFN} |"
|
119
|
+
f << "mpadding k=#{@idFN} f=#{@timeFN}%n v=! o=#{@file}"
|
120
|
+
else
|
121
|
+
f << "mcut f=#{@idFN},#{@timeFN},#{@itemFN} i=#{@iFile} |"
|
122
|
+
f << "msortf f=#{@idFN},#{@timeFN}%n,#{@itemFN} |"
|
123
|
+
f << "muniq k=#{@idFN},#{@timeFN},#{@itemFN} o=#{@file}"
|
124
|
+
end
|
125
|
+
system(f)
|
126
|
+
|
127
|
+
# レコード数の計算
|
128
|
+
#@recCnt = MCMD::mrecount("i=#{@file}")
|
129
|
+
|
130
|
+
# トランザクション数の計算
|
131
|
+
tf=MCMD::Mtemp.new
|
132
|
+
xx1=tf.file
|
133
|
+
f=""
|
134
|
+
f << "mcut f=#{@idFN} i=#{@file} |"
|
135
|
+
f << "muniq k=#{@idFN} |"
|
136
|
+
f << "mcount a=__cnt o=#{xx1}"
|
137
|
+
system(f)
|
138
|
+
tbl=MCMD::Mtable.new("i=#{xx1}")
|
139
|
+
num=tbl.name2num()["__cnt"]
|
140
|
+
@size = tbl.cell(num,0).to_i
|
141
|
+
|
142
|
+
# トランザクションデータからアイテムオブジェクトを生成
|
143
|
+
if @padding then
|
144
|
+
# paddingの場合は、特殊アイテム(!)を0番とし、出力を制御する。
|
145
|
+
@items=TAKE::Items.new(@file,@itemFN)
|
146
|
+
else
|
147
|
+
@items=TAKE::Items.new(@file,@itemFN)
|
148
|
+
end
|
149
|
+
|
150
|
+
# クラスデータ
|
151
|
+
if clsFN then
|
152
|
+
@clsFN=clsFN
|
153
|
+
@cFile=@temp.file
|
154
|
+
|
155
|
+
# tid-クラス項目名ファイルの生成
|
156
|
+
xx1=@temp.file
|
157
|
+
f=""
|
158
|
+
f << "mcut f=#{@idFN},#{@clsFN} i=#{@iFile} |"
|
159
|
+
f << "msortf f=#{@idFN},#{@clsFN} |"
|
160
|
+
f << "muniq k=#{@idFN},#{@clsFN} o=#{@cFile}"
|
161
|
+
system(f)
|
162
|
+
|
163
|
+
f=""
|
164
|
+
f << "mcut f=#{@clsFN} i=#{@cFile} |"
|
165
|
+
f << "msortf f=#{@clsFN} |"
|
166
|
+
f << "mcount k=#{@clsFN} a=count o=#{xx1}"
|
167
|
+
system(f)
|
168
|
+
|
169
|
+
# クラス数
|
170
|
+
@clsSize = MCMD::mrecount("i=#{xx1}")
|
171
|
+
|
172
|
+
# 文字列としてのクラス別件数配列を数値配列に変換する
|
173
|
+
@clsNames = []
|
174
|
+
@clsNameRecSize = {}
|
175
|
+
MCMD::Mcsvin.new("i=#{xx1}"){|csv|
|
176
|
+
csv.each{|fldVal|
|
177
|
+
@clsNames << fldVal[csv.names[0]]
|
178
|
+
@clsNameRecSize[fldVal[csv.names[0]]]=fldVal[csv.names[1]].to_i
|
179
|
+
}
|
180
|
+
}
|
181
|
+
end
|
182
|
+
|
183
|
+
end
|
184
|
+
|
185
|
+
public
|
186
|
+
def show()
|
187
|
+
puts "#### BEGIN SeqDB class"
|
188
|
+
puts "@temp=#{@temp}"
|
189
|
+
puts "@iFile=#{@iFile}"
|
190
|
+
puts "@iPath=#{@iPath}"
|
191
|
+
puts "@idFN=#{@idFN}"
|
192
|
+
puts "@timeFN=#{@timeFN}"
|
193
|
+
puts "@itemFN=#{@itemFN}"
|
194
|
+
puts "@padding=#{@padding}"
|
195
|
+
puts "@file=#{@file}"
|
196
|
+
@items.show
|
197
|
+
system("head #{@file}")
|
198
|
+
puts "#### END SeqDB class"
|
199
|
+
end
|
200
|
+
|
201
|
+
def replaceFile(train)
|
202
|
+
|
203
|
+
@file = train
|
204
|
+
|
205
|
+
# レコード数の計算
|
206
|
+
#@recCnt = MCMD::mrecount("i=#{@file}")
|
207
|
+
|
208
|
+
# トランザクション数の計算
|
209
|
+
tf=MCMD::Mtemp.new
|
210
|
+
xx1=tf.file
|
211
|
+
f=""
|
212
|
+
f << "mcut f=#{@idFN} i=#{@file} |"
|
213
|
+
f << "muniq k=#{@idFN} |"
|
214
|
+
f << "mcount a=__cnt o=#{xx1}"
|
215
|
+
system(f)
|
216
|
+
tbl=MCMD::Mtable.new("i=#{xx1}")
|
217
|
+
num=tbl.name2num()["__cnt"]
|
218
|
+
@size = tbl.cell(num,0).to_i
|
219
|
+
|
220
|
+
end
|
221
|
+
|
222
|
+
|
223
|
+
#=== taxonomyをトランザクションに追加
|
224
|
+
# トランザクションデータのアイテム集合に、対応するtaxonomyを追加する。
|
225
|
+
#
|
226
|
+
#====引数
|
227
|
+
# taxonomy: Taxonomyオブジェクト。
|
228
|
+
#
|
229
|
+
#====機能
|
230
|
+
#* トランザクションデータのアイテム集合項目におけるアイテム全てについて、対応するtaxonomyをアイテム集合として追加する。
|
231
|
+
def repTaxo(taxonomy)
|
232
|
+
|
233
|
+
#@taxonomy=taxonomy
|
234
|
+
|
235
|
+
@items.repTaxo(taxonomy) # アイテムクラスをtaxonomyで置換する
|
236
|
+
|
237
|
+
tFile =taxonomy.file
|
238
|
+
itemFN=taxonomy.itemFN
|
239
|
+
taxoFN=taxonomy.taxoFN
|
240
|
+
|
241
|
+
tf=MCMD::Mtemp.new
|
242
|
+
xx1=tf.file
|
243
|
+
f=""
|
244
|
+
f << "msortf f=#{@itemFN} i=#{@file} |"
|
245
|
+
f << "mjoin k=#{@itemFN} K=#{itemFN} f=#{taxoFN} m=#{tFile} |"
|
246
|
+
f << "mcut f=#{@idFN},#{@timeFN},#{taxoFN}:#{@itemFN} |"
|
247
|
+
f << "msortf f=#{@idFN},#{@timeFN},#{@itemFN} o=#{xx1}"
|
248
|
+
system(f)
|
249
|
+
|
250
|
+
@file=@temp.file
|
251
|
+
FileUtils.mv(xx1,@file)
|
252
|
+
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
end # module
|
data/lib/nysol/take.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#/* ////////// LICENSE INFO ////////////////////
|
3
|
+
#
|
4
|
+
# * Copyright (C) 2013 by NYSOL CORPORATION
|
5
|
+
# *
|
6
|
+
# * Unless you have received this program directly from NYSOL pursuant
|
7
|
+
# * to the terms of a commercial license agreement with NYSOL, then
|
8
|
+
# * this program is licensed to you under the terms of the GNU Affero General
|
9
|
+
# * Public License (AGPL) as published by the Free Software Foundation,
|
10
|
+
# * either version 3 of the License, or (at your option) any later version.
|
11
|
+
# *
|
12
|
+
# * This program is distributed in the hope that it will be useful, but
|
13
|
+
# * WITHOUT ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF
|
14
|
+
# * NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
15
|
+
# *
|
16
|
+
# * Please refer to the AGPL (http://www.gnu.org/licenses/agpl-3.0.txt)
|
17
|
+
# * for more details.
|
18
|
+
#
|
19
|
+
# ////////// LICENSE INFO ////////////////////*/
|
20
|
+
|
21
|
+
#= MCMD ruby拡張ライブラリ
|
22
|
+
#Mコマンドruby拡張ライブラリとは、MCMDで提供されている各種データ処理モジュールをrubyから利用できるようにするインターフェースを提供する。
|
23
|
+
#
|
24
|
+
#mcmd.rbは、以下の6つのクラスライブラリをrequireしている。
|
25
|
+
# require "mcsvin" # MCMD::CSVin CSVの行単位読み込みクラス (c++で作成された共有ライブラリ)
|
26
|
+
# require "mcsvout" # MCMD::CSVout CSVの出力クラス (c++で作成された共有ライブラリ)
|
27
|
+
# require "mtable" # MCMD::Table CSVのメモリ展開クラス (c++で作成された共有ライブラリ)
|
28
|
+
# require "margs" # MCMD::Args コマンドライン引数を扱うクラス(rubyスクリプト)
|
29
|
+
# require "mtemp" # MCMD::Temp 一時ファイル管理(rubyスクリプト)
|
30
|
+
|
31
|
+
require "nysol/lcmrun"
|
32
|
+
require "nysol/lcmseqrun"
|
33
|
+
require "nysol/lcmseq0run"
|
34
|
+
require "nysol/lcmtransrun"
|
35
|
+
require "nysol/sspcrun"
|
36
|
+
require "nysol/grhfilrun"
|
37
|
+
require "nysol/macerun"
|
38
|
+
|
39
|
+
|
@@ -0,0 +1,113 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
require "rubygems"
|
5
|
+
require "nysol/mcmd"
|
6
|
+
|
7
|
+
module TAKE
|
8
|
+
|
9
|
+
#=分類階層(taxonomy)クラス
|
10
|
+
# 一階層の分類階層(アイテム-分類)を扱うクラス。
|
11
|
+
#
|
12
|
+
#===利用例
|
13
|
+
# 以下taxo.csvの内容
|
14
|
+
# ---
|
15
|
+
# item,taxo
|
16
|
+
# a,X1
|
17
|
+
# b,X1
|
18
|
+
# c,X2
|
19
|
+
# d,X2
|
20
|
+
#
|
21
|
+
# 以下rubyスクリプト
|
22
|
+
# ---
|
23
|
+
# require 'rubygems'
|
24
|
+
# require 'mining'
|
25
|
+
# taxo=Taxonomy("taxo.csv","item","taxo")
|
26
|
+
# puts taxo.itemFN # => "item"
|
27
|
+
# puts taxo.taxoFN # => "taxo"
|
28
|
+
# puts taxo.itemSize # => 4 (アイテムは"a,b,c,d"の4種類)
|
29
|
+
# puts taxo.taxoSize # => 2 (分類は"X1,X2"の2種類)
|
30
|
+
# puts taxo.file # => ./1252379737_1756/dat/1
|
31
|
+
#
|
32
|
+
#=====./1252379737_1756/dat/1 の内容
|
33
|
+
# item,taxo
|
34
|
+
# a,X1
|
35
|
+
# b,X1
|
36
|
+
# c,X2
|
37
|
+
# d,X2
|
38
|
+
class Taxonomy
|
39
|
+
# アイテムの項目名(=>String)
|
40
|
+
attr_reader :itemFN
|
41
|
+
|
42
|
+
# 分類の項目名(=>String)
|
43
|
+
attr_reader :taxoFN
|
44
|
+
|
45
|
+
# アイテムの種類数(=>Fixnum)
|
46
|
+
attr_reader :itemSize
|
47
|
+
|
48
|
+
# 分類の種類数(=>Fixnum)
|
49
|
+
attr_reader :taxoSize
|
50
|
+
|
51
|
+
# taxonomyデータファイル名(=>String)
|
52
|
+
attr_reader :file
|
53
|
+
|
54
|
+
#=== taxonomyクラスの初期化
|
55
|
+
# 一階層の分類階層を扱う。
|
56
|
+
# アイテム項目とその分類名項目を持つファイルから分類階層オブジェクトを生成する。
|
57
|
+
#====引数
|
58
|
+
# iFile: taxonomyファイル名
|
59
|
+
# itemFN: アイテム項目名
|
60
|
+
# taxoFN: 分類項目名
|
61
|
+
#====機能
|
62
|
+
#* アイテム(itemFN)と分類(taxoFN)の2項目からなるファイルが規定のパス(Taxonomy.file)に書き出される。
|
63
|
+
#* 同じアイテムが重複して登録されていれば単一化して書き出される。
|
64
|
+
#* アイテム順にソートされる。
|
65
|
+
#* アイテム数と分類数を計算する。
|
66
|
+
def initialize(iFile,itemFN,taxoFN)
|
67
|
+
@temp=MCMD::Mtemp.new
|
68
|
+
|
69
|
+
@iFile = iFile
|
70
|
+
@iPath = File.expand_path(@iFile)
|
71
|
+
@itemFN = itemFN
|
72
|
+
@taxoFN = taxoFN
|
73
|
+
|
74
|
+
# item順に並べ替えてpathに書き出す
|
75
|
+
@file=@temp.file
|
76
|
+
f=""
|
77
|
+
f << "mcut f=#{@itemFN},#{@taxoFN} i=#{@iFile} |"
|
78
|
+
f << "msortf f=#{@itemFN},#{@taxoFN} |"
|
79
|
+
f << "muniq k=#{@itemFN},#{@taxoFN} o=#{@file}"
|
80
|
+
system(f)
|
81
|
+
|
82
|
+
# oFileに登録されているitemの数をカウントする
|
83
|
+
tf=MCMD::Mtemp.new
|
84
|
+
xx1=tf.file
|
85
|
+
f=""
|
86
|
+
f << "mcut f=#{@itemFN} i=#{iFile} |"
|
87
|
+
f << "mtrafld f=#{@itemFN} a=__fld -valOnly |"
|
88
|
+
f << "mtra f=__fld -r |"
|
89
|
+
f << "msortf f=__fld |"
|
90
|
+
f << "muniq k=__fld |"
|
91
|
+
f << "mcount a=size |"
|
92
|
+
f << "mcut f=size -nfno o=#{xx1}"
|
93
|
+
system(f)
|
94
|
+
tbl=MCMD::Mtable.new("i=#{xx1} -nfn")
|
95
|
+
@itemSize = tbl.cell(0,0).to_i
|
96
|
+
|
97
|
+
# oFileに登録されているtaxonomyの数をカウントする
|
98
|
+
xx2=tf.file
|
99
|
+
f=""
|
100
|
+
f << "mcut f=#{@taxoFN}:item i=#{@file} |"
|
101
|
+
f << "msortf f=item |"
|
102
|
+
f << "muniq k=item |"
|
103
|
+
f << "mcount a=size |"
|
104
|
+
f << "mcut f=size -nfno o=#{xx2}"
|
105
|
+
system(f)
|
106
|
+
tbl=MCMD::Mtable.new("i=#{xx2} -nfn")
|
107
|
+
@taxoSize = tbl.cell(0,0).to_i
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
end #module
|
113
|
+
|