14
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pandas→networkx→pyvisでネットワーク分析&可視化(その2)

Last updated at Posted at 2019-09-26

前回の記事の続き。
pandasからnetworkxのデータへ直接流し込みが可能なfrom_pandas_edgelist

import networkx as nx
edges = pd.DataFrame({'source': ["A","A","A","B","B","C","C","D","E"],
                      'target': ["B","C","D","D","C","E","D","E","A"]})
G = nx.from_pandas_edgelist(edges, edge_attr=True)

image.png

これでedgeのリストからnetworkxの形式のデータへ変換できる。
が、エッジの属性は指定できるが、ノードの属性(サイズとか重みとか色とか)の指定ができない。
どうすればいいのか迷った結果、下記のように、ノードとその属性を表すdataframeを作ってから、to_dictを使ってdic形式に出力

nodes = pd.DataFrame({'node':["A","B","C","D","E"],
                 'weight':[1,2,1,4,3],
                 'color':["red","red","yellow","blue","~~"],
                 'label':["a","b","c","d","e"]})

  node_attr_dic = nodes.set_index("node").to_dict(orient="index")

image.png

で、これらを組み合わせるのは以下のとおり。

nx.set_node_attributes(G, node_attr_dic)

ミソは、

  • edgelistから生成した(edgelistに存在する)Gのノード名とnodesの列の1つに入っているノード名を同じにした上で、set_node_attributesでノードに属性を設定する。
  • その列をnodesのindex列に指定する点(例で言えば「node」の列)+to_dictの出力で、orient="index"にする点。
    node_attr_dicの中身は下記のような感じで、node:{各属性の値}という感じに入っている辞
    書を使えばよい。

image.png

確かめると、ちゃんと属性が入ってくれている!
image.png

あとは、graphmlなどネットワーク系の拡張子で出してもよいし、前回どうようpyvisで出力してもいい。これも今度書こうと思う。
networkxの開発者はpandasのto_dictを組み合わせることを念頭にX2.~系では
from_pandas_edgelistを追加したのだろうか?頭いいなあ。
networkx様様<(_ _)>

追記:少し修正があったので別の記事

14
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?