Statistics
| Branch: | Revision:

nepatest_popbabel / scripts / comparator4validation.py @ master

History | View | Annotate | Download (3.34 KB)

1
import os
2
import sys
3
import networkx as nx
4
from pprint import pprint
5
import code
6
from prettytable import PrettyTable
7
import matplotlib
8
matplotlib.use('Agg')
9
from matplotlib import pyplot as plt
10
import code
11

    
12
def path_weight(G,path):
13
    tot = 0.0
14
    for i in range(0,len(path)-1):
15
        n=path[i]
16
        m=path[i+1]
17
        w=float(G.get_edge_data(n,m)['weight'])
18
        print"\t", w
19
        tot = tot + w
20
    return tot
21

    
22
def foo(G):
23
    numcouples=0
24
    numMultiPath=0
25
    for s in G.nodes():
26
        for t in G.nodes():
27
            if(s==t):
28
                continue
29
            numcouples+=1
30
            sps = list(nx.all_shortest_paths(G,s,t,'weight'))
31
            if(len(sps)>1):
32
                    '''print s,t
33
                    print sps
34
                    print path_weight(G,sps[0])
35
                    print path_weight(G,sps[1])
36
                    print "\n\n"'''
37
                    numMultiPath += len(sps)-1
38
    return (float(numcouples),float(numMultiPath))
39

    
40

    
41
folder=sys.argv[1]
42
graphFile=sys.argv[2]
43

    
44
#BASE TEORICA DI RIFERIMENTO
45
H = nx.read_edgelist(graphFile, delimiter=' ', data=(('weight',float),), create_using=nx.Graph(), nodetype=int)
46
G = H.to_directed()
47
print type(G)
48
#loadindexes = nx.load_centrality(G,normalized=False,weight='weight')
49
loadindexes = nx.load_centrality(G,normalized=False,weight='weight')
50
bcindexes = nx.betweenness_centrality(G,normalized=False,weight='weight',endpoints=False)
51
totb=sum(bcindexes.values())
52
pprint(loadindexes)
53
tott = sum(loadindexes.values())
54
print "tot =", tott
55

    
56

    
57
#VALORI DA PROTOCOLLO REALE
58
os.chdir(folder)
59

    
60
filenames=os.listdir(".")
61

    
62
res={}
63
totr=0
64
for f in filenames:
65
    if(f.endswith("_cdump.csv")):
66
        text=os.popen("tail "+f).read()
67
        f=f.strip("_cdump.csv")
68
        nodename=(f)
69
        lines=text.splitlines()
70
        last=lines[-1]
71
        cent=int(last.split(",")[-1])
72
        res[int(nodename.strip("h"))]=float(cent)
73
pprint(res)
74
totr = sum(res.values())
75
print "tot =", totr
76

    
77
#controlla se res = loadindexes
78

    
79
import operator
80

    
81
sorted_x = sorted(res.items(), key=operator.itemgetter(1), reverse=True)
82

    
83
t = PrettyTable(['PROTO', 'TEORIC_LOAD','CHECK_L'])
84
for c in sorted_x:
85
    proto = c[1]
86
    teoricL = loadindexes[c[0]]
87
    teoricBC = bcindexes[c[0]]
88
    if (proto<teoricL*0.99):
89
            strout='<'
90
    elif (proto>teoricL*1.01):
91
            strout='>'
92
    else:
93
            strout='='
94
    #checkL = (proto<=teoricL*1.01 and proto>=teoricL*0.99)
95
    #checkBC = (proto<=teoricBC*1.01 and proto>=teoricBC*0.99)
96
    t.add_row([proto,teoricL,strout])
97
print t
98
print "totProto=%f totTLoad=%f (totProto-totTLoad)=%f" %(totr, tott, totr - tott)
99

    
100
#numcouples, numMultiPath = foo(G)
101
#print numcouples, numMultiPath, numMultiPath/numcouples
102

    
103
x, y1 = zip(*sorted_x)#proto values
104
#code.interact(local=dict(globals(), **locals()))
105
plt.plot(tuple(range(len(x))), y1, 'ro', label="proto")
106

    
107
y2=[]
108
for n in x:
109
    #code.interact(local=dict(globals(), **locals()))
110
    y2.append(loadindexes[n])
111
plt.plot(tuple(range(len(x))), y2, 'b*', label="teoric")
112

    
113
#plt.xticks(x, xticks, rotation='vertical', fontsize=8)
114
plt.xlabel('Nodes by descending centrality id')
115
plt.ylabel('Babel Centrality index')
116
plt.legend(loc='upper right', fontsize=10, numpoints=1)
117
# Pad margins so that markers don't get clipped by the axes
118
plt.margins(0.2)
119
# Tweak spacing to prevent clipping of tick-labels
120
plt.subplots_adjust(bottom=0.3)
121
#fig = plt.gcf()
122
#plt.show()
123

    
124
plt.savefig("plot.pdf")
125

    
126