Wiki-Vote
In [1]:
from directed_graph import DirectedGraph
from directed_graph import topk
import sys
import matplotlib.pyplot as plt
def Run_LTM(graph, seeds, rounds, centrality):
v, e = graph.size()
print("* running LTM({}) TOP {} {} - graph size: {} {}".format(rounds, len(seeds), centrality, v, e))
influenced, kept, steps = graph.ltm(seeds, rounds)
print("** influenced(%d) kept(%d) steps(%d)" % (len(influenced), len(kept), steps))
return len(influenced), len(kept), steps
In [2]:
if __name__ == '__main__':
rounds = 10
seed = 100
graph = DirectedGraph.from_filename('wiki-Vote.txt')
nodes, edges = graph.size()
print('# Edges = %d\tAverage Clustering = %f' % (graph.countEdges(), graph.toUndirect().average_clustering()))
sys.stdout.flush()
In [3]:
print('# Eigenvector Centrality...')
diffsum, cscores = graph.eigenvector_centrality()
# print(diffsum)
# print(cscores)
top_eigenc = [a for a, b in topk(cscores, seed)]
print(top_eigenc)
print('# Done')
sys.stdout.flush()
In [4]:
print('# Betweennes centrality...')
bet, D = graph.betweennessEx()
# print(bet)
top_bet = [a for a, b in topk(bet, seed)]
print(top_bet)
print('# Done')
sys.stdout.flush()
In [5]:
print("# Lin's index...")
lin = graph.lin_index(D)
#print(lin)
top_lin = [a for a, b in topk(lin, seed)]
print(top_lin)
print('# Done')
sys.stdout.flush()
In [6]:
for _ in range(100):
seed = 100
max_lin_influenced, _, lin_rounds = Run_LTM(graph, top_lin[:seed], rounds, 'Lin')
max_eigenc_influenced, _, eigenc_rounds = Run_LTM(graph, top_eigenc[:seed], rounds, 'Eigenvector')
max_bet_influenced, _, bet_rounds = Run_LTM(graph, top_bet[:seed], rounds, 'Betweenness')
lin_max_seed = seed
eigenc_max_seed = seed
bet_max_seed = seed
while seed > 0 and max_lin_influenced < nodes:
seed -= 5
influenced_lin, _, _rounds = Run_LTM(graph, top_lin[:seed], rounds, 'Lin')
if max_lin_influenced <= influenced_lin:
max_lin_influenced = influenced_lin
lin_max_seed = seed
lin_rounds = _rounds
else:
break
seed = 100
while seed > 0 and max_eigenc_influenced < nodes:
seed -= 5
influenced_eigenc, _, _rounds = Run_LTM(graph, top_eigenc[:seed], rounds, 'Eigenvector')
if max_eigenc_influenced <= influenced_eigenc:
max_eigenc_influenced = influenced_eigenc
eigenc_max_seed = seed
eigenc_rounds = _rounds
else:
break
seed = 100
while seed > 0 and max_bet_influenced < nodes:
seed -= 5
influenced_bet, _, _rounds= Run_LTM(graph, top_bet[:seed], rounds, 'Betweenness')
if max_bet_influenced <= influenced_bet:
max_bet_influenced = influenced_bet
bet_max_seed = seed
bet_rounds = _rounds
else:
break
In [7]:
print("Lin's Index: influenced={} seeds={} rounds={}".format(max_lin_influenced,lin_max_seed,lin_rounds))
print("BC: influenced={} seeds={} rounds={}".format(max_bet_influenced,bet_max_seed,bet_rounds))
print("E: influenced={} seeds={} rounds={}".format(max_eigenc_influenced,eigenc_max_seed,eigenc_rounds))
In [8]:
%matplotlib inline
In [9]:
fig, ax = plt.subplots()
bar_width = 0.35
opacity = 0.4
rects1 = plt.bar(1, max_lin_influenced, width=bar_width, alpha=opacity, color='b', label='Lin')
rects2 = plt.bar(2, max_eigenc_influenced, width=bar_width, alpha=opacity, color='r', label='Eigenvector')
rects3 = plt.bar(3, max_bet_influenced, width=bar_width, alpha=opacity, color='y', label='Betweenness')
plt.xlabel('Centrality Measures')
plt.ylabel('Influenced')
plt.title('Influenced Comparison')
plt.xticks([1.2,2.2,3.2], ('L', 'E', 'B'))
plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
plt.tight_layout()
plt.savefig('wikivote.png')
plt.show()
In [ ]:
In [ ]: