一、写在开头
因为项目的原因,必须得画网络互作图,之前一直想用脚本实现,不想手动在可视化的软件界面(因为觉得麻烦),但是又一直找不到合适的,即使找到了也不知道怎么用于我目前项目的数据,就一直拖着。
后来看到好多文献都是用 Cytoscape 这个软件画,我想,那行吧,我学习一下,就利用同事的教程生成了配置文件然后请教了一些问题(特别感谢),花了不少的时间终于鼓捣出来了,虽然结果依旧不美观,但是至少有产出了。
写这个文档,是因为后来发现自己年纪大了,总是有忘记事情的倾向,如果不做记录,隔一段时间不用了,肯定马上就忘了,所有后来总是有记录的习惯,脚本也好,日记也好,技术文档也罢。下边是正式的记录内容:
二、网络互作图简易教程
生成 Edges 和 Nodes 文件,两种文件格式如下(同事脚本生成的):
Edges 文件列名: Source Target Correlation LineWidth LineColor
Nodes 文件列名:Node NodeFontFace NodeSize NodeColor导入文件
Edges 文件导入方法:File -> Import -> Network from File
Nodes 文件导入方法:File -> Import -> Table from File设置格式
Style 里可以选择默认的网络图模板;
Node 和 Edge 可以分别设置节点和边的属性;布局(拖)网络互作图
可以删除一些和任何其他节点没有相关性的点,工具栏 Layout 可以选择各种 Layout,因为要看不同门的属水平的网络互作情况,我用的是 Layout -> Group Attributes Layout -> 列名(我的是 Node color , 因为按照不同的门给的颜色),另外在 Mac 上可以 按住 cmd + 触摸板 选择多个进行同时拖动(我过了好久才弄明白)…如何设置让节点其他网络图相同的位置相同?
Layout -> Copycat Layout 就可以选择了,如果没有的话可以去 Apps -> App Manager 下载相应的工具, App Manager 还有其他许多的工具可以下载使用,我还没有尝试太多其他的。如何分析网络互作图,比如计算点度中心性(degree centrality),接近中心性(closeness centrality)之类的数据 ?
Tools -> NetworkAnalyzer -> Network analysis -> Analyze Network -> Treat the network as undirected (我的网络图是无向的)
然后就可以在下边的 Table Panel 看到关于 Node 和 Edge 的各种计算得出的信息了。后续分析以及可视化(比较不同的网络图)
可以分析共有的节点和特有的节点,这个可以使用 Venn 图或者 Upset 这个包;
也可以比较衡量网络互作图的各种属性的值,比如接近中心性(closeness centrality);
也可以比较两种网络图相关性值的分布,我画了箱线图,发现一个组的相关系数和另外一组的显著差异;
以及其他的。
附:如何用 upset 画图?
1)首先用 python 生成画图的文件, 格式是:行名是边,列名是分组,中间是 0,1 代表有无。
1 | # 生成画 upset 的文件, |
2)然后再用 R 的包画图(比较简单):
1 | library("UpSetR") |
3) 最后竖起你的大拇指,夸自己一下,完成撒花。
三、参考资料
https://kateto.net/tutorials/
谁是社会网络中最重要的人? - 知乎
Draw Venn Diagram
Hacking our way through UpSetR | R-bloggers
https://cran.r-project.org/web/packages/UpSetR/vignettes/basic.usage.html
四、联系方式
我想适当开放一下,可以通过以下方式联系我,但是不保证解决问题.. (因为菜)
邮箱: Pengzai16@gmail.com