基于Python语言的冠心病证候与用药规律挖掘研究
2022-10-15陈善达
陈善达 梁 昊 李 亮
(1 湖南中医药大学,长沙,410208; 2 湖南中医药大学中医诊断学湖南省重点实验室,长沙,410208; 3 湖南中医药大学中医心肺病证辨证与药膳食疗重点研究室,长沙,410208)
冠状动脉粥样硬化性心脏病(冠心病)是冠状动脉发生粥样硬化引起管腔狭窄或闭塞,导致心肌缺血、缺氧或坏死而引起的心脏病,属于中医学“胸痹”范畴。冠心病严重危害着人们的生命健康,2018年我国冠心病患者已达1 100万,近年来发病呈上升、年轻化的趋势[1]。中医药在冠心病防治中有独到的优势,因此深入挖掘中医药治疗冠心病的证候与用药规律有重要意义。本文通过运用Python语言编写程序脚本对从3个学术数据库收集到的冠心病中医病案进行数据挖掘,以期为Python语言在中医药领域的运用提供思路与方法。
1 资料与方法
1.1 文献来源 所有病案数据来源于国家知识基础设施数据库(China National Knowledge Infrastructure,CNKI)、中国学术期刊数据库(China Science Periodical Database,CSPD)、中文科技期刊数据库(Chinese Citation Database,CCD)等数据库。
1.2 检索策略 运用CNKI、CSPD、CCD数据库,以“冠心病验案”“冠心病举隅”或“胸痹验案”“胸痹举隅”为检索式,检索2010年1月1日至2020年1月1日的所有期刊文献,共检索出610篇;筛选并剔除重复文献,最终纳入222篇,共计医案343个。
1.3 纳入标准 1)符合西医“冠心病”或中医“胸痹”诊断标准且证候、证型、方药完整的中医诊治文献,诊断标准参照《内科学》以及《中医内科学》[2-3];2)使用中药内服法治疗。
1.4 排除标准 1)学术思想探讨与综述类的文献;2)单味药、药对及复诊处方。
1.5 数据规范与数据库建立
1.5.1 数据库的建立 运用Excel 2019收集每个病案的证型和用药构建冠心病用药数据库,采用双人分别录入模式,录入完成后进行双人交叉核对,若存在不一致处则协商解决,以确保数据的准确性和规范性。
1.5.2 数据规范 参照中国中医药出版社出版的新世纪第4版《中药学》以及朱文锋教授主编的《证素辨证学》[4-5],对其中涉及的证候、证型、药物的名称进行规范化处理并将证型中包含的病性证素提取出来,例如,心慌→心悸,大便干结→便秘,炙甘草→甘草,山萸→山茱萸,气虚夹瘀→气虚血瘀→气虚+血瘀等。见表1。
表1 部分证素、中药规范
1.6 数据分析 运用Excel 2019分别对证候、证素和用药进行频数统计,按降序处理并计算相应的频率。提取频率≥10%的所有证素、证候、中药以及频次≥10的证素组合。在PyCharm Community Edition 2020.1.1中运行Python 3.8.3,运用xlwings工具包将Excel文件内容提取到TXT文件中,运用Python内置函数对数据进行处理,运用itertools工具包对所有高频证素组合的高频证候或高频用药进行排列组合,设置最小组合数为2,最大组合数为6,其中包含证素与证候或中药的组合,也包含没有证素只有证候或中药的组合,筛选出既包含证素组合又包含证候或中药的所有组合,进行频数分析,筛选出频率≥7%的“证素-证候”以及“证素-中药”组合,并计算各组合的权值。根据朱文锋教授的双层频权剪叉算法确定的权值计算方式为:某一“证素-证候”或“证素-中药”组合的频数/出现该证候或使用该中药组合的所有“证素-证候”或“证素-中药”组合的频数[6-10]。例如,“气虚+血瘀,苔白,乏力”这一“证素-证候”组合的权值=“气虚+血瘀,苔白,乏力”这一“证素-证候”组合的频次/所有包含“苔白,乏力”这一证候组合的“证素-证候”组合的频次。权值越高则说明特异性越强。筛选出所有权值≥0.8的组合,再将筛选的结果取并集得出每一证素组合的高频证候或高频用药,并用Python绘图工具包Pyecharts绘制关联图。
2 结果
2.1 频数分析 本研究录入的343个冠心病医案处方中,涉及17个单一证素,累计频次815次,频率≥10%的有8个,分别为血瘀、痰、气虚、气滞、阳虚、阴虚、火(热)、湿;涉及94种证素组合,累计频次288次,频次≥10次的组合有6个,分别为“气虚+血瘀”“气滞+血瘀”“痰+血瘀”等。见表2。涉及证候218个,累计频次4 418次,出现频率≥10%的证候共30个,分别为胸闷、胸痛、气短、苔白、舌暗、乏力、脉弦、心悸、舌红、脉细等。见表3。涉及313味中药,累计频次4 852次,使用频率≥10%的中药共37味,分别为丹参、甘草、川芎、半夏、茯苓、当归、黄芪、薤白、赤芍、瓜蒌等。见表4。
表2 343个冠心病医案处方高频证素分布
表3 343个冠心病医案高频证候分布
表4 343个冠心病医案高频中药分布
2.2 权值计算与筛选 对包含高频证素的127个病案进行排列组合后,筛选出频率≥7的组合,其中“证素-证候”组合共计377个,“证素-中药”组合共计245个。对所有组合进行权值计算,其中权值≥0.8的“证素-证候”组合183个,权值≥0.8的“证素-中药”组合153个。见表5~6。取交集后得到4个“证素-证候”组合,5个“证素-中药”组合,其中中药药味≥5味的有3个。见表7~8。“证素-证候”与“证素-中药”组合的关联图见图1~2。
表5 343个冠心病医案部分“证素-证候”权值分布
表6 343个冠心病医案部分“证素-中药”权值分布
表7 343个冠心病医案高频“证素-证候”组合
图1 343个冠心病医案“证素-证候”与“证素-中药”关联
表8 343个冠心病医案高频“证素-中药”组合
图2 343个冠心病医案“气虚+血瘀”与证候、中药关联
3 讨论
冠心病属于中医学“胸痹”的范畴。中医学认为胸痹的发生多与寒邪内侵、饮食失调、情志失节、劳倦内伤、年迈体虚等因素有关。其病机有虚实2方面,实性病机有寒凝、血瘀、气滞、痰浊痹阻胸阳,阻滞心脉;虚性病机有气虚、阴虚、阳虚,肺、脾、肝、肾亏虚,心脉失养。在本病证的形成和发展过程中,大多因实致虚,亦有因虚致实者。本研究通过对343个冠心病中医病案频数分析得出,与冠心病关联度较高的实性证素为血瘀、痰、气滞、湿、火(热),出现频次总计531次,虚性证素为气虚、阳虚、阴虚,出现频次总计230次,可见冠心病发病主要以因实致虚为主。从频次与频率来看,病机主要与血瘀、痰浊、气虚所致的心脉痹阻有关。通过对343个冠心病病案的挖掘分析发现,血瘀为冠心病的基本证素,多与气虚、气滞、痰、阴虚等证素相结合形成气虚血瘀、气滞血瘀、痰瘀互结、气阴两虚夹瘀、气虚血瘀夹痰等证型。从“证候-证素”分布可以看出,4个证型的共同证候为胸闷、胸痛与舌暗,因瘀血痹阻心脉所致;心悸为气虚血瘀、痰瘀互结与气滞血瘀共有的证候,由于瘀血痹阻,心脉失养所致;失眠为气虚血瘀、气滞血瘀和气阴两虚夹瘀共有的证候,由于瘀血不去、心血不生、心神失养所致;脉细为气虚血瘀与气阴两虚夹瘀共有的证候,由于体虚,运血无力所致;脉弦为痰瘀互结与气滞血瘀共有的证候,是痰与气滞的特征性证候;乏力为气虚血瘀与痰瘀互结共有的证候,由于机体阳气不运所致;气虚血瘀特有的证候有苔白、舌淡、脉沉、汗出与气短,由于血运不畅、宗气不足、卫表不固所致;痰瘀互结特有的证候有苔腻、纳呆、苔厚、脉滑与舌胖,由于痰浊内阻、脾胃运化失常、浊气上泛所致;气滞血瘀特有的证候有瘀点(斑)舌与苔黄,由于气血运行不畅、郁而化热所致。从“证素-中药”分布可以看出,气虚血瘀证用药可归纳为补阳还五汤合八珍汤加减,具有益气活血通络的功效;气滞血瘀证用药可归纳为柴胡疏肝散合桃红四物汤加减,具有疏肝解郁、理气活血的功效;痰瘀互结证用药可归纳为温胆汤合瓜蒌薤白白酒汤加减,具有理气化痰、通阳散结的功效。前3个组合中都用到了丹参和郁金,二味药均为活血化瘀药。丹参中的丹酚酸A、丹酚酸B、丹参素和丹参多酚酸盐等主要水溶性成分可以通过保护血管内皮、舒张冠状动脉、促进血管再生、抗血小板聚集、抑制炎症反应、抗细胞凋亡和清除自由基等多角度对缺血性心脏病起防治作用[11-14]。郁金中的莪术二酮能够提高cAMP水平,抑制胞内Ca2+调动,从而抑制血小板凝集,同时也能增强血管舒张能力以减少血栓的形成[15]。郁金中的柚皮素具有抗氧化、预防动脉粥样硬化和降血脂的作用[16]。网络药理学研究表明,郁金能通过参与调节脂质代谢、氧化应激、免疫调节等来发挥清心凉血的功效[17]。
与传统的运用软件进行中医药数据挖掘比较,选择编程语言可以根据自身的需求编写代码实现个性化的结果,使挖掘过程更具灵活性。例如,可以编写程序脚本对TXT、Word或Excel等进行数据批量处理,根据需求设计算法,也可以进行个性化绘图[18]。运用编程语言最大的特点是具有先进性,传统的软件维护更新较慢,许多功能比较落后,编程便可以弥补这一缺陷。与C语言、Java等代码冗杂、格式繁琐的编程语言比较,Python语言是目前最接近自然语言的高级语言,其代码简洁、可读性高的特性适合初学者学习,并且学习投入与产出比高于其他语言[19-20]。Python还有许多开源免费、功能强大的工具包,在数据分析方面,Python有可以用于矩阵运算的NumPy包,用于数据处理的Pandas包,用于统计分析的SciPy包,用于机器学习的Scikit-Learn包,用于深度学习的Keras包、TensorFlow包和PyTorch包等,以及用于数据可视化的Matplotlib包和Pyecharts包等。
自2018年以来,Python的使用人数整体呈上升趋势,在TIOBE发布的2020年11月编程语言排行榜中显示,Python首次超越Java成为排名第2的编程语言。如今Python的发展势头强劲,日后在各大学科领域将会有诸多用武之地,同样地,Python也将在中医药领域出现更多的创新与突破。