代码和示例数据下载
前言
在这篇文章中,我们将会可视化 《七版方剂学》 的药材的关系,我们将使用Python制作节点和边的数据,然后在Gephi中绘制出方剂的网络图。
Gephi是一个专门用于构建网络图的工具,只要你能提供节点和边的数据,你就可以绘制一个漂亮的网络图。
本文用Python实现了一个可复用的函数,用于输出节点和边的数据。
结果预览
每个药材对应一个节点。
将各个药材的关系展现出来,我们可以很直观的看到那些药材可能会被用在一起。
边越粗,代表被用在一起的频次越高。
利用Python制作“节点”和“边”的数据
在我们的用处方和药物信息_构建节点和边.py这个代码文件中,实现了一个函数叫generate_graph
,本文将使用这个函数可视化 《七版方剂学》 的方剂。
有了这个函数,读者也可以很方便地针对特定的疾病的方剂数据进行可视化。
你只需要传入两个参数:
- 处方数据路径
- 药名药味药性数据路径
即可输出用于构建网络图的节点
和边
的文件。
下面是调用本人实现的函数的演示程序的代码,请在上文下载本文的附带的数据和代码来运行。
运行完毕,我们将会得到如下两个文件:
示例处方数据_edge.csv
示例处方数据_node.csv
分别代表边和节点。
利用Gephi构建网络图
步骤1. 打开Gephi
你会看到如下图
步骤2. 打开 “边” 文件
点击“打开图文件”,选择红色方框中的edge.csv为后缀的数据。
打开“边”文件后,你会看到乱码,不必惊慌。
点开字符集,寻找GBK,在博主的版本中,GBK位于UTF-8的上方。(国内常用两种编码:UTF-8和GBK)
设置完成!,字符串都正常显示了,可直接点击“下一步”,还有“完成”。
选择红色方框中的,添加到现在的工作区。
然后,我们的“边”数据就导入完成了。
步骤3. 打开“节点”文件
接下来,让我们导入节点文件。
点开后缀为node.csv的文件
像刚才打开边的文件一样,我们要选择GBK编码,然后仍然是直接点“下一步”,还有“完成”,“添加到工作区”。
步骤4. 得到原始网络图
经过导入数据,我们得到了原始的网络图(如下所示)。
步骤5. 指定节点颜色
且看左上角,让我们来按照药性,在本文的节点数据中为yaoxing这一列,指定节点的颜色。
点击应用当前设置的颜色后,我们可以看到下图中网络图发生的变化。
步骤6. 指定布局
我们这个演示中,使用Force Atlas
。
运行布局后,网络图变成了动态的版本。
步骤7. 显示节点标签(药名)
因为默认的字体不支持中文
,所以,我们会看到如下场面。
跟随红色方框,点击Arial Bold
,再设置图中的字体。
成功显示各个节点对应的药名
但是没有颜色。
跟随红色方框,设置标签的颜色
设置成功
现在我们的标签有了颜色。但是你觉得太紧凑了?请看下文。
为了避免标签颜色和边的颜色重叠,你可以取消掉下图的红色方框中的内容。
步骤8. 设置斥力强度(增加节点间的间隔)
看图中左侧,本文直接将斥力强度
设置到了10000
。可以发现网络图不再紧凑到一团。
大功告成!
现在我们有了一个漂亮的,动态的网络图。我们可以很直观的看到方剂之间的关系,以及它们的药性。
使用网络图
我们可以使用ctrl + f
,快速搜索对应的药材名称,下面以麻黄
为例。
让我们把鼠标挪到麻黄
上面,我们就能发现处方中和麻黄
相关的药物。(小技巧:ctrl + 鼠标滚轮,可以调整鼠标指针的判定点大小)
我们的处方数据中包含麻黄汤,自然,我们可以在下图中看到麻黄 桂枝 杏仁 炙甘草
,
边越粗,代表一同出现的频次越高。