NetworkX是一款Python的开源软件包,用于创造、操作复杂网络,内置了常用的图与复杂网络分析算法,可以方便的进行复杂网络数据分析、仿真建模等工作。功能丰富、简单易用。
一、安装
pip install networkx
二、数据构造
新建excel表格,输入邻接矩阵:
第一行代表边: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()
四、数据分析
网络分析常用函数包括以下几种:
转自博客:点击打开链接
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}