利用Pajek软件批量处理excel数据,批量生成网络关系图
Pajek软件大家想必都不陌生,但是我很陌生,因为我用它不是进行网络分析,而是用它来画关系图(类似网络图)。但是Pajek软件手工操作时一次只能导入一个数据文件(如:.net文件)生成相应的1张关系图,而我需要生成450张关系图,逐个数据文件手工操作是不现实的。查阅资料显示R语言或Python与Pajek混合编程可能实现这种功能,但是笔者不会R语言也不会Python语言,只会c++和java语言,而任务又赶的紧,来不及去get R语言调用方式(主要还是相关资料太少)。笔者下面描述下我的实现方式:
第一步:数据转换,即由Excel数据转为.net数据。(.net是Pajek支持的数据格式之一,这一步任何语言都可实现,笔者利用的是java语言的POI的jar包实现的)
下图是其中一个excel文件里的数据,值为0表示无关,值大于0表示相关(对角线的数据是笔者的其它用途,读者可忽略)。
下图①是生成的.net数据,图②是数据格式的简单说明(不懂的可以去查),这种数据可以直接利用Pajek生成图并保存(步骤可以到网上查找)。
Java代码如下:这一步只是文件的读写操作,很简单,不赘述,如下图。
第二步:生成并修改.log文件。下图是Pajek的安装目录,细心的读者会发现,安装目录里有许多的.log文件,这些文件是每次运行Pajek软件留下的,接下来我们就可以在.log文件上做文章。这个过程中,我们不必明白Pajek过多细节的操作,.log会指导我们如何来用。Pajek软件启动时会检查是否存在Pajek.log文件,如果存在便执行.log里面的操作(默认安装目录里是没有Pajek.log文件的,笔者是做过文章的)。
⑴ 运行Pajek软件,按下图步骤打开.net文件并保存图片。(可设Layout->Energy->Kamada-Kawai->Free后面保存)
⑵ 关闭Pajek软件,打开最新生成的.log文件,如下图:
下图是针对log文件的说明,我们只需要明白“源文件的绝对路径”和“目标文件的绝对路径”。
⑶ 把上述文件的“源文件的绝对路径”的“目标文件的绝对路径”分别更改为我们的第二个.net文件和第二个.jpg文件的路径,并在最后添加一行为“EXIT”(如下图)。并更改此.log文件的名字为Pajek.log,保存。
⑷ 运行Pajek,发现软件一闪而过(上面添加的”EXIT”,使软件运行完便退出,以后若想正常运行Pajek软件需要把Pajek删除或者改名),在目标路径生成了新的图。
第三步:把第二步的(3)(4)用C++程序循环执行。其实对于(3)用什么语言是无所谓的,但是(4)需要用批处理文件来执行,java似乎不可以执行批处理文件。
⑴ 创建批处理文件“runPajek.bat”,内容如下图:
⑵ 编写C++程序,循环控制重新生成.log文件并执行runPajek.bat。内容如下图:
完结。450多张图几分钟后便可全部生成。
结语:这是笔者发的第一个博客,漏洞很多,望需要者找到自己需要get的点,并希望大家批评指正笔者小新。