Найти высшую меру центральности в Networkx Python - PullRequest
3 голосов
/ 15 октября 2019

Я пытаюсь написать функцию, которая берет график и возвращает DataFrame с 1-м столбцом, являющимся списком узла с наивысшей мерой центральности, а 2-й столбец - значением наивысшей меры центральности.

Ниже приведен мой код, и я не мог понять, как его завершить. Как я могу найти самую высокую центральность, не имея другой функции?

def summary(G):
    df = pd.DataFrame() 
    dc=nx.degree_centrality(G) 
    cc=nx.closeness_centrality(G) 
    bc=nx.closeness_centrality(G) 
    df['Nodes with the highest centrality measure']= #addcodehere
    df['Value of the highest centrality measure']= #addcodehere
    return df.set_index(['dc','cc','bc'])

1 Ответ

2 голосов
/ 15 октября 2019

Вы можете сделать это следующим образом:

# Imports and graph creation (you don't need them in your function)
import networkx as nx
import pandas as pd

G = nx.fast_gnp_random_graph(20, 0.1)

Создать диктант центральности:

cc = nx.closeness_centrality(G)

cc выглядит так:

{0: 0.28692699490662144,
 1: 0.26953748006379585,
 2: 0.32943469785575047,
 3: 0.28692699490662144,
 4: 0.30671506352087113,
 5: 0.26953748006379585,
...

Затем используйте from_dict для создания кадра данных:

df = pd.DataFrame.from_dict({
    'node': list(cc.keys()),
    'centrality': list(cc.values())
})

df выглядит следующим образом:

    centrality  node
0   0.286927    0
1   0.269537    1
2   0.329435    2
3   0.286927    3
4   0.306715    4
5   0.269537    5
...

А затем сортируйте его по центру в порядке убывания:

df = df.sort_values('centrality', ascending=False)

Итак, df выглядит так:

    centrality  node
12  0.404306    12
7   0.386728    7
2   0.329435    2
4   0.306715    4
0   0.286927    0
...

И вернуть результат. Полный код:

def summary(G):
    cc = nx.closeness_centrality(G)
    df = pd.DataFrame.from_dict({
        'node': list(cc.keys()),
        'centrality': list(cc.values())
    })
    return df.sort_values('centrality', ascending=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...