pandas 如何向星图数据集添加新边?

cuxqih21  于 2023-03-21  发布在  其他
关注(0)|答案(2)|浏览(173)

我需要使用stellargraph向Cora数据集添加一些额外的边。有没有一种方法可以在stellargraph库中向当前数据集添加边?

import stellargraph as sg
dataset = sg.datasets.Cora()

例如,在NetworkX中,我们可以使用add_edges_from(edgelist)向现有图添加一些边。

2w2cym1i

2w2cym1i1#

我最近遇到了一个类似的场景,来回转换到networkx是不可能的。具体来说,由于StellarGraph应该能够存储比networkx大得多的图形,因此将有一个点无法转换。
为了解决这个问题,我使用了the numpy loading capabilities of StellarGraph 1.2.1
使用StellarGraph,您可以将使用edge_arrays()的边数组转储到pandas中,然后将任何所需的边连接到pandas上。由于pandasStellarGraph都比networkx性能更好,因此它的内存占用更少。
下面是一个简短的例子:

import pandas as pd
from stellargraph import IndexedArray, StellarGraph

#### original data / graph

nodes = IndexedArray(index=['a', 'b', 'c', 'd'])
original_edges = pd.DataFrame(
    {
        'source' : [0, 1, 2, 3, 0],
        'target' : [1, 2, 3, 0, 2]
    }
)
original_graph = StellarGraph(
    nodes, 
    original_edges
)

#### new data

new_edges = pd.DataFrame(
    {
        'source' : [3, 3],
        'target' : [1, 2]
    }
)

#### new graph

new_graph = StellarGraph(
    nodes, 
    pd.concat(
        [
            original_edges,
            new_edges
        ],
        ignore_index=True
    )
)
hlswsv35

hlswsv352#

从0.9版本开始,你不能直接从stellargraph中完成它。你必须使用.to_networkx()将它转换回networkX格式,添加你的边,然后将它转换回stellargraph。

from stellargraph import StellarGraph
import networkx as nx

g = StellarGraph.to_networkx(dataset)
g.add_edges_from(edgelist)
new_dataset = StellarGraph.from_networkx(g)

相关问题