OSMnx Tutorial 8 (Боинг) - Центральность - PullRequest
0 голосов
/ 25 марта 2019

У меня есть вопрос из двух частей, относящийся к учебнику OSMnx Boeing 8 - Анализ централизации уличных сетей.Во-первых, у меня есть вопрос знаний о центральности краев, а затем вопрос на основе кода относительно центральности краев.Моя цель - вычислить близость границ и центральность между станциями в разных местах.

1.Центральность краев

Для меня хорошо работает следующий код:

# edge closeness centrality: convert graph to a line graph so edges become nodes and vice versa
edge_centrality = nx.closeness_centrality(nx.line_graph(G))

# list of edge values for the original graph
ev = [edge_centrality[edge + (0,)] for edge in G.edges()]

# color scale converted to list of colors for graph edges
norm = colors.Normalize(vmin=min(ev)*0.8, vmax=max(ev))
cmap = cm.ScalarMappable(norm=norm, cmap=cm.inferno)
ec = [cmap.to_rgba(cl) for cl in ev]

Вопрос: Кто-нибудь может объяснить, почему в коде нормализации минимальное значение ребра умножается на 0,8, амаксимальное значение установлено на максимальное значение края?Я не слишком знаком с литературой, поэтому любые советы будут оценены.

2.Центральность между краями

Я пытаюсь вычислить центральность между краями аналогично приведенному выше коду для центральности краев на том же графике в примере.Я попробовал это и получил следующее:

# edge betweenness centrality
edge_bcentrality = nx.edge_betweenness_centrality(G)

# list of edge values for the orginal graph
ev1 = [edge_bcentrality[edge + (0,)] for edge in G.edges()]

# color scale converted to list of colors for graph edges
norm = colors.Normalize(vmin=min(ev1)*0.8, vmax=max(ev1))
cmap = cm.ScalarMappable(norm=norm, cmap=cm.inferno)
ec = [cmap.to_rgba(cl) for cl in ev1]

# color the edges in the original graph with betweeness centralities in the line graph
fig, ax = ox.plot_graph(G, bgcolor='k', axis_off=True, node_size=0, node_color='w', node_edgecolor='gray', node_zorder=2,
                        edge_color=ec, edge_linewidth=1.5, edge_alpha=1)

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-14-6ee1d322067c> in <module>()
      1 # list of edge values for the orginal graph
----> 2 ev1 = [edge_bcentrality[edge + (0,)] for edge in G.edges()]
      3 
      4 # color scale converted to list of colors for graph edges
      5 norm = colors.Normalize(vmin=min(ev)*0.8, vmax=max(ev))

KeyError: (53090322, 53082634, 0)

Если бы кто-нибудь посоветовал лучший способ вычислить центральность между краями, я был бы очень признателен, так как я все еще новичок.Кроме того, было бы полезно, если бы кто-то мог поделиться лучшим способом приступить к нормализации.

Спасибо за ваше время,

BC

...