LoginSignup
13
10

More than 1 year has passed since last update.

[NetworkX]特定の属性を持つノードを検索したい

Last updated at Posted at 2016-01-15

概要

研究でNetworkXを使っているのですが,特定の属性を持つノードを検索したくなって,そのようなメソッドがあるか探してみた結果どうやらなさそうなので作りました.

コード

find_specific_attribute_node.py
import networkx as nx

def find_specific_attribute_node(G, attr, value):

    result = []

    d = nx.get_node_attributes(G, attr)

    for key, v in d.items():
        if(v == value):
            result.append(key)

    return result

動作例

以下の様なテストプログラムを走らせてみます.

find_node_test_for_qiita.py
import networkx as nx
from find_specific_attribute_node import find_specific_attribute_node as find_nodes
if __name__ == '__main__':

    Graph = nx.DiGraph()

    Graph.add_node('a', color = 'blue')
    Graph.add_node('b', color = 'red')
    Graph.add_node('c', color = 'blue')
    Graph.add_node('d', color = 'red')
    Graph.add_node('e', color = 'blue')
    Graph.add_node('f', color = 'red')

    print(find_nodes(Graph, 'color', 'blue'))

以下実行結果です.

実行結果
['a', 'e', 'c']

color属性にblueが設定されているノード名からなるリストが取得できていることがわかります.

説明

すごい適当に作ったものなのでアレですが,引数は以下の3つです.

  • G : 検索対象となるグラフ
  • attr : 検索したい属性名
  • value : 見つけたいattrの値

返り値は見つかったノード名のリストです.

おわりに

すごく要求されそうなものなので実際はNetworkXに似たような機能のメソッドが存在しているのかもしれません.誰か教えて下さい.

あと,メソッドとかの命名規則をちゃんと勉強してないので,「こういう名前をつけたほうがいい」とかありましたら教えていただけると僕が嬉しいです……

13
10
2

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
13
10