复杂网络和数据分析(二):利用MATLAB处理网络数据

1、引言

       在上一篇文章中,我和大家简单介绍了复杂网络的概念以及一些简单的数学描述方式,复杂网络是由节点和连边构成的系统,利用邻接矩阵来G_{ij},i,j=1,2,3...N是描述网络最为恰当和简便的方式。

       既然涉及到了矩阵的运算,自然离不开计算机的帮忙,MATLAB作为一款科学计算软件,对矩阵的表达、运算、可视化等各方面的支持都做的极其到位。除了这一点以外,从实际的研究过程中,我发现由于网络结构的复杂性,很多时候也要求研究工作者在专业软件的辅助下对其进行研究。接下来通过两个数据集,来向大家演示一下如何运用MATLAB操纵网络数据。如果各位有数据或者代码的需求可以在下方给我留言。

2、网络数据分析(一)

       第一个网络数据集的名称为G_test.mat,这是一个人工构建的随机网络结构(指网络中的连边都是随机连接的),它的规模是N=100,连边数量L=500,为一个无向的网络结构。我们先将其导入MATLAB中,验证一下是否符合上述的数据描述:

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次的原因。
       上述程序运行结果为:

N = 100;
网络G是一个无向网络(连边无方向);
L=500;

       矩阵的部分元素如下:


图1.导入MATLAB的网络结构

       为了能够更好的看到网络的整体情形,我们对网络结构进行可视化:

%% 邻接矩阵可视化
% 可视化当前的矩阵图像
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。

       运行上述程序得到图像:


图2.网络结构可视化,(a)网络整体;(b)网络的下三角部分;(c)网络的上三角部分

       接下来我们期望考察一下网路节点的度k_{i},i=1,2,3....N。前面说过,无向网络的度就是矩阵沿着行或者列求和,即:

% 网络中节点的度
degree = sum(G,1);

% 网络的平均度
k_mean = mean(degree);

       网络节点的平均度的计算公式是<k> = \frac{1}{N}\sum_{i=1}^{N}k_{i}
       我们用MATLAB内置的bar函数来看一下不同节点的度值:

%% 节点度的直方图
figure
bar(degree)
set(gca,"FontSize",20)
ylim([0,50])
xlabel("node i ")
ylabel("ki")

       代码中的gca表示的是当前的图像,set(gca,......)是设置当前画布上图像的属性。对应生成的图像为:

图3.网络中不同节点的度值

       可见不同节点的度还算均匀(运用Monte-Carlo法作平均会更加光滑)。这也是随机网络的一大特性。

       通过上述的这个例子,我们初步上手并研究了一个网络的基本特性,在可视化函数imagesc的帮助下,我们得以直观地考察网络整体的情形。
       接下来我们将再举一个例子供各位参考,不同的是这次的数据集不再是人工构建的网络结构,而是来自真实的生物神经元网络建模,且网络从双向的变为单向的网络,情况也略微复杂一些。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容