Есть ли функция в алгоритме networkx, которая возвращает клики/кластеры/компоненты вокруг определенных узлов, которые я указываю?

#nodes #networkx #directed-graph

Вопрос:

Я использую networkx в данных CDR для телекоммуникаций, чтобы определить сетевых влиятельных лиц и их круг влияния. Я определил влияющих как узлы, центральная роль собственного вектора которых превышает определенный порог, но я все еще не могу определить их круг влияния, который представляет собой узлы, непосредственно связанные с узлом влияющего с расстоянием = 1. Есть ли у нас функция в networkx, которая делает то же самое? Кстати, мой график-это ориентированный график.

 G = nx.DiGraph()
G = nx.from_pandas_edgelist(CDR1, 'A', 'B', ['WEIGHT'], create_using=nx.DiGraph())



df = pd.DataFrame(dict(
    DEGREE = dict(G.degree),
    DEGREE_CENTRALITY = nx.degree_centrality(G),
    CLUSTERING = nx.clustering(G),
    EIGENV_CENTRALITY=nx.eigenvector_centrality(G)
    ))




df['Influencer']=np.where(df['EIGENV_CENTRALITY']> 1.022186e-05,1,0)
 

Ответ №1:

Предполагая, что у вас есть неориентированный график, это

 G.neighbors(node)
 

Если он направлен, и вы хотите, чтобы те, которые достигаются с узла, это снова

 G.neighbors(node)
 

или G.successors(node) тоже работает.

Если он направлен, и вам нужны только те, у которых есть края, к узлу, это

 G.predecessors(node)
 

Комментарии:

1. Но они вернут итератор, а не список. Как мне получить список номеров пользователей в круге влияния?

2. Чтобы превратить итератор в список, просто сделайте list(G.neighbors(node)) это .

3. список, возвращаемый из G. преемники(узел), представляет собой список ключевых итераторов. Применение функции list() ничего не изменит. Это все равно будет список ключевых итераторов.

4. Какая у вас версия networkx? Для меня: H=nx.DiGraph() …. H.add_edge(1,2) …. list(H.successors(1)) получает результат [2] .

Ответ №2:

Я нашел ответ на свой вопрос. Я использовал следующие строки кода:

 circle_pre=[]
for inf in influencers_pre.index:
    for n in G_pre.neighbors(inf):
        circle_pre.append(n)
len(circle_pre)
 

где circle_pre-это список имен узлов, непосредственно связанных с узлами влияния, которые я определил как круг влияния.