このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

NetworkX(主にDiGraph)の使い方 (2)

  1. 孤立頂点も表現できるので、初期化には辞書形式がいいみたい; nx.DiGraph({'a':['c', 'd'], 'b':, 'c':['a'], 'e':})、bとeは孤立している。JSONで言うプロパティが、各頂点ごとのスターを表現している。孤立頂点以外は明示的に [] を書かなくてもいい。
  2. 上記の形式は、dict_of_listsと呼ぶ。変換はメソッドじゃなくて、nx.to_dict_of_lists関数。nx.to_dict_of_lists関数に頂点集合を指定して誘導サブグラフを取ることもできる。
  3. 辺の属性をエンコードしたいときは、dict_of_dicts関数。
  4. nx.to_edgelist だと孤立頂点は取れない。辺属性は取れる。
  5. G.graphで取れるグラフ属性、G.node[x] で取れる頂点属性がエンコードできない。
  6. Catyのgvモジュールのデータ型を使えばOKだ。dict_of_lists形式。dict_of_dicts形式もなんとかなるか?
  7. JSONとのIOは、from networkx.readwrite import json_graph as jg とかする。
  8. jg.node_link_data(G) でJSONデータ。
  9. jg.node_link_graph(d) でその逆。だが、なんか制約があるようだ。
  10. jg.adjacency_data(G), jg.adjacency_graph(d) も同様。
  11. ツリーなら、jg.tree_data(G, root)、jg.tree_graph(d)。
  12. 行列への変換では、nx.adjacency_matrix、nx.incidence_matrix も使える。
  13. グラフの形状をイミュータブルにするには、nx.freeze(G) を使う。