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
统计网络常用指标
最新推荐文章于 2022-04-08 07:49:52 发布