介绍
计算图形时使用什么?帕杰克?还是igraph?
我使用networkx。原因是Python。
由于pajek仅是用于Windows的软件,因此它在linux上不起作用(如果您使用wine,它似乎可以工作),并且由于igraph是R,因此在处理日语和编译软件包方面的错误很麻烦。
考虑到网络分析本身,pajek和igraph更为传统和良好,但是考虑到编程语言本身的便利性,我认为它总共是Python networkx。
这次,我想看看如何使用此类networkx计算基本图形特征。
所有这些代码均已上传到Gist,因此也请在此查看。
整个网络的功能
图形生成
首先,生成要分析的网络。 networkx提供了生成各种图形的功能,例如完整图形,随机网络和小型世界网络。这次,我将在无标度网络上进行尝试。
1 2 | import networkx as nx G = nx.barabasi_albert_graph(30, 1) |
使用以下方法进行目视检查。
1 2 | pos = nx.circular_layout(G) nx.draw_networkx(G, pos) |
平均距离
1 2 | nx.average_shortest_path_length(G) >> 3.949425287356322 |
与随机图
相比
1 2 3 | G_random = nx.connected_watts_strogatz_graph(30, 2, 1) nx.average_shortest_path_length(G_random) >> 5.917241379310345 |
您可以检查small world属性。
聚类系数
1 2 | nx.average_clustering(G) >> 0.0 |
该示例中的Albert Barabashi模型具有以下特征:聚类系数很小,但是这次变为0。
中心性
学位中心
1 2 3 4 5 6 7 8 | degree_centers = nx.degree_centrality(G) sorted(degree_centers.items(), key=lambda x: x[1], reverse=True)[:5] >>> [(5, 0.27586206896551724), (0, 0.1724137931034483), (1, 0.13793103448275862), (4, 0.13793103448275862), (7, 0.10344827586206896)] |
以字典格式为每个节点提供中心性。
使用字典排序方法对它们进行降序排序。
邻近中心
1 2 3 4 5 6 7 8 | close_centers = nx.closeness_centrality(G) sorted(close_centers.items(), key=lambda x: x[1], reverse=True)[:5] >>> [(1, 0.4027777777777778), (0, 0.3815789473684211), (5, 0.3717948717948718), (4, 0.31521739130434784), (2, 0.3020833333333333)] |
我期望结果与学位中心化相同,但有所不同。平均而言,最接近所有其他节点的节点似乎是第一。
调解中心
1 2 3 4 5 6 7 8 | between_centers = nx.betweenness_centrality(G) sorted(between_centers.items(), key=lambda x: x[1], reverse=True)[:5] >>> [(1, 0.6379310344827587), (5, 0.6108374384236454), (0, 0.6059113300492611), (4, 0.3620689655172414), (8, 0.19704433497536947)] |
在将一个集群连接到另一个集群时,调解中心性往往更高,但是在Albert-Barabashi模型中,首先没有集群,因此结果与其他指标没有太大不同。
特征向量中心性
1 2 3 4 5 6 7 8 | eigen_centers = nx.eigenvector_centrality_numpy(G) sorted(eigen_centers.items(), key=lambda x: x[1], reverse=True)[:5] >>> [(5, 0.6148871002455658), (1, 0.36311628358126075), (7, 0.2565216963136699), (0, 0.23924881680129484), (10, 0.2256761992171005)] |
这推高了集线器附近节点的中心位置,因此排名在5附近的节点的中心度都很高。顺便说一下,