当前位置: 首页 > news >正文

【数据可视化】使用Python + Gephi,构建中医方剂关系网络图!

代码和示例数据下载

前言

在这篇文章中,我们将会可视化 《七版方剂学》 的药材的关系,我们将使用Python制作节点和边的数据,然后在Gephi中绘制出方剂的网络图。

Gephi是一个专门用于构建网络图的工具,只要你能提供节点和边的数据,你就可以绘制一个漂亮的网络图。

本文用Python实现了一个可复用的函数,用于输出节点和边的数据。

结果预览

每个药材对应一个节点。

将各个药材的关系展现出来,我们可以很直观的看到那些药材可能会被用在一起。

边越粗,代表被用在一起的频次越高。

在这里插入图片描述

利用Python制作“节点”和“边”的数据

在我们的用处方和药物信息_构建节点和边.py这个代码文件中,实现了一个函数叫generate_graph,本文将使用这个函数可视化 《七版方剂学》 的方剂。

有了这个函数,读者也可以很方便地针对特定的疾病的方剂数据进行可视化。

你只需要传入两个参数:

  1. 处方数据路径
  2. 药名药味药性数据路径

即可输出用于构建网络图的节点的文件。

下面是调用本人实现的函数的演示程序的代码,请在上文下载本文的附带的数据和代码来运行。
在这里插入图片描述
运行完毕,我们将会得到如下两个文件:

  • 示例处方数据_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 + 鼠标滚轮,可以调整鼠标指针的判定点大小)

我们的处方数据中包含麻黄汤,自然,我们可以在下图中看到麻黄 桂枝 杏仁 炙甘草

边越粗,代表一同出现的频次越高。

在这里插入图片描述

相关文章:

  • 微服务鉴权的几种实现方案
  • 记录解决问题--activiti8.2 流程图图片由png改为svg前端不显示图片问题
  • 20240323
  • 算法 之 排序算法
  • LeetCode第一天(495.提莫攻击)
  • 史上最详细的CrossOver24激活和使用教程(附网盘激活码)
  • excel 破解 保护工作簿及保护工作表
  • 树,二叉树与堆
  • 鸿蒙Harmony应用开发—ArkTS-@AnimatableExtend装饰器:定义可动画属性
  • ReaLTaiizor开源.NET winform控件库学习使用
  • uniapp使用Canvas给图片加水印把临时文件上传到服务器
  • 大模型开发中使用prompt提示最佳实践
  • pytorch 鲜见操作
  • web蓝桥杯2022省赛真题:水果拼盘
  • stable-diffusion-electron-clickstart 支持windows AMD显卡
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • EOS是什么
  • Java应用性能调优
  • Making An Indicator With Pure CSS
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • October CMS - 快速入门 9 Images And Galleries
  • python_bomb----数据类型总结
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • SpringBoot几种定时任务的实现方式
  • 分布式任务队列Celery
  • 分布式熔断降级平台aegis
  • ​TypeScript都不会用,也敢说会前端?
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (11)MSP430F5529 定时器B
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (二)pulsar安装在独立的docker中,python测试
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)kafka实战——kafka源码编译启动
  • (一)UDP基本编程步骤
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)nsfocus-绿盟科技笔试题目
  • (转)visual stdio 书签功能介绍
  • .net与java建立WebService再互相调用
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • @WebServiceClient注解,wsdlLocation 可配置
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • []FET-430SIM508 研究日志 11.3.31
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项
  • [C/C++]数据结构----顺序表的实现(增删查改)
  • [C++]AVL树怎么转
  • [codevs 1515]跳 【解题报告】
  • [codevs 2822] 爱在心中 【tarjan 算法】
  • [CVPR2021]Birds of a Feather: Capturing Avian Shape Models from Images
  • [DL]深度学习_Feature Pyramid Network