nysol-view 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/bin/m2gv.rb +812 -0
- data/bin/mautocolor.rb +244 -0
- data/bin/mbar.rb +818 -0
- data/bin/mdtree.rb +1017 -0
- data/bin/mgv.rb +809 -0
- data/bin/mnest2tree.rb +159 -0
- data/bin/mpie.rb +733 -0
- data/bin/msankey.rb +644 -0
- data/lib/nysol/viewjs.rb +13490 -0
- metadata +101 -0
data/bin/mnest2tree.rb
ADDED
@@ -0,0 +1,159 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#-*- coding: utf-8 -*-
|
3
|
+
|
4
|
+
require "rubygems"
|
5
|
+
require "nysol/mcmd"
|
6
|
+
require "set"
|
7
|
+
|
8
|
+
# ver="1.0" # 初期リリース 2016/11/09
|
9
|
+
$cmd=$0.sub(/.*\//,"")
|
10
|
+
|
11
|
+
$version=1.0
|
12
|
+
$revision="###VERSION###"
|
13
|
+
|
14
|
+
def help
|
15
|
+
|
16
|
+
STDERR.puts <<EOF
|
17
|
+
------------------------
|
18
|
+
#{$cmd} version #{$version}
|
19
|
+
------------------------
|
20
|
+
概要) 入れ子グラフ(nested graph)をtree構造グラフに変換する
|
21
|
+
|
22
|
+
書式1) #{$cmd} k= [ni=] [nf=] ei= ef= [no=] [eo=]
|
23
|
+
|
24
|
+
k= : 入れ子グラフのクラスタ項目名(ni=を指定した場合は同じ項目名でなければならない)
|
25
|
+
複数項目指定不可
|
26
|
+
|
27
|
+
ni= : 頂点集合ファイル名
|
28
|
+
nf= : 頂点ID項目名
|
29
|
+
|
30
|
+
ei= : 枝集合ファイル名
|
31
|
+
ef= : 開始頂点ID項目名,終了頂点ID項目名
|
32
|
+
ev= : 枝重み
|
33
|
+
|
34
|
+
no= : 出力節点ファイル名
|
35
|
+
eo= : 出力枝ファイル名
|
36
|
+
|
37
|
+
-h,--help : ヘルプの表示
|
38
|
+
|
39
|
+
基本例)
|
40
|
+
EOF
|
41
|
+
exit
|
42
|
+
end
|
43
|
+
def ver()
|
44
|
+
$revision ="0" if $revision =~ /VERSION/
|
45
|
+
STDERR.puts "version #{$version} revision #{$revision}"
|
46
|
+
exit
|
47
|
+
end
|
48
|
+
|
49
|
+
help() if ARGV.size <= 0 or ARGV[0]=="--help"
|
50
|
+
ver() if ARGV[0]=="--version"
|
51
|
+
|
52
|
+
# ===================================================================
|
53
|
+
# パラメータ処理
|
54
|
+
args=MCMD::Margs.new(ARGV,"k=,ni=,nf=,ei=,ef=,ev=,no=,eo=","ei=,ef=")
|
55
|
+
|
56
|
+
# mcmdのメッセージは警告とエラーのみ
|
57
|
+
ENV["KG_VerboseLevel"]="2" unless args.bool("-mcmdenv")
|
58
|
+
|
59
|
+
ni = args. file("ni=","r") # nodeファイル名
|
60
|
+
nf = args.field("nf=", ni) # nodeID項目名
|
61
|
+
unless args.keyValue["ni="]
|
62
|
+
if args.keyValue["nf="]
|
63
|
+
raise "nf= cannot be specified without ni="
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
if args.keyValue["ni="]
|
68
|
+
#unless args.keyValue["nf="] or args.keyValue["nv="]
|
69
|
+
unless args.keyValue["nf="]
|
70
|
+
raise "nf= must be specified when ni= is given"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
ei = args. file("ei=","r") # edgeファイル名
|
75
|
+
key= args.field("k=", ei,nil,1,1) # nested graph クラスタ項目
|
76
|
+
key=key["names"][0] if key
|
77
|
+
ef = args.field("ef=", ei) # edge始点node項目名,終了頂点項目名
|
78
|
+
ev = args.field("ev=", ei) # edge value項目名
|
79
|
+
ef1=ef["names"][0]
|
80
|
+
ef2=ef["names"][1]
|
81
|
+
if ef1==nil or ef2==nil then
|
82
|
+
raise "ef= takes two field names"
|
83
|
+
end
|
84
|
+
|
85
|
+
if ni
|
86
|
+
nf=nf["names"][0]
|
87
|
+
end
|
88
|
+
ev=ev["names"][0] if ev
|
89
|
+
|
90
|
+
noFile = args.file("no=","w") # 出力ファイル名
|
91
|
+
eoFile = args.file("eo=","w") # 出力ファイル名
|
92
|
+
|
93
|
+
#############
|
94
|
+
# entry point
|
95
|
+
temp=MCMD::Mtemp.new
|
96
|
+
xxa=temp.file
|
97
|
+
xxb=temp.file
|
98
|
+
xxnewNode=temp.file
|
99
|
+
system "mcut f=#{key}:#orgKey,#{ef1}:#orgEf1,#{ef2}:#orgEf2 i=#{ei} o=#{xxa}"
|
100
|
+
|
101
|
+
MCMD::Mcsvout.new("f=#orgKey,#orgEf1,#orgEf2,#ef1,#ef2 o=#{xxb}"){|oCSV|
|
102
|
+
iCSV=MCMD::Mcsvin.new("i=#{xxa}")
|
103
|
+
iCSV.each{|flds|
|
104
|
+
orgKey =flds["#orgKey"]
|
105
|
+
orgEf1 =flds["#orgEf1"]
|
106
|
+
orgEf2 =flds["#orgEf2"]
|
107
|
+
# エッジを外して、親(key)との接続に変更する
|
108
|
+
# 新しいkeyはnullとする
|
109
|
+
oCSV.write([orgKey,orgEf1,orgEf2,orgKey,orgEf1])
|
110
|
+
oCSV.write([orgKey,orgEf1,orgEf2,orgKey,orgEf2])
|
111
|
+
}
|
112
|
+
}
|
113
|
+
|
114
|
+
# evが指定されているときは、平均重みを新しいedge(親-子)の重みとする
|
115
|
+
f=""
|
116
|
+
f << "mjoin k=#orgKey,#orgEf1,#orgEf2 K=#{key},#{ef1},#{ef2} m=#{ei} i=#{xxb} |" # 全項目join
|
117
|
+
if ev
|
118
|
+
f << "mavg k=#ef1,#ef2 f=#{ev} |"
|
119
|
+
else
|
120
|
+
f << "muniq k=#ef1,#ef2 |"
|
121
|
+
end
|
122
|
+
f << "mcut -r f=#orgKey,#orgEf1,#orgEf2 |"
|
123
|
+
f << "mfldname f=#ef1:#{ef1},#ef2:#{ef2} o=#{eoFile}"
|
124
|
+
system(f)
|
125
|
+
|
126
|
+
# 新たにclusterがnode名に登録されている可能性があるので、そのノードを取得し、後にnodeファイルに追加しておく
|
127
|
+
if ni
|
128
|
+
fldNames=nil
|
129
|
+
MCMD::Mcsvin.new("i=#{ni}"){|iCSV|
|
130
|
+
fldNames=iCSV.names
|
131
|
+
fldNames.delete(nf)
|
132
|
+
}
|
133
|
+
commas=','*(fldNames.size-1)
|
134
|
+
#p fldNames.join(',')
|
135
|
+
|
136
|
+
f=""
|
137
|
+
f << "mcut f=#{ef1}:#{nf} i=#{eoFile} |"
|
138
|
+
f << "muniq k=#{nf} |"
|
139
|
+
f << "mcommon k=#{nf} m=#{ni} -r |"
|
140
|
+
f << "msetstr v=#{commas} a=#{fldNames.join(',')} o=#{xxnewNode}"
|
141
|
+
system(f)
|
142
|
+
#system "cat #{xxnewNode}"
|
143
|
+
#exit
|
144
|
+
# system "cat #{niFile}"
|
145
|
+
# key,nam,keyNum%0,num,nv,nvv,nc,leaf,nvKey,ncKey
|
146
|
+
# #1_1,a,1,5,0.4666666667,3.222222223,,1,0.6666666667,
|
147
|
+
# #1_1,b,1,6,0.4,2.666666666,,1,0.6666666667,
|
148
|
+
f=""
|
149
|
+
f << "mcat i=#{ni},#{xxnewNode} |"
|
150
|
+
f << "mcut f=#{key} -r |"
|
151
|
+
f << "msetstr v= a=#{key} o=#{noFile}"
|
152
|
+
system(f)
|
153
|
+
#system "cat #{noFile}"
|
154
|
+
#exit
|
155
|
+
end
|
156
|
+
|
157
|
+
# 終了メッセージ
|
158
|
+
MCMD::endLog(args.cmdline)
|
159
|
+
|