def g_one_main(n, md, model, to_pickle=True, data_dir='pkls'): r = dict() g = gt.price_network(N=n, m=md, gamma=1, directed=False, seed_graph=gt.complete_graph(N=md + 1)) if model == 'configuration': gt.random_rewire(g, model='configuration') r['N'] = n r['md'] = md r['model'] = model try: r.update( dict( n=g.num_vertices(), m=g.num_edges(), # l=average_path(g), # cc=gt.global_clustering(g) r_a=gt.assortativity(g, 'total'), rho_a=rank_assortativity(g, method='spearman'), tau_a=rank_assortativity(g, method='kendall'))) r.update(g_centrality_correlations(g)) except Exception as e: logger.error(e) if to_pickle is True: filename = gen_filename(n, md, model, data_dir) with open(filename, 'wb') as f: pickle.dump(r, f, -1) return r
def erdos_renyi_graph(n, e, directed=False, gcc=True): g = Graph(directed=directed) g.add_vertex(n) rint = np.random.randint edge_list = [[x, y] for x, y in zip(rint(0, n, size=e), rint(0, n, size=e))] g.add_edge_list(edge_list) random_rewire(g, model="erdos") g = make_simple_graph(g, undirected=1 - directed, gcc=gcc) return g
def mcore_of_rewired(args_tuple): t, g, model = args_tuple pid = mp.current_process(), rejected = gt.random_rewire(g, model=model) print('Process id={}, number of rejected edges={}'.format(pid, rejected)) logger.info('PID=%s, number of rejected edges=%s', pid, rejected) kshell = gt.kcore_decomposition(g) s = pd.Series(kshell.a.copy()) k = s.max() n = (s == k).sum() logger.info('PID=%s, ts=%s, K=%s, N=%s', pid, t, k, n) return (t, k, n)
def kcore_growing_shuffle(fn1='retweet.201710.claim.raw.csv', fn2='graph.daily.csv', ofn=None, rewiring=None): """The growing of kcore by shuffling the edge list.""" if ofn is None: ofn = 'kcore.growing.shuffle' if rewiring: ofn += '.' + rewiring ofn += '.csv' g = prepare_network_from_raw(fn1) if rewiring is not None: gt.random_rewire(g, model=rewiring) evmap = pd.read_csv(fn2) enum_list = evmap['enum'].tolist() emap = pd.DataFrame(g.get_edges().copy(), columns=['source', 'target', 'idx']) emap = emap[['source', 'target']] emap = emap.reindex(np.random.permutation( emap.index)).reset_index(drop=True) v_map = dict() v_counter = -1 gp_counter = 0 g = gt.Graph() mcore_k = [] mcore_s = [] mcore_idx = [] vnum = [] enum = [] largest_component_vnum = [] g = gt.Graph() for i, s, t in emap.itertuples(): if s not in v_map: v_counter += 1 v_map[s] = v_counter if t not in v_map: v_counter += 1 v_map[t] = v_counter source = v_map.get(s) target = v_map.get(t) g.add_edge(source, target, add_missing=True) if g.num_edges() >= enum_list[gp_counter]: kcore = pd.Series(gt.kcore_decomposition(g).a.copy()) mcore = kcore.value_counts().sort_index(ascending=False) mk = mcore.index[0] ms = mcore.iloc[0] mcore_k.append(mk) mcore_s.append(ms) mcore_idx.append(kcore.loc[kcore == mk].index.tolist()) lcv = gt.label_largest_component(g, directed=False) vnum.append(g.num_vertices()) enum.append(g.num_edges()) largest_component_vnum.append(lcv.a.sum()) logger.info(g) logger.info('gp counter: %s', gp_counter) logger.info('Main core at enum=%s: k=%s, num=%s', g.num_edges(), mk, ms) gp_counter += 1 cdf = pd.DataFrame( dict(mcore_k=mcore_k, mcore_s=mcore_s, mcore_idx=mcore_idx, vnum=vnum, enum=enum, largest_commponent_vnum=largest_component_vnum)) cdf.to_csv(ofn, index=False)
def kcore_growing_daily_rewiring(fn, ofn=None, freq='D', model='constrained-configuration'): """The growing of kcore by rewiring daily.""" if ofn is None: ofn = 'kcore.growing.daily-rewiring.{}.csv'.format(model) # load only necessary columns df = pd.read_csv(fn, parse_dates=['tweet_created_at'], usecols=[2, 3, 4]) df = df.set_index('tweet_created_at') # remove self-loop df = df.loc[df.from_raw_id != df.to_raw_id] df['row_id'] = np.arange(len(df)) df['gpf'] = False gpf_rows = df.row_id.groupby(pd.Grouper(freq=freq)).last() gpf_rows = gpf_rows.loc[gpf_rows.notnull()].astype('int') df.loc[df.row_id.isin(gpf_rows.values), 'gpf'] = True v_map = dict() e_set = set() v_counter = -1 g = gt.Graph() mcore_k = [] mcore_s = [] mcore_idx = [] vnum = [] enum = [] largest_component_vnum = [] ts = [] for created_at, from_raw_id, to_raw_id, gpf in df[[ 'from_raw_id', 'to_raw_id', 'gpf' ]].itertuples(): e = (from_raw_id, to_raw_id) if e not in e_set: if from_raw_id not in v_map: v_counter += 1 v_map[from_raw_id] = v_counter if to_raw_id not in v_map: v_counter += 1 v_map[to_raw_id] = v_counter source = v_map.get(from_raw_id) target = v_map.get(to_raw_id) g.add_edge(source, target, add_missing=True) e_set.add(e) if gpf: g1 = g.copy() rejected = gt.random_rewire(g1, model=model, edge_sweep=True) logger.info('Number of rejected when rewiring: %s', rejected) ts.append(created_at) kcore = pd.Series(gt.kcore_decomposition(g1).a.copy()) mcore = kcore.value_counts().sort_index(ascending=False) mk = mcore.index[0] ms = mcore.iloc[0] mcore_k.append(mk) mcore_s.append(ms) mcore_idx.append(kcore.loc[kcore == mk].index.tolist()) lcv = gt.label_largest_component(g1, directed=False) vnum.append(g1.num_vertices()) enum.append(g1.num_edges()) largest_component_vnum.append(lcv.a.sum()) logger.info(g1) logger.info('Main core at %s: k=%s, num=%s', created_at, mk, ms) cdf = pd.DataFrame( dict(timeline=ts, mcore_k=mcore_k, mcore_s=mcore_s, mcore_idx=mcore_idx, vnum=vnum, enum=enum, largest_commponent_vnum=largest_component_vnum)) cdf.to_csv(ofn, index=False)
#! /usr/bin/env python # -*- coding: utf-8 -*- """ @author: lockheed Information and Electronics Engineering Huazhong University of science and technology E-mail:[email protected] Created on: 4/30/14 9:58 AM Copyright (C) lockheedphoenix """ import graph_tool.all as gt g = gt.load_graph('RG.xml.gz') pos = g.vertex_properties['pos'] gt.graph_draw(g, pos=pos, output_size=[1024, 800], output='RG.png') gt.random_rewire(g, model='erdos') gt.graph_draw(g, pos=pos, output_size=[1024, 800], output='ER.png')
#! /usr/bin/env python # -*- coding: utf-8 -*- """ @author: lockheed Information and Electronics Engineering Huazhong University of science and technology E-mail:[email protected] Created on: 4/30/14 9:58 AM Copyright (C) lockheedphoenix """ import graph_tool.all as gt g = gt.load_graph('RG.xml.gz') pos = g.vertex_properties['pos'] gt.graph_draw(g, pos=pos,output_size=[1024,800],output='RG.png') gt.random_rewire(g,model='erdos') gt.graph_draw(g, pos=pos,output_size=[1024,800],output='ER.png')