Я пытаюсь создать ориентированный граф из очень большого набора данных (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?