Open chengjun opened 4 years ago
The spread of true and false news online Soroush Vosoughi, Deb Roy, Sinan Aral,*
Science 09 Mar 2018: Vol. 359, Issue 6380, pp. 1146-1151 DOI: 10.1126/science.aap9559
https://science.sciencemag.org/content/359/6380/1146.full
Do you find there is an error in Figure 1A max-breadth?
import networkx as nx import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib matplotlib.style.use('ggplot') alist = [['a', 0], ['a', 'b', 1], ['a', 'c', 3],['b', 'd', 4], ['c', 'e', 6], ['c', 'f', 7], ['d', 'g', 10], ['c', 'h', 11]] g = nx.Graph() for i in alist: if len(i) == 2: n1, t = i g.add_node(n1) else: n1, n2, t = i g.add_edge(n1, n2) pos={'a': np.array([ 0 , 0.5]), 'b': np.array([ 1, 0.55]), 'c': np.array([ 3, 0.45]), 'd': np.array([ 4, 0.55]), 'e': np.array([ 6, 0.5]), 'f': np.array([ 7, 0.4]), 'g': np.array([ 10, 0.55 ]), 'h': np.array([ 11, 0.45])} temporal_network = {} for k in range(1, len(alist)+1): elist = alist[:k] t = elist[-1][-1] temporal_network[t] = nx.Graph() for i in elist: if len(i) == 2: n1 = i[:-1][0] temporal_network[t].add_node(n1) else: n1, n2 = i[:-1] temporal_network[t].add_edge(n1, n2) def calc_size(G): num_nodes=G.number_of_nodes() return num_nodes def calc_depth(G,G_root): depth=nx.eccentricity(G,v=G_root) return depth def calc_structural_viralty(G): size = calc_size(G) if size==1: return 0 ##virality is not defined for cascades of size 1, sv=nx.average_shortest_path_length(G) #Note: this is very time-consuming for larger cascades return sv def calc_max_breadth(g, root): depth = calc_depth(g,root) if depth ==0: return 0 else: g_in_radius = [len(nx.ego_graph(g, root, radius=i).nodes())-1 for i in range(1, depth+1)] breadth_list = [i-g_in_radius[k-1] if k > 0 else i for k, i in enumerate(g_in_radius)] return np.max(breadth_list) t = list(range(np.max(ts)+1)) ts = list(temporal_network.keys()) sizes = [len(temporal_network[i].nodes()) if i in ts else None for i in t] depths = [calc_depth(temporal_network[i], 'a') if i in ts else None for i in t] viralty = [calc_structural_viralty(temporal_network[i]) if i in ts else None for i in t] breadths = [calc_max_breadth(temporal_network[i], 'a') if i in ts else None for i in t] df = pd.DataFrame(np.array([t, sizes, depths, breadths, viralty]).T, columns = ['t', 'size', 'depth', 'breadth', 'viralty'] ) df = df.fillna(method = 'ffill') plt.figure(figsize = [8, 12]) plt.subplot(511) nx.draw(g, with_labels = True, pos = pos) plt.subplot(512) plt.plot(df['t'], df['size'], 'r-') plt.ylabel('Size', fontsize = 16) plt.ylim([0, 8]) plt.subplot(513) plt.plot(df['t'], df['depth'], 'r-') plt.ylabel('Depth', fontsize = 16) plt.subplot(514) plt.plot(df['t'], df['breadth'], 'r-') plt.ylabel('Breadth', fontsize = 16) plt.subplot(515) plt.plot(df['t'], df['viralty'], 'r-') plt.ylabel('Virality', fontsize = 16) plt.xlabel('Time (minutes)', fontsize = 16) plt.show()
The spread of true and false news online Soroush Vosoughi, Deb Roy, Sinan Aral,*
Science 09 Mar 2018: Vol. 359, Issue 6380, pp. 1146-1151 DOI: 10.1126/science.aap9559
https://science.sciencemag.org/content/359/6380/1146.full
Do you find there is an error in Figure 1A max-breadth?