python实现复杂网络K-Shell算法

说明:

下述代码主函数中生成graph的原始文件Untitled.csv已经丢失,可以根据自己的文件数据类型编写代码生成graph,然后再进行后续的计算即可。

import networkx as nx
import pandas as pd

def k_shell(graph):
    importance_dict={}
    level=1
    while len(graph.degree):
        importance_dict[level]=[]
        while True:
            level_node_list=[]
            for item in graph.degree:
                if item[1]<=level:
                    level_node_list.append(item[0])
            graph.remove_nodes_from(level_node_list)
            importance_dict[level].extend(level_node_list)
            if not len(graph.degree):
                return importance_dict
            if min(graph.degree,key=lambda x:x[1])[1]>level:
                break
        level=min(graph.degree,key=lambda x:x[1])[1]
    return importance_dict

if __name__ == '__main__':
    data=pd.read_csv('Untitled.csv',header=0)
    #构建图;可以根据自己的文件修改下面的代码
    graph=nx.Graph()
    data_len=len(data)
    for i in range(data_len):
        graph.add_edge(data.ix[i]['Source'],data.ix[i]['Target'])
    #计算度中心性
    print(nx.degree_centrality(graph))
    result=k_shell(graph)
    print(result)

你可能感兴趣的:(机器学习,python,开发语言)