import networkx as nx
import matplotlib.pyplot as plt
import glob
from IPython.display import display, Markdown
def influence_graph(bnet):
g = nx.DiGraph()
with open(bnet) as fp:
for line in fp.read().splitlines():
dest, origs = line.split(",")
dest = dest.strip()
origs = set(origs.strip().replace("(","").replace(")","")\
.replace("&"," ").replace("|"," ").replace("!", "").split(" "))
g.add_node(dest)
g.add_edges_from([(dest, orig) for orig in origs])
return g
def plot_scatter_degree(g):
nodes = list(g.nodes())
ins = [i for _,i in g.in_degree(nodes)]
outs = [i for _,i in g.out_degree(nodes)]
plt.plot(ins, outs, linestyle='none', marker='o')
plt.xlabel("in-degree")
plt.ylabel("out-degree")
plt.show()
for filename in sorted(glob.glob("random-*.bnet"), key=lambda f: (len(f), f)):
display(Markdown(f"### {filename}"))
g = influence_graph(filename)
plot_scatter_degree(g)