复杂网络概论----复杂网络分析(三)

1.1复杂网络的特性

       网络化充斥在人类社会的各个方面。人与人之间的关系会组成社交网络;传染病、计算机病毒的快速传播会组成病毒传播网络;一个下载资源在互联网上的流转会组成共享资源传播网络。。。总之,类似的网络数不胜数,而且对人类已经产生了巨大的影响。那么是不是有必要在这些网络中找出一些或某些规律,以便于我们能够更加深刻和便捷的认识到这些复杂网络的相关特性,促进人类社会的和谐发展?我想是很有必要的。复杂网络的研究已经兴起了许多年,或许你会说现在还研究前人已经研究过的东西还有什么意义呢?那不是白费功夫吗?但我想事实并不是这样的!或许前人已经在这方面取得了重大的成果,但是不能否认后人的研究就没有任何意义。后人的研究,应该的是建立在前人研究的基础之上,并发现时代进步下的新型复杂网络所拥有的新的特性,而这些特性是当下时代才有的,并且它所展示的是当下人类社会中出现的网络的新的值得研究的特性。

       网络是由节点和节点之间的关系(连接)组成(Figure1.1)。简单的无向无权图可用邻接矩阵A表示。如果节点i与节点j之间存在连接,则矩阵元素aij=1,否则aij=0。无向网络的特征表现为邻接矩阵是是对称的,即aij=aji。

即A:

1 2 1

2 3 1

2 4 1

2 5 1

2 6 1

...

1 6 0

       在下一节中我们将讨论复杂网络的两个重要性质:小世界性质和无标度性质。

小世界性质

他的意思就是说当两个陌生人第一次见面并交谈时,他们总会发现他们会有相同的朋友。这就是著名的六度分离现象,由某一位大佬所发现。在这个著名的实验中,他们设计了一个实验。他在美国城市里随机挑选了一些人,用波士顿一位有名的股票经纪人的名字给他们写信。每个参与者只被允许把信寄给他认为可能认识股票经纪人的朋友。当朋友收到这封写有股票经纪人名字的信后,他会把信寄给他认为可能认识股票经纪人的人。最后,大部分信件都寄到了股票经纪人那里。每封信平均转发6.2次。这就是现在众所周知的六度分离理论。

在此基础上咱们就可以引出两个概念:路径最短路径。在网络中,为了连接两个节点,连接这两个节点的路径中的边数称为路径的长度。显然,可能会有很多这样的路径来连接两个相同的节点。两个节点之间的距离定义为连接这两个节点的最短路径。因此,网络的平均路径可以定义

表示节点i和节点j之间的最短路径, N是网络中节点的总数。但是这样会有一个问题,就是当网络不相连的时候,的值就是发散的(你可以把它想象成两个节点都没有相连,哪来什么路径呢!)所以你可以把来替换(这样做既因为倒一下就可以保证整个式子收敛,也是因为现在很多求最短路径的库算出来的都是inf(它表示一个无限大的数),所以无限大的倒数就趋近于0,那么整个式子不就收敛了吗?)

即上面那个式子就可以表示为:

在此呢,我们可以实践一下!

使用pycharm+python+igraph+pandas+np,咱们来算一下某个网络的平均最短路径

数据集(存储的是边列表,如0  1,表示的就是从0节点到1节点的边):

链接:https://pan.baidu.com/s/1l-KjvR-hn3XTWchyhzqVRg 
提取码:yuml 

代码结构:

代码:

import numpy as np
import pandas as pd
import igraph

'''    ./代表同级目录    '''
fpath = './networks/test.txt'

data_network = (pd.read_csv(filepath_or_buffer=fpath, sep='\t', header=None, names=['n1', 'n2'])).values

'''丑话说在前面,igraph图的节点必须给我是从0或1开始,否则、否则、否则我就重写代码'''
edges = []
if not (np.any(data_network == 0)):
    edges = data_network - 1
else:
    edges = data_network

'''创建网络有向图g_network'''
g_network = igraph.Graph(edges, directed=True)
# print(g_network)

'''得出整个网络的各节点之间的最短路径长度,但这其中包括某个节点自己到自己的最短路径,这种数据对我们来说没有用,需要清除掉(这个清除的操作也对应了N(N-1))'''
s_p = np.array(g_network.shortest_paths())
# print(s_p)
s_p = s_p[np.where(s_p != 0)]
'''咱们就取其所有最短路径的倒数'''
s_p = 1 / s_p
# print(s_p)

'''求出整个网络的平均最短路径'''
aver_s_p = np.mean(s_p)
print(aver_s_p)

结果:

小世界网络的另一关键性质就是聚类系数。。。

猜你喜欢

转载自blog.csdn.net/a_cherry_blossoms/article/details/109687107