-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmodules_ania.py
173 lines (128 loc) · 4.35 KB
/
modules_ania.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
import UTILITIES as UT
import sys
import os
import math
import igraph as ig
import merge_graphs as merge
from collections import Counter
max_level = 2
def main():
# max_level = int(sys.argv[2])
if sys.argv[1] == 'sub1':
for_production(UT.get_sub1_networks())
if sys.argv[1] == 'sub2':
# UT.get_sub2_networks()
for_production2()
def run_multiple_for_nework(G, func, nn):
M = []
one_round(M, G, func, 'community_walktrap', 0, nn)
#one_round(M, G, func, 'community_multilevel', 0, nn)
return M
def for_production2(DD=False):
print('running for sub2')
G = ig.Graph.Read_GraphML(UT.get_dir('networks') + '/dream_merge.graphml')
print('read merged!')
KK = list(list(G.es)[0].attributes().keys())
# new_KK = [scale_parameter_and_add(G, k, 10) for k in KK]
add_attribute(G, KK, my_power)
# G.write_graphml(UT.get_dir('networks') + '/dream_merge_scaled_added.graphml')
M = run_multiple_for_nework(G, 'my_power', 'id')
modules_to_gmt(M, 'sub2_my_power_multilevel_' + str(max_level) + '.gmt')
def for_production(DD):
print('running for sub1')
# ddir = 'com_walktr_down_05_' + str(max_level)
ddir = 'com_multilevel_05_' + str(max_level)
try:
os.system('mkdir ' + ddir)
except Exception:
pass
for nname in DD.keys():
print('runing for network', nname)
for_single(DD[nname].to_undirected(), nname, ddir)
def for_single(G, nname, ddir):
modules_to_gmt(run_multiple_for_nework(G, 'weight', 'name'),
ddir + '/' + nname + '.gmt')
return nname
def one_round(M, G, func, method, level, nn):
func_graph = getattr(G, method)
if not isinstance(func, str):
ff = func.__name__
else:
ff = func
for g in get_modules(G, ff, func_graph, 5 - level).subgraphs():
if len(g.vs()) < 3:
continue
elif len(g.vs()) < 70 or level > max_level:
M.append(get_v_to_module(g.vs(), nn))
else:
one_round(M, g, func, method, level+1, nn)
def get_v_to_module(ll, nn):
m = [i[nn] for i in ll]
return m
def get_modules_leghts(modules):
return Counter([len(m) for m in modules])
def megre_networks(dd):
merged = merge.merge_graphs(dd)
merged.write_graphml(UT.get_dir() + '/out_networks_merged.graphml')
return merged
def scale_parameter_and_add(G, k, N=5.0):
new_attr = k + '_scaled'
if k == 'KEGG':
for e in G.es:
e[new_attr] = e.attributes()[k]
else:
values = [e.attributes()[k] for e in G.es
if not math.isnan(e.attributes()[k])]
mmin = min(values)
for e in G.es:
val = e.attributes()[k]
if val is None:
e[new_attr] = val
else:
e[new_attr] = scale_val(val, mmin, (max(values) - mmin)/N)
return new_attr
def scale_val(val, mmin, rr):
if not math.isnan(val):
return int((val - mmin)/rr)
return val
def add_attribute(G, KK, func):
print('adding ', func.__name__)
for e in G.es:
tmp = func([e.attributes()[k] for k in KK])
e[func.__name__] = tmp
def my_max(tmp):
return max([i for i in tmp if i is not None])
def my_sum(tmp):
tmp = [i for i in tmp if i is not None]
return sum(tmp)
def my_average(tmp):
tmp = [i for i in tmp if i is not None]
return sum(tmp)/4.0
def my_power(tmp):
return sum([1 for i in tmp if i is not None])
def get_modules(G, func, method, steps):
nn = method.__name__.split('_')[1]
# modules = method(weights=func, steps=steps)
modules = method(weights=func)
if nn == 'walktrap':
modules = modules.as_clustering()
return modules
def translate_module(m, G):
for v in m:
new_v = G.vs(v)
print(v, new_v, new_v.name)
input('?')
def no_single_modules(modules):
modules_filtered = [m for m in modules if len(m) >= 3]
return modules_filtered
def modules_to_gmt(vertex_sets, outfile):
with open(outfile, 'wt') as fp:
for i, vset in enumerate(vertex_sets):
tmp = [str(i), '1']
tmp.extend([str(i) for i in vset])
fp.writelines('\t'.join(tmp) + "\n")
print('written to file', outfile)
def read_merged_network_all():
return ig.Graph.Read_GraphML('/Users/agorska/Desktop/dream_merge.graphml')
if __name__ == '__main__':
main()