import networkx as nx import igraph as ig import matplotlib.pyplot as plt import pandas as pd import numpy as np from pylab import mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] import community #平均聚类系数 def juleimain(matrix): def julei(node,matrix): linjiedianlist=[] jiedianshu=0 bianshu=0 for j in range(matrix.shape[0]): if matrix[node,j]>0: jiedianshu=jiedianshu+1 linjiedianlist.append(j) for i in linjiedianlist: for j in linjiedianlist: if matrix[i,j]>0: bianshu=bianshu+1 try: juleixishu=2*bianshu/jiedianshu/(jiedianshu-1) except: juleixishu=0 return juleixishu juleilist = [] for i in range(matrix.shape[0]): julei2 = julei(i, matrix) juleilist.append(julei2) pingjunjulei = np.mean(juleilist) return pingjunjulei #网络指标计算 # G为networkx生成的图。 def maingraph(G): d = nx.to_pandas_edgelist(G).values g = ig.Graph(d) jiedianshu= g.vcount()#节点数 #print('节点数:',jiedianshu) bianshu= g.ecount()#边数 #print('边数:',bianshu) #平均度计算 jiediandu=pd.Dataframe(columns=['节点名称','度','入度','出度']) du=0 for v in g.vs: deg = g.degree(v)#度 degin = g.indegree(v)#入度 degout = g.outdegree(v)#出度 jiedian2 = str(v) n2 = jiedian2.index("{") n3 = jiedian2.index("}") jiedian3 = jiedian2[n2 + 1:n3] jiedian4 = jiedian3.replace("'name':", "") jiedian5 = jiedian4.replace(" '", "") jiedian6 = jiedian5.replace("'", "") jiedian = str(jiedian6)#节点名称 du=du+deg #平均度 try: maindeg=du/jiedianshu/2 except: maindeg=0 #print('平均度:', maindeg) #平均路径长度 averagepath=g.average_path_length() #print('平均路径长度',averagepath) #网络密度 midu=g.density() #print('网络密度',midu) #网络直径 zhijing=g.diameter() #平均聚类系数 matrix=g.get_adjacency() #print(matrix) #matrix=np.array(matrix) pingjunjulei=juleimain(matrix) # 同配系数 try: tongxi= nx.degree_assortativity_coefficient(G) except: tongxi ='2' # 计算模块度 part = community.best_partition(G) mod = community.modularity(part, G) return jiedianshu,bianshu,maindeg,averagepath,midu,zhijing,pingjunjulei,tongxi,mod
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)