1.4 从外部来源创建图形

(中文版)

从外部源构建DGLGraph的选项包括:

  • 从外部Python库转换图形和稀疏矩阵(NetworkX和SciPy)。

  • 从磁盘加载图表。

本节不涵盖通过从其他图形转换生成图形的函数。有关它们的概述,请参阅API参考手册。

从外部库创建图表

以下代码片段是从SciPy稀疏矩阵和NetworkX图创建图的一个示例。

>>> import dgl
>>> import torch as th
>>> import scipy.sparse as sp
>>> spmat = sp.rand(100, 100, density=0.05) # 5% nonzero entries
>>> dgl.from_scipy(spmat)                   # from SciPy
Graph(num_nodes=100, num_edges=500,
      ndata_schemes={}
      edata_schemes={})

>>> import networkx as nx
>>> nx_g = nx.path_graph(5) # a chain 0-1-2-3-4
>>> dgl.from_networkx(nx_g) # from networkx
Graph(num_nodes=5, num_edges=8,
      ndata_schemes={}
      edata_schemes={})

请注意,当从nx.path_graph(5)构造时,生成的DGLGraph有8条边而不是4条。这是因为nx.path_graph(5)构造了一个无向的NetworkX图networkx.Graph,而DGLGraph始终是有向的。在将无向的NetworkX图转换为DGLGraph时,DGL内部将无向边转换为两条有向边。使用有向的NetworkX图networkx.DiGraph可以避免这种行为。

>>> nxg = nx.DiGraph([(2, 1), (1, 2), (2, 3), (0, 0)])
>>> dgl.from_networkx(nxg)
Graph(num_nodes=4, num_edges=4,
      ndata_schemes={}
      edata_schemes={})

注意

DGL 内部将 SciPy 矩阵和 NetworkX 图转换为张量以构建图。 因此,这些构建方法不适用于性能关键部分。

查看API:dgl.from_scipy(), dgl.from_networkx().

从磁盘加载图表

有许多数据格式用于存储图,不可能列举所有选项。因此,本节仅提供一些关于某些常见格式的一般指导。

逗号分隔值 (CSV)

一种非常常见的格式是CSV,它以表格格式存储节点、边及其特征:

nodes.csv

年龄, 标题

43, 1

23, 3

edges.csv

源节点, 目标节点, 权重

0, 1, 0.4

0, 3, 0.9

有一些已知的Python库(例如pandas)可以将这种类型的数据加载到Python对象中(例如,numpy.ndarray),然后可以用来构建一个DGLGraph。如果后端框架还提供了从磁盘保存/加载张量的工具(例如,torch.save()torch.load()),可以遵循相同的原则来构建图。

另请参阅:从边对CSV加载空手道俱乐部网络的教程

JSON/GML 格式

虽然速度不是特别快,但NetworkX提供了许多工具来解析 各种数据格式 这间接允许DGL从这些来源创建图。

DGL 二进制格式

DGL 提供了 API 来保存和加载以二进制格式存储在磁盘上的图。除了图结构外,这些 API 还处理特征数据和图级标签数据。DGL 还支持直接将图检查点保存到 S3 或 HDFS。参考手册提供了更多关于用法的详细信息。

查看API:dgl.save_graphs(), dgl.load_graphs().