【发布时间】:2019-05-07 18:39:32
【问题描述】:
我正在使用 Python 库 OSMNx 来获取给定街道网络 G 的中介中心性。从我所见,模块 osmnx.stats.extended_stats(G, bc=True) 使用 NetworkX 模块 networkx.betweenness_centrality(G, normalized=True, weight=None) 将所有边权重设置为相等来计算中介。由于边长已经嵌入到 G 中,因此可以直接将其用作权重。我仍然无法找到一种方法来做到这一点。
如何使用这两个库将权重设置为 1/length?
请考虑以下示例给出的图表
import osmnx as ox
import networkx as nx
#Using OSMNx
G = ox.graph_from_bbox(37.79, 37.78, -122.41, -122.43, network_type='drive')
stats = ox.extended_stats(G,bc=True)
bet1 = stats["betweenness_centrality"]
#Using NetworkX
bet2 = nx.betweenness_centrality(G, weight=None)
这是我迄今为止尝试过的:
import pandas as pd
l = nx.get_edge_attributes(G, 'length')
l = pd.Series(l).to_frame()
w=1/l
w = w.to_dict(orient="index")
nx.set_edge_attributes(G, w, 'w')
bet3 = nx.betweenness_centrality(G, weight='w')
但我得到的结果与不使用权重完全相同。
【问题讨论】:
-
你看过边缘数据了吗?例如 g.edges(data=True)?
-
是的,我有。与每条边相关的数据都在那里,可以用作权重。但是,据我所见,设置
weight=None、weight='length'或weight='w'(w=1/length)返回相同的输出。
标签: python openstreetmap networkx