Python で NetworkX ライブラリを使用するのは初めてです。
Pajek 形式のファイルをインポートするとします。
import networkx as nx
G=nx.read_pajek("pajek_network_file.net")
G=nx.Graph(G)
私のファイルの内容は次のとおりです(Pajekでは、ノードは「頂点」と呼ばれます):
*Network
*Vertices 6
123 Author1
456 Author2
789 Author3
111 Author4
222 Author5
333 Author6
*Edges
123 333
333 789
789 222
222 111
111 456
ここで、ネットワーク内のノード間のすべての最短パスの長さを計算したいと思います。ライブラリのドキュメントに従って、この関数を使用しています。
path = nx.all_pairs_shortest_path_length(G)
戻り値: lengths – ソースとターゲットをキーとする最短パスの長さのディクショナリ。
私が得ているリターン:
print path
{u'Author4': {u'Author4': 0, u'Author5': 1, u'Author6': 3, u'Author1': 4, u'Author2': 1, u'Author3': 2}, u'Author5': {u'Author4': 1, u'Author5': 0, u'Author6': 2, u'Author1': 3, u'Author2': 2, u'Author3': 1}, u'Author6': {u'Author4': 3, u'Author5': 2, u'Author6': 0, u'Author1': 1, u'Author2': 4, u'Author3': 1}, u'Author1': {u'Author4': 4, u'Author5': 3, u'Author6': 1, u'Author1': 0, u'Author2': 5, u'Author3': 2}, u'Author2': {u'Author4': 1, u'Author5': 2, u'Author6': 4, u'Author1': 5, u'Author2': 0, u'Author3': 3}, u'Author3': {u'Author4': 2, u'Author5': 1, u'Author6': 1, u'Author1': 2, u'Author2': 3, u'Author3': 0}}
ご覧のとおり、読むのも、後で使用するのも非常に困難です...
理想的には、次のような形式のリターンが必要です。
source_node_id, target_node_id, path_length
123, 456, 5
123, 789, 2
123, 111, 4
つまり、ノード ラベルを表示するだけでなく、ノード ID のみを使用して (または少なくともノード ID を含めて) リターンを取得する必要があります。そして、可能なすべてのペアを、対応する最短パスとともに 1 行で取得するには...
これは NetworkX で可能ですか?