统计网络常用指标

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值