'How to add new edges to the stellargraph dataset?
I need to add some extra edges to Cora dataset using stellargraph. Is there ane way to add edges to the current dataset in stellargraph library?
import stellargraph as sg
dataset = sg.datasets.Cora()
For example in NetworkX, we can add some edges to the existing graph using add_edges_from(edgelist).
Solution 1:[1]
You can't do it directly from stellargraph since version 0.9.
You'll have to use .to_networkx() to convert it back to networkX format, add you edges and then convert it back to 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)
Solution 2:[2]
I recently ran into a similar scenario and converting back-and-forth to networkx format was not possible. Specifically, since StellarGraph is supposed to be capable of storing graphs much larger than networkx, there will be a point at which converting would not be possible.
To get around this, I used the numpy loading capabilities of StellarGraph 1.2.1.
With StellarGraph, you can dump the edge array with edge_arrays() into pandas, then concatenate any desired edges onto that. It is much lighter memory-wise, since pandas and StellarGraph both perform better than networkx.
Here is a short example:
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
)
)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 | Jaime Hernandez |
