关于网络分析软件Pajek的数据输入问题
要做网络分析,首先就要有一个可供分析的网络。许多人碰到的第一个困难就是,手头有点数据,想要做分析,但是不知道怎么把数据变成网络文件。在这里谈一点个人的建议。
1)明确什么是点,什么是线。
这是所有分析的第一步和最基础的一步。关于这方面的问题,我做了一些科学技术哲学方面的工作。从最简单的方面来看,就是具有实体性的对象,可以作为点,比如说生物网络中的蛋白质或基因、交通网络中的城市或车辆、电力网络中的电站或用电单位、金融网络中的股票或公司、政治网络中的国家或权力机构。这些对象,既有特定的形式,又有专有的内容,从中可以找到可供相互区分的属性特征。这些对象之间的关系,可以作为连线。连线的设定,可以是时间关系、空间关系、从属关系、制约关系等等。这种设定,必须与研究者的基本假设相一致。所以,如果要写一个更具有根本性的建议,那就应该是首先要有一个研究焦点问题并为解决这个问题提出一个假说。
2)列出关系列表。
最常见的列表形式是分成两列。设想第一列表示的是连线的一端,第二列表示的是连线的另一端。如果关系是有方向性的,那么这样的表达方式就意味着从第一列点指向第二列的点的箭头。
例如:以下从点AAA发出三条连线,分别指向ZZZ、YYY、XXX。
AAA
|
ZZZ
|
AAA
|
YYY
|
AAA
|
XXX
|
BBB
|
UUU
|
BBB
|
VVV
|
CCC
|
WWW
|
CCC
|
UUU
|
CCC
|
BBB
|
UUU
|
DDD
|
WWW
|
AAA
|
如果情况复杂一点,涉及到连线的强度,那么列出来的表格就可能有三列,多出来的第三列,表示的就是第一列和第二列为端点的连线的强度值。
例如:从AAA发出到ZZZ的连线的权重(也可以称为强度或连线值)为1.9。BBB发出到UUU的连线强度为0.4。
AAA
|
ZZZ
|
1.9
|
AAA
|
YYY
|
2.1
|
AAA
|
XXX
|
1.3
|
BBB
|
UUU
|
0.4
|
BBB
|
VVV
|
3.6
|
CCC
|
WWW
|
2.3
|
CCC
|
UUU
|
1.1
|
CCC
|
BBB
|
6.5
|
UUU
|
DDD
|
4.2
|
WWW
|
AAA
|
7.2
|
3)制作网络文件。
这一步往往让人不知所措,网络文件格式众多,这里先介绍Pajek常用的.net格式。
制作方法有三种。
第一,现有程序转换法。
Pajek的官网上提供了两个程序:Excell2Pajek和TXT2Pajek。分别可以把Excell格式和TXT格式的数据转换成Pajek的.net格式。虽然方便,但各自有弊端。
Excell2Pajek无法识别Office2007的.xlsx格式,也无法识别第三列的连线强度值,另外2003版格式的EXCELL表最大只能有65535行,因此如果网络中的连线数超过65535,就无法用EXCELL2Pajek来转换。
Txt2Pajek对中文的支持不佳,但是可以识别第三列的连线强度值。
以上两个程序,在转换文件时不允许有空格或空行存在,所以在转换时如果提示错误,要用文件编辑器的搜索功能寻找空格并删除。
除了以上两个程序以外,还有一个叫做NodeXL的工具。这是一个EXCELL插件,安装后可以像EXCELL的其他图表绘制程序那样对EXCELL文件进行绘图,只不过是专门绘制网络图。它可以适用于Office2007的.xlsx格式,但是同样对中文的支持差,用它转换成的.net文件,如果含有中文,往往都显示是问号。
Ucinet中的表格功能也能够帮助制作网络文件,但是由于Ucinet不适于处理大规模的数据,在很多情况下还是用其他工具为好。
第二,手工编制法。
如果网络不是很大,那么直接用手工编制即可。以下括号中的内容是作为注意点,而不正式出现在文件中。
*Vertices 10 (表示以下共有十个顶点)
1 "AAA"(一定要用半角英文括号,这里表示1号顶点“AAA”。顶点序号后一定要空格)
2 "BBB"
3 "CCC"
4 "UUU"
5 "WWW"
6 "ZZZ"
7 "YYY"
8 "XXX"
9 "VVV"
10 "DDD"
*Arcs(表示以下定义的是弧,如果是无方向的连线,则用*Edges)
1 6 1.9(从点1“AAA”指向点6“ZZZ”的箭头线,线值为1.9)
1 7 2.1
1 8 1.3
2 4 0.4
2 9 3.6
*Edges
3 5 2.3 (从点3“CCC”指向点5“WWW”的无方向的连线,线值为2.3)
3 4 1.1
3 2 6.5
4 10 4.2
5 1 7.2
(如果是)
以上可以先建立一个.txt文本,编辑好之后,把后缀名改为.net即可。
需要注意的是,每一行都需要靠左,前面不允许有空格,而字符之间的隔断,必须是用空格键分开,而不能用制表符Tab键来隔断。有些朋友喜欢在EXCELL中先编辑好了复制黏贴到文本文件中,但是黏贴的时候,列与列之间Tab键隔断,就会导致Pajek不识别这个文件。
第三、自编代码。
我有一阵子总是要编辑各种数据,不胜其烦,于是写了一小段Matlab代码。供参考。
=============================================================
function [vertices,arcs] =makeNet(A,W)
%输入矩阵,A有2列,第一列为连线起点, 第二列为连线终点,W为权重,
%注意需要按照顺序排列输入。
%输出两个矩阵:vertices, arcs
%vertices把所有的顶点编号按序排列
%arcs包括了三列,第一列为连线起点编号,第二列为连线终点编号,第三列为权重
n=length(A);
vertices=A(1,1);
arcs(:,3)=W;
for x=1:n
h=length(vertices);
if strcmp(A(x,1),vertices(:,1))==0;
vertices(h+1,1)=A(x,1);
end;
end;
for b=1:n
m=length(vertices);
if
strcmp(A(b,2),vertices(:,1))==0;
vertices(m+1,1)=A(b,2);
end;
end;
for c=1:length(vertices)
for d=1:n;
if
strcmp(A(d,1),vertices(c,1))==1;
arcs(d,1)=c;
end
if
strcmp(A(d,2),vertices(c,1))==1;
arcs(d,2)=c;
end;
end;
end;
==============================================================
用以上代码处理过之后,直接按照手工编制法的介绍,制作网络文件,从而免去手工输入的麻烦。
https://blog.sciencenet.cn/blog-792243-645044.html
下一篇:
复杂网络分析的矩阵格式:以Pajek的.mat格式为例。