Степень, Близость и Ранг Престиж - PullRequest
0 голосов
/ 28 августа 2018

Я хочу найти эти три Престижных меры для существующего графа, используя python :

  1. Степень Престиж
  2. Proximity Prestige
  3. Ранг Престиж

Могу ли я использовать networkx для этой цели? Если нет, то какую библиотеку я могу использовать и как это сделать. Любые ссылки или ссылки приветствуются.

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018
n_nodes = 5
d = nx.gnp_random_graph(n_nodes, 0.5, directed=True)

degree_prestige = dict((v,len(d.in_edges(v))/(n_nodes-1)) for v in d.nodes())
print("DEGREE PRESTIGE :\n")

for i in degree_prestige:
    print(i, " : ", degree_prestige[i])

distance = []

temp_dis = 0
n = 0
for dest in d.nodes:
    temp_dis = 0
    n = 0
    for src in d.nodes:
        if (nx.has_path(d,src,dest) == True):
            temp_dis = temp_dis + nx.shortest_path_length(d,source = src,target = dest)
            n = n + 1
    if temp_dis == 0:
        distance.append([dest, 0])
    else:
        distance.append([dest, temp_dis/(n - 1)])
print("\nPROXIMITY PRESTIGE :\n")
for i in distance:
    print(str(i[0]) + " : " + str(i[1]))

prominance = np.random.randint(1, 4, size=n_nodes)
print("\nASSUME PROMINANCE :\n")
print(prominance)
rank_prestige = np.zeros([n_nodes], dtype = int)

path_matrix = np.zeros([n_nodes, n_nodes], dtype = int)
i = 0
j = 0
for src in d.nodes:
    for dest in d.nodes:
        if d.has_edge(dest, src):
            path_matrix[i][j] = 1
        j = j+1
    j = 0
    i = i+1
for i in range(n_nodes):
    pr_i = 0
    for j in range(n_nodes):
        pr_i = pr_i + path_matrix[i][j] * prominance[j]
    rank_prestige[i] = pr_i

print("\nRANK PRESTIGE :\n")
print(rank_prestige)
0 голосов
/ 29 августа 2018

Да, но, насколько я знаю, вы можете сами принять меры.
Например, рассмотрим престиж Степени , определенный как количество входящих ссылок на узел, деленное на общее возможное количество входящих ссылок.

В этом случае вы можете просто вычислить это как:

n_nodes = 10
d = nx.gnp_random_graph(n_nodes, 0.5, directed=True)
degree_prestige = dict((v,len(d.in_edges(v))/(n_nodes-1)) for v in d.nodes_iter())

То же самое для других мер, которые могут быть легко реализованы, используя функции, определенные networkx .

...