方剂中的高频单味两味和三味中药R语言进行关联规则分析!
背景介绍
如果有一组方剂, 如下图所示 ,你想从中挖掘出常用的单味、单味、两味、三味中药 ,你该怎么去做?
今天我们使用 R语言的办法来进行挖掘分析 ,看看能挖掘出什么东西来?
软件介绍
[软件名称]:R;RStudio 教程介绍
1.首先我们使用在 RStudio 中设定运行的文件夹,然后加载需要的R包,最后读取数据# 设定文件夹 setwd("D:Desktop") # 加载需要的包 # 数据处理绘图用 library(tidyverse) # 读取excel用 library(openxlsx) # 关联规则用 library(arules) # 读取excel数据 data <- read.xlsx("example.xlsx")
2.接下来我们自建个函数,将方剂列分开成单味中药( 我构建的这个函数,可以分单个方剂中药物为24个的,自己的是多少可以酌情增加或减少;中药之间使用的是顿号,所以以"、"分隔 )# 自建函数 TCM2dataframe <- function(TCM){ # TCM为中药方剂的列,之间使用"、"分割 TCM_split = TCM%>%str_split("、") TCM_rbind = cbind( TCM1 = sapply(TCM_split, "[",1)%>%as.data.frame(), TCM2 = sapply(TCM_split, "[",2)%>%as.data.frame(), TCM3 = sapply(TCM_split, "[",3)%>%as.data.frame(), TCM4 = sapply(TCM_split, "[",4)%>%as.data.frame(), TCM5 = sapply(TCM_split, "[",5)%>%as.data.frame(), TCM6 = sapply(TCM_split, "[",6)%>%as.data.frame(), TCM7 = sapply(TCM_split, "[",7)%>%as.data.frame(), TCM8 = sapply(TCM_split, "[",8)%>%as.data.frame(), TCM9 = sapply(TCM_split, "[",9)%>%as.data.frame(), TCM10 = sapply(TCM_split, "[",10)%>%as.data.frame(), TCM11 = sapply(TCM_split, "[",11)%>%as.data.frame(), TCM12 = sapply(TCM_split, "[",12)%>%as.data.frame(), TCM13 = sapply(TCM_split, "[",13)%>%as.data.frame(), TCM14 = sapply(TCM_split, "[",14)%>%as.data.frame(), TCM15 = sapply(TCM_split, "[",15)%>%as.data.frame(), TCM16 = sapply(TCM_split, "[",16)%>%as.data.frame(), TCM17 = sapply(TCM_split, "[",17)%>%as.data.frame(), TCM18 = sapply(TCM_split, "[",18)%>%as.data.frame(), TCM19 = sapply(TCM_split, "[",19)%>%as.data.frame(), TCM20 = sapply(TCM_split, "[",20)%>%as.data.frame(), TCM21 = sapply(TCM_split, "[",21)%>%as.data.frame(), TCM22 = sapply(TCM_split, "[",22)%>%as.data.frame(), TCM23 = sapply(TCM_split, "[",23)%>%as.data.frame(), TCM24 = sapply(TCM_split, "[",24)%>%as.data.frame()) colnames(TCM_rbind) <- paste0("中药",1:24) return(TCM_rbind) } # 整合表格并写入csv文件 TCM2dataframe(data$方剂)%>% write.csv(file = "TCM_2.csv")
3.读取刚才保存的那个 csv 文件,查看数据类型前5个# 读取csv文件 transdata0 <- read.transactions("TCM_2.csv", format = c("basket"), header = TRUE, sep = ",", cols = 1, rm.duplicates = TRUE) # 查看数据类型 inspect(transdata0[1:5])
4.计算高频词的单味中药,此时,计算的频次就出来了 # 高频词中药计算 TCM_Freq <- itemFrequency(x = transdata0,"absolute")%>% sort(decreasing = TRUE)%>% as.data.frame() TCM_Freq <- TCM_Freq%>% mutate("中药名称" = rownames(TCM_Freq), .before = 1) TCM_Freq
5.我们开始对这个数据进行绘图,同时使用程序保存图片 # 绘制柱状图 library(ggsci) TCM_Freq$中药名称<- factor(TCM_Freq$中药名称,levels = TCM_Freq$中药名称) p1 <- ggplot(TCM_Freq[1:10,],aes(x = reorder(中药名称,.),., fill = 中药名称, label = .))+ geom_bar(stat="identity",width = 0.8)+ coord_flip()+ scale_fill_aaas()+ labs(x = "中药名称",y = "频次")+ scale_y_continuous(limits = c(0,35),expand = c(0,0))+ geom_label(nudge_y = 2)+ theme_bw()+ theme(legend.position = "none", axis.title = element_text(size = 12,face = "bold"), axis.text = element_text(size = 10,face = "bold"), text = element_text(family = "serif")) tiff("中药词频柱状图.tif", width = 11,height = 9, units = "cm",res = 300, compression = "lzw",) p1 dev.off()
6.接下来我们使用关联规则进行两味及其以上的组合分析,首先利用算法分析关联规则 # 分析关联规则 myrules <- apriori(transdata0, parameter = list(supp = 0.07, conf = 0.6, target = "rules")) summary(myrules)
7.将结果按照出现的频次进行排序,结果转化为dataframe # 按照出现的频次进行排序 myrules.conf <- sort(myrules,by="count",decreasing = T) TCM_FJ <- inspect(myrules.conf)%>%as.data.frame()
8.将 dataframe 中第一和第二列数据中的括号取消,使用paste0函数将两列粘贴在一起生成新的列# 去除掉左右的{} TCM_FJ$lhs <- gsub("[{}]","",TCM_FJ$lhs) TCM_FJ$rhs <- gsub("[{}]","",TCM_FJ$rhs) TCM_FJ方剂中的高频单味、两味和三味中药:R语言进行关联规则分析!-今日头条组合` <- paste0(TCM_FJ$lhs,", ",TCM_FJ$rhs) TCM_FJ
9.我们会发现,生成的数据中,有些数据是重复的,如第8和9行,为 石菖蒲、远志、白芍 和白芍、远志、石菖蒲 ,所以我们保留一个组合就可以了,使用下面函数进行排序并去除掉一个,写成excel文件 # 将组合的列中的中药排序,去除重复内容 TCM_FJ$组合 <- sapply(TCM_FJ$组合, function(x) sort(unlist(str_split(x,", ")))) TCM_FJ <- TCM_FJ[!duplicated(TCM_FJ$组合),] write.xlsx(TCM_FJ,"temp.xlsx")
10.最后,我们要人工将 count列 和组合列 进行筛选,如两味药的前10名 和三味药的前10名 ,整理出来,如下所示
11.最终使用R语言对其进行绘图即可,保存图片用于发表文章 # 绘图2味药物 TCM_2 <- read.xlsx("temp.xlsx",sheet = 2) TCM_2$组合<- factor(TCM_2$组合,levels = TCM_2$组合) p_2 <- ggplot(TCM_2,aes(x = reorder(组合,count),count, fill = 组合, label = count))+ geom_bar(stat="identity",width = 0.8)+ coord_flip()+ scale_fill_npg()+ labs(x = "配对中药(2味)",y = "频次")+ scale_y_continuous(limits = c(0,25),expand = c(0,0))+ geom_label(nudge_y = 2)+ theme_bw()+ theme(legend.position = "none", axis.title = element_text(size = 12,face = "bold"), axis.text = element_text(size = 10,face = "bold"), text = element_text(family = "serif")) tiff("配对中药(2味).tif", width = 11,height = 9, units = "cm",res = 300, compression = "lzw",) p_2 dev.off()
12.绘制 3味药物 的图形并进行保存# 绘图3味药物 TCM_3 <- read.xlsx("temp.xlsx",sheet = 3) TCM_3$组合<- factor(TCM_3$组合,levels = TCM_3$组合) p_3 <- ggplot(TCM_3,aes(x = reorder(组合,count),count, fill = 组合, label = count))+ geom_bar(stat="identity",width = 0.8)+ coord_flip()+ scale_fill_npg()+ labs(x = "配对中药(3味)",y = "频次")+ scale_y_continuous(limits = c(0,20),expand = c(0,0))+ geom_label(nudge_y = 1)+ theme_bw()+ theme(legend.position = "none", axis.title = element_text(size = 12,face = "bold"), axis.text = element_text(size = 10,face = "bold"), text = element_text(family = "serif")) tiff("配对中药(3味).tif", width = 11,height = 9, units = "cm",res = 300, compression = "lzw",) p_3 dev.off()
13.好了,这就是今天讲解的,如何从一组方剂中,挖掘出频次最高的单味、两味、三味中药!
三拉萨名称到底是怎么来的很多人都知道,拉萨是圣城的意思,并会讲述山羊负土填湖建大昭寺的著名传说。因为,在古藏文里拉萨一词早期的拼写和读音为Rasa,其中Ra(惹)是山羊,sa指土地地球地方,从民间语源学完
时隔十年,广西平南的这个特大型宝藏终于迎来了开发期都说广西的旅游资源丰富,殊不知广西的矿产资源也是同样的丰富。例如百色市铝土矿就占到全国储量的四分之一,探明资源量达7。5亿吨,远景储量10亿吨以上。而河池市的铟储量则名列世界第一,
10月14日张思德纪念馆恢复开放!开馆公告尊敬的游客朋友根据省市防疫工作要求及馆区实际情况,张思德纪念馆和仪陇县博物馆在严格执行通风消毒环境清洁核酸检测等疫情防控准备工作的前提下,经研究,决定于2022年10月14
南国有奇景误入凡尘间忆我的第一次黄山之旅一直想写下黄山的美,但几经提笔又放下,怕自己水平有限,写不出她的美,但云海苍松落日,不时在脑海闪过,于是落笔浅谈。初次听说黄山,是被黄山的名片迎客松吸引,只觉得很美,自己一定要去看
自驾攻略国庆长沙橘子洲行橘子洲又称橘洲水陆洲,它位于长沙市区对面的湘江江心,是湘江下游众多冲积沙洲之一,也是世界上较大的内陆洲。橘洲,西望岳麓山,东临长沙城,四面环水,绵延数十里,形状是一个长岛,是长沙重
服中药期间,可以喝茶吗?服中药期间,可以喝茶吗?经常有患者问这个问题。为什么会有这个问题呢?遇秋猜测,可能是有些地方有茶会解药的说法?茶叶,苦甘微寒。单纯从药性角度来讲,它就有点清热的功效。遇秋查阅本草书
阳痿的中医疗法浅谈阳痿属于性功能障碍的一种,对男性身心健康危害很大,而且还会影响生育影响夫妻感情,因此当男性出现阳痿现象时,要注意及时治疗,其中有不少患者会选择中医治疗,中医治阳痿可采用辩证疗法,对
类风湿关节变形疼痛麻木,或因脾虚导致,一张方子,健脾驱邪很多类风湿关节炎患者都逃脱不了终身服药的命运,因为找不到对症的病因,只能采取一些措施控制进展,其实大多数人都忽略了一个关键。很多人类风湿没有改善,是因为脾虚。为什么这么说呢?我给大
喝牛奶与不喝牛奶的老人,有什么差别?医生说出了实话牛奶是日常生活当中常见的一种饮品,对于男女老少都是比较合适的,而且它的营养价值比较高,比如蛋白质,钙元素,氨基酸等。很多人在早餐的时候会选择喝一杯牛奶,能够为身体补充营养,提供能量
教你如何把腰椎间盘突出症给吃走多一点健康关注,少一点疾病担忧有很多腰椎间盘突出症的病人经常问我在饮食方面有没有需要注意的。答案是肯定的。腰椎间盘突出症的患者在吃上不仅仅需要注意,还有一些讲究。只有饮食上正确合理
万病归于脾,几块钱的归脾丸,不仅能益气补血,还能治疗这6种病万病归于脾,脾为气血生化之源,如果脾虚,无力化生气血,人就容易生病。今天贾医生跟大家分享的这个药呢,叫做归脾丸,它在药店里十分常见,价格呢也很便宜,但你千万不能因此而小看了它,它不