3

我正在尝试编写用于获取 Twitter 网络属性的代码。

但是我的代码出错了。我不知道它是怎么发生的。

错误是这样的:

Traceback (most recent call last):
  File "Network_property.py", line 14, in <module>
    followee = line.strip().split('\t')[1]
IndexError: list index out of range

代码是这样的:

import os, sys
import time
import networkx as nx


DG = nx.DiGraph()

ptime = time.time()
j = 1

#for line in open("./US_Health_Links.txt", 'r'):
for line in open("./test_network.txt", 'r'):
    follower = line.strip().split('\t')[0]
    followee = line.strip().split('\t')[1]

    DG.add_edge(follower, followee)

    if j%1000000 == 0:
        print j*1.0/1000000, "million lines done", time.time() - ptime
        ptime = time.time()
    j += 1

print nx.number_connected_components(DG)

我收集了一些这样的链接数据:

1000    1001
1000    1020191
1000    10267352
1000    10957902
1000    11039092
1000    1118691
1000    11882
1000    1228281
1000    1247041
1000    12965332
1000    13027572
1000    13075072
1000    13183162
1000    13250162
1000    13326292
1000    13452672
1000    13844892
1000    14061830
1000    1406481
1000    14134703
1000    14216951
1000    14254402
1000    14258044
1000    14270791
1000    14278978
1000    14313332
1000    14392970
1000    14441172
1000    14497568
1000    14502775
1000    14595635
1000    14620544
1000    14632615
1000    14680596
1000    14956164
1000    14998341
1000    15132211
1000    15145450
1000    15285998
1000    15288974
1000    15300187
1000    1532061
1000    15326300

“1000”是follower,其他是followee。

+

我想得到(1)连接组件的数量,(2)最大连接组件中节点的分数,(3)入度的平均值和中值,(4)出度的平均值和中值,(5)直径,和 (6) 聚类系数

但是网站“networkx.lanl.gov”不起作用。

有人帮我吗?

4

2 回答 2

1

该错误与networkx无关。正在发生的事情是,对于某些行line.strip().split('\t')仅返回一个字段。我猜问题出在文件中的空行上。相比:

>>> ''.split("\t")
['']
>>> ''.split("\t")[1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>>

因此,空行可能会导致问题。您可以明确检查这一点,例如,通过添加

if not line:
    continue

在你的for循环开始。

另请查看networkx.read_edgelist,如果您不需要print显示进度的语句,这应该是最简单的。

于 2011-11-23T16:31:10.987 回答
1

您提供的network.txt文件示例没有选项卡;它有空格。如果您更改split('\t')to的实例split(),它将在任何空白处拆分,因此无论文件是否包含空格或制表符,它都会处理您的文件。

于 2011-11-23T17:00:33.803 回答