使用Igraph库确定中间性

我是一个非常非常平庸的程序员,但是我仍然打算使用igraph python库来确定用户在给定论坛中的中心地位的影响,以预测他对该论坛的后续贡献.

我与使用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属性可以访问igraph中的各个顶点. vs的行为类似于列表,因此对其进行迭代将产生图的顶点.每个顶点由Vertex类的实例表示,并且顶点的索引由其index属性给出. (请注意,igraph对顶点和边都使用连续的数字索引,因此这就是为什么您需要index属性并且不能直接使用原始顶点名称的原因).

我假设您需要的是最初存储在输入文件中的顶点的名称.名称存储在name或id顶点属性中(取决于您的输入格式),因此您可能需要的是:

for v in graph.vs:
    outcsv.writerow([v["name"], estimate[v.index]])

请注意,通过将顶点对象索引为字典来访问顶点属性.另一种选择是直接将vs对象用作字典;这将为您提供一个包含所有顶点的给定vertex属性值的列表.例如.:

from itertools import izip

for name, est in izip(graph.vs["name"], estimate):
    outcsv.writerow([name, est])

使用生成器表达式的更快版本:

outcsv.writerows(izip(graph.vs["name"], estimate))
上一篇:将顶点属性添加到python中的加权igraph图


下一篇:绘制根节点位于顶部的树状图