Update notebooks and scripts
This commit is contained in:
parent
aedd94d4af
commit
69afa83517
41 changed files with 2896 additions and 469 deletions
106
sociopatterns.py
Normal file
106
sociopatterns.py
Normal file
|
@ -0,0 +1,106 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import numpy as np
|
||||
import igraph as ig
|
||||
import dionysus as d
|
||||
|
||||
import multiprocessing
|
||||
# from dask.distributed import Client
|
||||
|
||||
from zigzag import sliding_windows, zigzag_network
|
||||
from wrcf import wrcf_diagram
|
||||
from sliced_wasserstein import diagram_array, SW_approx
|
||||
|
||||
import dill
|
||||
|
||||
|
||||
def remove_inf(dgm):
|
||||
"""Remove infinite points in a persistence diagram.
|
||||
|
||||
:param dgm: Diagram
|
||||
|
||||
:return: the same diagram without the infinite points.
|
||||
"""
|
||||
res = d.Diagram()
|
||||
for p in dgm:
|
||||
if p.death != np.inf:
|
||||
res.append(p)
|
||||
return res
|
||||
|
||||
|
||||
## Global parameters
|
||||
N_WINDOWS = 40
|
||||
|
||||
## Computations
|
||||
ZIGZAG_PERS = True
|
||||
WRCF_PERS = True
|
||||
SW_KERNEL = True
|
||||
BOTTLENECK_DIST = True
|
||||
|
||||
|
||||
if __name__=="__main__":
|
||||
print("Loading SocioPatterns dataset...", end="", flush=True)
|
||||
g = ig.read("data/sociopatterns/infectious/infectious.graphml")
|
||||
del g.es["id"]
|
||||
# print(g.summary())
|
||||
print("done.")
|
||||
|
||||
print("Temporal partitioning...", end="", flush=True)
|
||||
wins = sliding_windows(g, 1/N_WINDOWS)
|
||||
print("done.")
|
||||
|
||||
pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())
|
||||
|
||||
if ZIGZAG_PERS:
|
||||
print("Zigzag persistence...", end="", flush=True)
|
||||
zz_dgms = pool.map(zigzag_network, wins)
|
||||
dill.dump(zz_dgms, open("sociopatterns/zz_dgms.dill", "wb"))
|
||||
print("done, saved.")
|
||||
|
||||
if WRCF_PERS:
|
||||
print("WRCF...", end="", flush=True)
|
||||
## Collapse each subnetwork into a static graph: the weight is the
|
||||
## number of appearances of each edge
|
||||
for w in wins:
|
||||
w.es["time"] = np.repeat(1, len(w.es["time"]))
|
||||
w.simplify(combine_edges="sum")
|
||||
w.es["weight"] = w.es["time"]
|
||||
del w.es["time"]
|
||||
wrcf_dgms = pool.map(wrcf_diagram, wins)
|
||||
dill.dump(wrcf_dgms, open("sociopatterns/wrcf_dgms.dill", "wb"))
|
||||
print("done.")
|
||||
|
||||
pool.terminate()
|
||||
|
||||
if ZIGZAG_PERS and SW_KERNEL:
|
||||
print("Sliced Wasserstein Kernel (zigzag)...", end="", flush=True)
|
||||
zz_dgms1 = [dgm[1] for dgm in zz_dgms if len(dgm) > 1]
|
||||
zz_gram1 = np.array([[SW_approx(zz_dgms1[i], zz_dgms1[j], 10)
|
||||
for i in range(len(zz_dgms1))] for j in range(len(zz_dgms1))])
|
||||
dill.dump(zz_gram1, open("sociopatterns/zz_gram1.dill", "wb"))
|
||||
print("done, saved.")
|
||||
if WRCF_PERS and SW_KERNEL:
|
||||
print("Sliced Wasserstein Kernel (WRCF)...", end="", flush=True)
|
||||
wrcf_dgms1 = [dgm[1] for dgm in wrcf_dgms if len(dgm) > 1]
|
||||
wrcf_gram1 = np.array([[SW_approx(wrcf_dgms1[i], wrcf_dgms1[j], 10)
|
||||
for i in range(len(wrcf_dgms1))] for j in range(len(wrcf_dgms1))])
|
||||
dill.dump(wrcf_gram1, open("sociopatterns/wrcf_gram1.dill", "wb"))
|
||||
print("done, saved.")
|
||||
|
||||
if ZIGZAG_PERS and BOTTLENECK_DIST:
|
||||
print("Bottleneck distance (zigzag)...", end="", flush=True)
|
||||
zz_dgms1 = list(map(remove_inf, zz_dgms1))
|
||||
zz_distmat = np.array([[d.bottleneck_distance(zz_dgms1[i], zz_dgms1[j])
|
||||
for i in range(len(zz_dgms1))] for j in range(len(zz_dgms1))])
|
||||
dill.dump(zz_distmat, open("sociopatterns/zz_distmat.dill", "wb"))
|
||||
print("done, saved.")
|
||||
if WRCF_PERS and BOTTLENECK_DIST:
|
||||
print("Bottleneck distance (WRCF)...", end="", flush=True)
|
||||
wrcf_dgms1 = list(map(remove_inf, wrcf_dgms1))
|
||||
wrcf_distmat = np.array([[d.bottleneck_distance(wrcf_dgms1[i], wrcf_dgms1[j])
|
||||
for i in range(len(wrcf_dgms1))] for j in range(len(wrcf_dgms1))])
|
||||
dill.dump(wrcf_distmat, open("sociopatterns/wrcf_distmat.dill", "wb"))
|
||||
print("done, saved.")
|
||||
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue