Использование Python networkx для изучения свойств сети - PullRequest
3 голосов
/ 23 ноября 2011

Я пытаюсь создать код для получения сетевых свойств 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" является подписчиком, а другие подписчиками.

+

Я хочу получить результаты (1) числа подключенных компонентов, (2) доля узлов в наибольшем связанном компоненте, (3) среднее и среднее значение степени, (4) среднее значение и среднее значение степени отклонения, (5) диаметр и (6) коэффициент кластеризации

Носайт "networkx.lanl.gov" не работает.

Есть кто-нибудь, кто мне поможет?

Ответы [ 2 ]

1 голос
/ 23 ноября 2011

Пример файла network.txt, который вы указали, не имеет вкладок;у него есть пробелы.Если вы измените свои экземпляры с split('\t') на split(), он будет разбит на любые пробелы, поэтому он будет обрабатывать ваши файлы, независимо от того, есть ли у них пробелы или табуляции.

1 голос
/ 23 ноября 2011

Ошибка не имеет ничего общего с 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, показывающий прогресс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...