Как использовать вес в коде infomap (Python)? - PullRequest
0 голосов
/ 29 июня 2018

Я хочу использовать infomap, чтобы найти сообщество в сети. У меня есть ориентированный и взвешенный график. Моя проблема в том, что способ, которым я использую код, не учитывает вес графика, и я должен учитывать его. Это мой код:

from igraph import *
import pandas as pd

g1=Graph.Read_Ncol("1.txt",names=("node1","node2","weigths"),weights="if_present",directed=True)

print g1.community_infomap()

Мой ввод выглядит примерно так:

0   1   0.9
1   2   0.0
2   3   0.9

Если я запускаю код с этим примером, он показывает, что у меня есть 1 сообщество! в то время как вес ссылки от узла 1 до 2 равен нулю, и у меня должно быть 2 сообщества. Так что это не считается весом сети. Что мне делать?

1 Ответ

0 голосов
/ 30 июня 2018

В скобках параметров infomap необходимо указать вес ребер следующим образом:

G = Graph.Read_Ncol('1.txt', names=('node1', 'node2', 'weights'), directed=True)
comms = G.community_infomap(edge_weights = 'weights')

Вы можете убедиться, что это имеет значение, впоследствии проверив модульность после добавления функции весов:

q = G.modularity(comms)
print(q)

Различия в моих собственных данных по модульности после того, как я оставил параметр пустым, а затем добавил edge_weights:

comms = G.community_infomap()
q = G.modularity(comms)
print(q)
0.6460833771434323

comms = G.community_infomap(edge_weights = 'weight')
q = G.modularity(comms)
print(q)
0.6130915761568664

Если это не сработает, преобразуйте файл данных в GML без заголовков и прочитайте его следующим образом:

G = Graph.Read_GML('Only2001_15Removed.gml')
comms = G.community_infomap(edge_weights = 'weight')
...