Добавление ребер с помощью add_edge_list (graph-tool) из кадра данных Pandas в цикле записывает нули в карту свойств - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь создать ориентированный граф из очень большого набора данных (200 миллионов ребер), используя graph-tool .Я использую chunksize в Pandas для работы с данными из-за ограничений памяти.

Данные (output.csv) выглядят так:

 195795, 6661384
 195795, 6661990
 195795, 6663066
 195795, 6664808
 195795, 6986059
 195795, 6988290

Отображается в виде списка смежных вершин иЯ хочу создать график из этих данных и назначить числа, которые описывают вершину, как имя вершины.

Для небольшого набора данных, который не требует разделения, я делаю следующее:

g=Graph(directed=True)    
testdata = pd.read_csv('smalldataset',header=None,engine='python')
df=testdata.iloc[:,[0,1]]
vmap = g.add_edge_list(df.values, hashed=True)

Однако для своего большого набора данных я делаю следующее, я изменил размер куска на меньший, чтобы показать эффект:

g=Graph(directed=True)
rowcount=3
for chunk in pd.read_csv('output.csv', header=None, 
    chunksize=rowcount):
    df=chunk.iloc[:,[0,1]]
    vmap = g.add_edge_list(df.values, hashed=True)

Вывод vmap:

vmap.get_array().tolist()

равен

[0, 0, 0, 0, 18308712, 195795, 18308713, 18308714]

дает только окончательный "rowcount" вершин с фактическими именами вершин, первые свойства по какой-то причине установлены в 0.Если я сделаю это шаг за шагом, я смогу увидеть, что первые свойства обнуляются, когда цикл повторяется.Следовательно, это означает, что все вершины, кроме тех, которые находятся в последней итерации цикла, имеют имена, присвоенные как «0».

Как правильно выполнить цикл по большому набору данных Pandas, как этот (в чанках)используя add_edge_list?

...