#only works for undirected graphs def degreeCentralization(): maxVar = 0.0 maxVar = (len(g.nodes)-1) * (len(g.nodes)-2) g.nodes[0].totaldegree var = 0.0 max = totaldegree.max for x in range(totaldegree.max+1): list = (totaldegree == x) for node in list: var += (max - node.totaldegree) return var/maxVar # I am not sure what this works on. I would only completely trust # the results on undirected graphs. Graphs do NOT have to be connected def betweenCentralization(): numNodes = len(g.nodes) maxVar = ((numNodes -1.0) * (numNodes-2.0))*(numNodes-1) g.nodes[0].betweenness max = betweenness.max var = 0.0 for node in g.nodes: var += (max - node.betweenness) return var/maxVar # only works for undirected, connected graphs def closeCentrality(node): total = 0.0 numVertices = len(g.nodes) - 1 for nodeTwo in g.nodes: list = node.unweightedShortestPath(nodeTwo) total += len(list) return numVertices/total # only for undirected, connected graphs def closeCentralization(): numNodes = len(g.nodes) point = (1.0 - (numNodes-1.0)/(((numNodes-2.0) *2.0)+1.0)) maxVar = (numNodes-1)*point var = 0.0 if(Node.getField("closeness") == None): addNodeField("closeness", Types.DOUBLE, 0.0) for node in g.nodes: centrality = closeCentrality(node) node.closeness = centrality max = closeness.max for node in g.nodes: var += (max - node.closeness) return var/maxVar