DGL 0.5ユーザガイド : 1 章 グラフ : 1.4 外部ソースからグラフを作成する (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 09/15/2020 (0.5.1)
* 本ページは、DGL の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
ユーザガイド : 1 章 グラフ : 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 は 4 の代わりに 8 エッジを持つことに注意してください。これは nx.path_graph(5) が無向 NetworkX グラフ networkx.Graph を構築する一方で DGLGraph は常に有向であるためです。無向 NetworkX グラフを DGLGraph に変換する際、DGL は内部的には無向エッジを 2 つの有向エッジに変換します。有向 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={})
Note: DGL はグラフを構築するために SciPy 行列と NetworkX グラフを内部的には tensor に変換します。そのため、これらの構築メソッドはパフォーマンス・クリティカル・パートのためのものではありません。
API 参照 : dgl.from_scipy(), dgl.from_networkx()
ディスクからグラフをロードする
グラフをストアするための多くのデータ形式があり総てのオプションを列挙することは不可能です。そのため、このセクションは特定の共通のものについての一般的な指針を与えるだけです。
カンマ区切り値 (CSV)
一つの非常に一般的な形式は CSV です、これはノード、エッジそしてそれらの特徴を表形式でストアします :
nodes.csv
年齢, タイトル |
43, 1 |
23, 3 |
… |
edges.csv
src, dst, 重み |
0, 1, 0.4 |
0, 3, 0.9 |
… |
このタイプのデータを python オブジェクト (e.g., numpy.ndarray) 内にロードするための既知の Python ライブラリ (e.g. pandas) があり、これらは DGLGraph を構築するために使用できます。バックエンド・フレームワークがディスクから tensor をセーブ/ロードするユティリティ (e.g., torch.save(), torch.load()) も提供する場合、グラフをビルドするために同じ原理に従うことができます。
次も参照 : エッジペア CSV から空手クラブ・ネットワークをロードするためのチュートリアル。
JSON/GML 形式
特に高速ではありませんが、NetworkX は様々なデータ形式をパースする多くのユティリティを提供します、それらは DGL にこれらのソースからグラフを間接的に作成することを可能にします。
DGL バイナリ形式
DGL はバイナリ形式でストアされたディスクからグラフをセーブしてロードするための API を提供します。グラフ構造は別にして、API はまた特徴データとグラフレベルのラベルデータも扱います。DGL はまたグラフを直接 S3 や HDFS にチェックポイントすることもサポートします。リファレンス・マニュアルは使用方法についてより詳細を提供します。
API 参照 : dgl.save_graphs(), dgl.load_graphs()。
以上