import networkx as nx import sys from collections import Counter def build_graph(filename): g = nx.Graph() with open(filename) as fh: fh.readline() for line in fh: i, j = map(lambda x: int(float(x)), line.strip().split(",")[1:]) g.add_edge(i, j) return g def distances(g): victims = set() with open("vics.csv") as fh: fh.readline() for line in fh: victims.add(int(line.strip().split(",")[1])) level = 0 seen = {} nextlevel = {v: 1 for v in victims} while level <= 3: thislevel = nextlevel nextlevel = {} for v in thislevel: if v not in seen: seen[v] = level nextlevel.update(g[v]) level += 1 return seen if __name__ == "__main__": g = build_graph(sys.argv[1]) print g.number_of_nodes(), g.number_of_edges() cnt = Counter() for v, d in distances(g).iteritems(): cnt[d] += 1 print cnt.most_common()