Нахождение слабых связей с помощью networkx

1

Я пытаюсь найти слабые связи, определенные Грановетером. До сих пор я пытался использовать измерения центральности для построения сетевого набора данных Stanford Facebook (facebook_combined.txt) в соответствии с важностью. В приведенном ниже графике используется степень центра. Я указал синими прямоугольниками некоторые из узлов, которые я хочу найти ("слабые связи").

Изображение 174551

Мосты кажутся близкими, но не совсем там. Как следует искать эти узлы?

Пример кода:

import networkx as nx

fb = nx.read_edgelist("facebook_combined.txt")
degree_cent_fb = nx.degree_centrality(fb)

pos_fb = nx.spring_layout(fb ,iterations = 1000)

nsize = np.array ([v for v in degree_cent_fb.values ()])

nsize = 500*( nsize - min(nsize))/(max(nsize) - min(nsize))

nodes = nx.draw_networkx_nodes (fb , pos = pos_fb ,
                                node_size = nsize)
edges = nx.draw_networkx_edges (fb , pos = pos_fb ,
                                alpha = .1)

Вот еще несколько примеров с другими функциями калибровки:

Те же данные, размер которых зависит от центральности:

Изображение 174551

И центральность близости:

Изображение 174551

И с PageRank:

Изображение 174551

Теги:
graph-theory
networkx

1 ответ

0

Обратите внимание, что слабые связи или мосты относятся к краям, и вы смотрите скорее на измерение уровня узла. Вы можете быть заинтересованы в концепции Рон Берт структурной дыры. Узлы, занимающие структурные отверстия, являются брокерами, соединяющими группы с ограниченным перекрытием - звучит так, как будто вы ищете.

NetworkX (начиная с версии 2.0, если я правильно помню) имеет реализацию меры ограничения Burt. Берт говорит, что узел занимает структурное отверстие, если он имеет низкое ограничение. Один минус оценка ограничения узлов, кажется, достаточно хорошо выделяет узлы между сообществами, хотя и не в каждом случае.

Изображение 174551

И вот код. Остерегайтесь - для вычисления ограничения требуется некоторое время!

fb = nx.read_edgelist("facebook_combined.txt")
pos_fb = nx.spring_layout(fb ,iterations = 100)

cons = nx.constraint(fb)

plt.figure(figsize=(15,10))
nsize = np.array ([1-v for v in cons.values()])

nsize = 10**(nsize+1)

nodes = nx.draw_networkx_nodes (fb , pos = pos_fb , node_color=nsize, cmap=plt.cm.coolwarm,
                                node_size = nsize)
edges = nx.draw_networkx_edges (fb , pos = pos_fb , 
                                alpha = .1)

plt.axis('off')

Ещё вопросы

Сообщество Overcoder
Наверх
Меню