测量图中节点的“远程性”

时间:2019-04-28 09:36:49

标签: networkx

我在古老的BBS游戏“ TradeWars 2002”中绘制了图形的所有边缘。有1000个节点。尽管节点之间的大多数边是无向的,但该图正式是有向图。该图是牢固连接的。

我在networkx中对宇宙建模。我想使用networkx方法来识别网络中的“最远端”节点。我不知道如何用图论术语表达“最远的”。但是我的想法是,当有人在其他两个任意节点之间转换时,很少会碰到节点。还有这样一个想法,即在连接良好的节点的边缘,可能有一串节点沿着一条终止的单一路径延伸。

我对我想象中的节点733进行了可视化。与其他连接良好的节点相比,几乎不可能有人偶然发现了该节点。

我可以从networkx库中使用什么来量化“远程”程度?

enter image description here

这是整个宇宙:

enter image description here

2 个答案:

答案 0 :(得分:2)

  

但是我的想法是,当有人在其他两个任意节点之间转换时,很少会碰到节点。

正如@Joel所提到的,有许多集中度度量可用,并且它们之间通常存在很强的相关性,因此其中许多可能会或多或少地为您提供所需的信息。

话虽这么说,但我认为最能反映您的直觉的中心度度量标准是基于random walks。其中一些计算成本很高(尽管有关此方面的一些最新改进,请参见this paper),但幸运的是有一个强大的correspondence between the Eigenvector centrality and the frequency with which nodes are visited by a random walker

networkx中的实现可通过networkx.algorithms.centrality.eigenvector_centrality获得。

答案 1 :(得分:1)

networkx收集了用于解决此类问题的算法:centrality。例如,您可以使用最简单的函数:closeness_centrality

# Create a random graph
G = nx.gnp_random_graph(50, 0.1)
nx.closeness_centrality(G)

{0: 0.3888888888888889,
 1: 0.45794392523364486,
 2: 0.35507246376811596,
 3: 0.4375,
 4: 0.4083333333333333,
 5: 0.3684210526315789,
...
# Draw the graph
labels = {n: n for n in G.nodes}
nx.draw(G, with_labels=True, labels=labels)

enter image description here

可以通过返回closeness_centrality最少的节点来列出最远(较不中央)的节点(请注意,上图中的节点ID和蓝色圆圈中的节点:

c = nx.closeness_centrality(G)
sorted(c.items(), key=lambda x: x[1])[:5]

[(48, 0.28823529411764703),
 (7, 0.33793103448275863),
 (11, 0.35251798561151076),
 (2, 0.35507246376811596),
 (46, 0.362962962962963)]