Проблема установки атрибутов ребер из центральности iGraph - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь использовать iGraph для вычисления центральности ребер графа для графика, полученного из osmnx, но значения прикрепляются правильно.

Я могу вычислить центральность, но при установке атрибута ребра в исходный граф,некоторые ребра не получают значения, а другие изменяют свой атрибут (osmid), как видно при отображении атрибутов ребер в QGIS.

https://imgur.com/a/JrL6znI

Я предполагаю, что это ошибка в моем кодедля создания словаря из ключа ребер графа и значения близости.

Я новичок в Python, поэтому не могу понять это.Любая помощь приветствуется.

import igraph as ig
import networkx as nx
import osmnx as ox

ox.config(use_cache=True, log_console=True)
weight = 'length'

G = ox.graph_from_address('Chippendale, New South Wales', network_type='drive')
G_nx = nx.relabel.convert_node_labels_to_integers(G_nx)

G_ig = ig.Graph(directed=True)
G_ig.add_vertices(list(G_nx.nodes()))
G_ig.add_edges(list(G_nx.edges()))
G_ig.vs['osmid'] = list(nx.get_node_attributes(G_nx, 'osmid').values())
G_ig.es[weight] = list(nx.get_edge_attributes(G_nx, weight).values())

cc = G_ig.closeness(vertices=None, mode='ALL', cutoff=None, weights=weight, normalized=True)

cc_dict = dict(zip(G.edges, cc))

nx.set_edge_attributes(G, cc_dict, 'closeness')
ox.save_graph_shapefile(G)

ОБНОВЛЕНИЕ Для всех, кто заинтересовался, я решил эту проблему несколько.Я оценил центральность узлов с помощью igraph, а затем добавил атрибуты ребер в качестве среднего значения узлов to / from.

cc = dict(zip(G.nodes, closeness))

nx.set_node_attributes(G, cc, 'closeness')

nodes = list(G.nodes)
data_nodes = list(G.nodes(data=True))
for edge in G.edges(data=True):
    node_from = data_nodes[nodes.index(edge[0])][1][att_name]
    node_to = data_nodes[nodes.index(edge[1])][1][att_name]
    average = (((node_from + node_to) / 2))
    edge[2][att_name] = average
...