In [ ]:
import networkx as nx
In [ ]:
import matplotlib
import matplotlib.pyplot as plt
In [ ]:
from collections import defaultdict
In [ ]:
import numpy as np
In [ ]:
import scipy.stats
In [ ]:
SOCIAL_GRAPH_FILENAME = 'data/london/ground-truth.txt'
CASCADE_FILENAME = 'data/london/cascades-london-renum.txt'
INFOPATH_FORMAT = True
TITLE = 'London [REAL]'
fig_name = 'london-real'
In [ ]:
added_nodes = set()
G = nx.DiGraph()
In [ ]:
with open(SOCIAL_GRAPH_FILENAME, 'r') as f:
for line in f:
try:
u1, u2, alpha = line[:-1].split(',')
u1, u2 = map(int, [u1, u2])
alpha = float(alpha)
for u in [u1, u2]:
if u not in added_nodes:
added_nodes.add(u)
G.add_node(u)
G.add_edge(u1, u2, weight=alpha)
except ValueError:
print line
In [ ]:
# nx.draw(G)
# plt.show()
In [ ]:
# Maps (node_i, node_j) -> [delay1, delay2, ...]
delay_dict = defaultdict(list)
delay_dict_false = defaultdict(list)
In [ ]:
with open(CASCADE_FILENAME, 'r') as f:
for line in f:
if line == '\n': break
for line in f:
cascade_str = []
if INFOPATH_FORMAT:
cascade_str = line.split(';')[-1]
else:
cascade_str = line
cascade_lst = map(int, cascade_str.split(','))
cascade = [(cascade_lst[i], cascade_lst[i+1]) for i in range(0, len(cascade_lst)-1, 2)]
cascade.sort(key=lambda x: x[1]) # Sort by the time of the checkin
for i in range(1, len(cascade)-1):
node_i = cascade[i][0]
neigh_of_i = G.neighbors(node_i)
for j in range(i, len(cascade)):
# If (i, j) is an edge in the graph, append delay
node_j = cascade[j][0]
if node_j in neigh_of_i:
delay_dict[(node_i, node_j)].append(cascade[j][1] - cascade[i][1])
else:
delay_dict_false[(node_i, node_j)].append(cascade[j][1] - cascade[i][1])
In [ ]:
interarrival_ordered_keys_list = sorted(delay_dict.keys(), key=lambda x: len(delay_dict[x]), reverse=True)
#interarrival_false_ordered_keys_list = sorted(delay_dict_false.keys(), key=lambda x: len(delay_dict[x]), reverse=True)
In [ ]:
print len(delay_dict_false.keys())
print len(delay_dict.keys())
In [ ]:
trans_len_list = [len(x) for x in delay_dict.values()]
trans_len_list_false = [len(x) for x in delay_dict_false.values()]
fig = plt.figure()
plt.gca().set_position((.1, .3, .8, .6))
plt.hist(trans_len_list)
plt.grid()
plt.legend()
# plt.ylabel("PDF")
plt.xlabel("Number of transmissions over edges")
plt.suptitle("Histogram for number of transmissions over true edges\n%s" % TITLE)
trans_text = '''
Mean number of transmissions over true edges: %.4f
Median number of transmissions over true edges: %.4f
Mean number of transmissions over false edges: %.4f
Median number of transmissions over false edges: %.4f
Number of true edges = %d
Number of false edges = %d
''' % (np.mean(trans_len_list),
np.median(trans_len_list),
np.mean(trans_len_list_false),
np.median(trans_len_list_false),
len(delay_dict.keys()),
len(delay_dict_false.keys()))
fig.text(0.1, 0.000001, trans_text)
plt.savefig('/home/tribhu/Dropbox/Development/ETH/pml/graphs/%s-transmissions.png' % (fig_name))
plt.show()
#print 'Mean number of transmissions over true edges: ', np.mean(trans_len_list)
#print 'Median number of transmissions over true edges: ', np.median(trans_len_list)
#print 'Mean number of transmissions over false edges: ', np.mean(trans_len_list_false)
#print 'Median number of transmissions over false edges: ', np.median(trans_len_list_false)
In [ ]:
# xbins = range(0,400)
x = np.linspace(0, 300, 100)
In [ ]:
n1, n2 = interarrival_ordered_keys_list[5]
lambda_ = G[n1][n2]['weight']
print lambda_
In [ ]:
colors = matplotlib.rcParams['axes.color_cycle']
expo = scipy.stats.expon
plt.plot(x, expo.pdf(x, scale=lambda_), lw=2, color=colors[2], label = "$\\alpha_{i,j} = %.3f$"%lambda_)
plt.fill_between(x, expo.pdf(x, scale=lambda_), color=colors[2], alpha = .33)
fig = plt.hist(delay_dict[(n1, n2)], bins=range(0,400), normed=True)
plt.grid()
plt.legend()
plt.ylabel("PDF")
plt.xlabel("Inter-infection time (in Days)")
plt.suptitle("Inter-infection time across edges for a fixed transmission rate\n%s" % TITLE);
In [ ]:
# plt.show()
In [ ]:
plt.savefig('/home/tribhu/Dropbox/Development/ETH/pml/graphs/%s.png' % (fig_name))
In [ ]:
plt.show()
In [ ]: