1、引言
在上一篇文章中,我和大家简单介绍了复杂网络的概念以及一些简单的数学描述方式,复杂网络是由节点和连边构成的系统,利用邻接矩阵来是描述网络最为恰当和简便的方式。
既然涉及到了矩阵的运算,自然离不开计算机的帮忙,作为一款科学计算软件,对矩阵的表达、运算、可视化等各方面的支持都做的极其到位。除了这一点以外,从实际的研究过程中,我发现由于网络结构的复杂性,很多时候也要求研究工作者在专业软件的辅助下对其进行研究。接下来通过两个数据集,来向大家演示一下如何运用
操纵网络数据。如果各位有数据或者代码的需求可以在下方给我留言。
2、网络数据分析(一)
第一个网络数据集的名称为G_test.mat
,这是一个人工构建的随机网络结构(指网络中的连边都是随机连接的),它的规模是,连边数量
,为一个无向的网络结构。我们先将其导入
中,验证一下是否符合上述的数据描述:
clc,clear
% 导入数据
load("G_test.mat")
% 当前网络的规模
N = size(G,1);
% 判断网络是否为有向的网络
nk = find((G==G')~=1);
if isempty(nk)
disp(" 网络G是一个无向网络(连边无方向)")
else
disp(" 网络G是一个有向网络(连边有方向)")
end
% 网络的连边数量
L = sum(sum(G))/2;
程序片段nk = find((G==G')~=1);
的意思是判断当前的矩阵是否为对称矩阵,如果是对称矩阵,G==G'
的运行结果应该全是1,否则就会出现0。
最后一行的L=sum(sum(G))/2
是利用邻接矩阵计算网络的连边数量,sum(sum(G))
将矩阵G
的所有元素求和,之所以要除以2是因为每条连边在求和时会被计算2次的原因。
上述程序运行结果为:
;
网络G是一个无向网络(连边无方向);
;
矩阵的部分元素如下:
为了能够更好的看到网络的整体情形,我们对网络结构进行可视化:
%% 邻接矩阵可视化
% 可视化当前的矩阵图像
figure
subplot(1,3,1)
imagesc(1:N,1:N,G)
colorbar
set(gca,"FontSize",20)
% axis equal
subplot(1,3,2)
imagesc(1:N,1:N,tril(G))
colorbar
set(gca,"FontSize",20)
subplot(1,3,3)
imagesc(1:N,1:N,triu(G))
colorbar
set(gca,"FontSize",20)
函数subplot
用于绘制子图,(1,3,1),(1,3,2),(1,3,3)
等标签用于确定画布的位置,前面的共同数字1和3表示绘制1行3列的图像,后面的数字是子图的序号。imagesc
函数是MATLAB
用于可视化矩阵的函数之一,除此以外还有heatmap
热图等函数,但是我个人认为可视化效果不如imagesc
,调整起来也颇费时;colorbar
会在图像右侧生成颜色条,不同颜色对应不同的值,在这里矩阵只有两个可能的数值,分别是0和1。
运行上述程序得到图像:
接下来我们期望考察一下网路节点的度。前面说过,无向网络的度就是矩阵沿着行或者列求和,即:
% 网络中节点的度
degree = sum(G,1);
% 网络的平均度
k_mean = mean(degree);
网络节点的平均度的计算公式是。
我们用MATLAB
内置的bar
函数来看一下不同节点的度值:
%% 节点度的直方图
figure
bar(degree)
set(gca,"FontSize",20)
ylim([0,50])
xlabel("node i ")
ylabel("ki")
代码中的gca
表示的是当前的图像,set(gca,......)
是设置当前画布上图像的属性。对应生成的图像为:
可见不同节点的度还算均匀(运用Monte-Carlo
法作平均会更加光滑)。这也是随机网络的一大特性。
通过上述的这个例子,我们初步上手并研究了一个网络的基本特性,在可视化函数imagesc
的帮助下,我们得以直观地考察网络整体的情形。
接下来我们将再举一个例子供各位参考,不同的是这次的数据集不再是人工构建的网络结构,而是来自真实的生物神经元网络建模,且网络从双向的变为单向的网络,情况也略微复杂一些。