我是一个非常平庸的程序员,但我仍然希望使用igraph Python库来确定用户在给定论坛中的中心性对他以后对该论坛的贡献的影响。
我联系了另一个人,他使用NetworkX库做了类似的事情,但考虑到论坛当前的规模,计算准确的中心性指数几乎是不可能的 - 它需要太多时间。
这是他的代码:
我尝试使用igraph库编写类似的代码(该库允许进行快速估算而不是精确计算),但我似乎无法将数据写入CSV文件。
我的代码:
我在igraph文档中找不到如何调用单个顶点(或节点,在NetworkX术语中)的方法,所以我一直收到错误消息。也许我还忘了其他事情;我可能太差了,无法注意到:P
我做错了什么?
我联系了另一个人,他使用NetworkX库做了类似的事情,但考虑到论坛当前的规模,计算准确的中心性指数几乎是不可能的 - 它需要太多时间。
这是他的代码:
import networkx as netx
import sys, csv
if len(sys.argv) is not 2:
print 'Please specify an input graph.'
sys.exit(1)
ingraph = sys.argv[1]
graph = netx.readwrite.gpickle.read_gpickle(ingraph)
num_nodes = len(graph.nodes())
print '%s nodes found in input graph.' % num_nodes
print 'Recording data in centrality.csv'
# Calculate all of the betweenness measures
betweenness = netx.algorithms.centrality.betweenness_centrality(graph)
print 'Betweenness computations complete.'
closeness = netx.algorithms.centrality.closeness_centrality(graph)
print 'Closeness computations complete.'
outcsv = csv.writer(open('centrality.csv', 'wb'))
for node in graph.nodes():
outcsv.writerow([node, betweenness[node], closeness[node]])
print 'Complete!'
我尝试使用igraph库编写类似的代码(该库允许进行快速估算而不是精确计算),但我似乎无法将数据写入CSV文件。
我的代码:
import igraph
import sys, csv
from igraph import *
graph = Graph.Read_Pajek("C:\karate.net")
print igraph.summary(graph)
estimate = graph.betweenness(vertices=None, directed=True, cutoff=2)
print 'Betweenness computation complete.'
outcsv = csv.writer(open('estimate.csv', 'wb'))
for v in graph.vs():
outcsv.writerow([v, estimate[vs]])
print 'Complete!'
我在igraph文档中找不到如何调用单个顶点(或节点,在NetworkX术语中)的方法,所以我一直收到错误消息。也许我还忘了其他事情;我可能太差了,无法注意到:P
我做错了什么?
vs
是图形对象的一个属性,它的行为类似于顶点列表,因此将其用作estimate
的索引是不正确的(因为单独使用vs
是未定义的变量)。您应该使用v.index
代替vs
。 - Tamás