【算法】复杂网络之Networkx——手把手教你构建网络&分析数据

时间:2024-04-12 10:59:16

NetworkX是一款Python开源软件包,用于创造、操作复杂网络,内置了常用的图与复杂网络分析算法,可以方便的进行复杂网络数据分析、仿真建模等工作。功能丰富、简单易用。

一、安装

pip install networkx


二、数据构造

新建excel表格,输入邻接矩阵:

【算法】复杂网络之Networkx——手把手教你构建网络&分析数据

第一行代表边:a-b ,a-c, a-d三条有向边

其余各行以此类推。

完成数据后,将excel表格另存为.txt文件,随后保存为relation.adjlist即可。


三、读取文件及可视化

import networkx as nx 
import matplotlib.pyplot as plt
#G = nx.read_adjlist('config/relation.adjlist')#默认无向图
G = nx.read_adjlist('config/relation.adjlist',create_using=nx.DiGraph())#创建有向图 
#nx.draw(G) 
nx.draw(G,with_labels = True) 
plt.show()
【算法】复杂网络之Networkx——手把手教你构建网络&分析数据

四、数据分析

网络分析常用函数包括以下几种:

转自博客:点击打开链接

nx.degree(G)// 计算图的密度,其值为边数m除以图中可能边数(即n(n-1)/2)

nx.degree_centrality(G)//节点度中心系数。通过节点的度表示节点在图中的重要性,默认情况下会进行归一化,其值表达为节点度d(u)除以n-1(其中n-1就是归一化使用的常量)。这里由于可能存在循环,所以该值可能大于1.

nx.closeness_centrality(G)//节点距离中心系数。通过距离来表示节点在图中的重要性,一般是指节点到其他节点的平均路径的倒数,这里还乘以了n-1。该值越大表示节点到其他节点的距离越近,即中心性越高。

nx.betweenness_centrality(G)//节点介数中心系数。在无向图中,该值表示为节点作占最短路径的个数除以((n-1)(n-2)/2);在有向图中,该值表达为节点作占最短路径个数除以((n-1)(n-2))。

nx.transitivity(G)//图或网络的传递性。即图或网络中,认识同一个节点的两个节点也可能认识双方,计算公式为3*图中三角形的个数/三元组个数(该三元组个数是有公共顶点的边对数,这样就好数了)。

nx.clustering(G)//图或网络中节点的聚类系数。计算公式为:节点u的两个邻居节点间的边数除以((d(u)(d(u)-1)/2)。

nx.transitivity(G)//图或网络的传递性。即图或网络中,认识同一个节点的两个节点也可能认识双方,计算公式为3*图中三角形的个数/三元组个数(该三元组个数是有公共顶点的边对数,这样就好数了)。


分析手工构建的网络:

print(nx.degree_centrality(G))#节点度中心系数  已归一化
print(nx.closeness_centrality(G))#节点距离中心系数
print(nx.betweenness_centrality(G))#节点介数中心系数

输出:

{u'a': 0.6666666666666666, u'c': 0.16666666666666666, u'b': 0.16666666666666666, u'e': 0.5, u'd': 0.16666666666666666, u'g': 0.16666666666666666, u'f': 0.16666666666666666}
{u'a': 0.5, u'c': 0.0, u'b': 0.0, u'e': 0.5208333333333334, u'd': 0.0, u'g': 0.42857142857142855, u'f': 0.0}
{u'a': 0.2, u'c': 0.0, u'b': 0.0, u'e': 0.16666666666666666, u'd': 0.0, u'g': 0.0, u'f': 0.0}


networkx详细说明可参见官方手册点击打开链接