4
8

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 1 year has passed since last update.

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

Last updated at Posted at 2019-10-08

前回のつづき。

1.前回

from_pandas_edgelist。で読み込んだノードに属性を付ける方法として、networkxのset_node_attributesを使って

nx.set_node_attributes(G, node_attr_dic)

でnode_attr_dicという風に辞書を使えばOKと書いた。

2.失敗

しかしこれをpyvisで読み込ませてみると、せっかく入れたnode_attr_dicがすべて消えてしまうという素敵なことが起こっていた!
振り出しにもどる。

3.修正

ということで、結局辞書を使わず、最初に存在するエッジ情報(edges)からnode_dfを生成し、そこにpyvis用の属性情報を追加するという流れでやることに。

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)

これでedgesというデータフレームを作成してから、

def re_construct_network(edge_df):
    #nodeの生成
    G = nx.DiGraph
    G = nx.from_pandas_edgelist(df2,source="source",target="target") 

    #node_df生成。一回edgelistからnetworkxを経由してノードリストを生成しておく。
    node_df=pd.DataFrame(list(G.nodes()),columns=['nodes']).sort_values(by='nodes')  
     #この段階でnode_dfに列を追加して属性候補を入れても良い。  

    #edgelistの再生成()
    edges=[]
    for index, row in edge_df.iterrows():
        edges.append((row[0],row[1]))
    
    #nodeをpyvisに読ませる+同時にedgeをpyvisに読ませる。
    g = Network(height='500px', width='750px',directed=True)
    node_id = node_df['nodes'].tolist() #
    node_x = ~~(出力時のx位置) #lambda式などでの処理もOK
    node_y = ~~(出力時のy位置)
    node_value = node_df['///'].tolist()
    node_title = node_df['~~~'].tolist()
    node_color = node_df['$$$'].apply(setcolor).tolist() #色指定の関数を外に出してlamda式で使う。
    node_label = node_df["%%%"].astype(str).tolist()
        
    #add_nodesで指定できるのが ["size", "value", "title", "x", "y", "label", "color"]
    g.add_nodes(node_id,label=node_label, title=node_title,color=node_color)
    g.add_edges(edges)
    g.toggle_physics(True) #動かしたい場合
    g.show_buttons(True)   #出力後の調整バーを入れる場合
    g.show("network_pyvis.html")

以下を実行すればnetwork_pyvis.htmlとして出力結果が見られる。

re_construct_network(edge_df)

g.add_nodesとg.add_edgesをする際にIDとして
node_idを指定して、node_idとedge_dfのsourceとtargetの要素が一致する
必要がある点がミソ。
ちょっと手間がかかるけど、node_dfに色々属性渡して保持できるのは便利。

4
8
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
4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?