论文部分内容阅读
摘要:文章通过对得到的医院体检数据、门诊数据进行分析,将体检和诊断冠心病建立联系,并改进数据挖掘算法Apriori算法来进行关联分析。
关键字:数据挖掘;冠心病;Apriori算法;python
1.问题的提出
冠心病是冠状动脉粥样硬化性心脏病的简称,冠状动脉供应心脏自身血液,冠状动脉发生粥样硬化或者痉挛,使得冠状动脉变得狭窄甚至是鼻塞,导致心肌缺血缺氧的一种心脏病。冠心病由于其发病率高,死亡率高,严重危害着人类的身体健康,从而被称作是“人类的第一杀手”。所以对于冠心病患者的相关性分析成为近几年的热点,如何从已经得到的患者的数据中,找到与冠心病相关的数据,并进一步研究分析,或者与冠心病可能导致成因的数据加以分析,成为人们研究的重点。
据了解目前国内外研究冠心病发病相关因素主要停留在访谈法、A型行为量表测试收集资料法、问卷调查、病历分析等人工统计、分析阶段,鲜有相关资料证明是基于数据挖掘方面的冠心病发病相关因素研究分析的。随着计算机、网络技术的发展,获得有关资料已经变得简单易行。但是对于数量较大、涉及面广的数据,仅仅依靠简单地汇总,按照固定的模式进行分析统计是无法完成这一任务的,甚至是效率低下,得不到相应的结果,所以,一种智能化的,综合应用各种统计方法、数据库等的技术应运而生,这就是目前较为流行的数据挖掘。
数据挖掘又被称为数据库知识发现,是一种交叉学科,包括统计学、机器学习、数据库、模式识别等等,它是利用各种方法从海量的凌乱的有噪声的数据中提取隐含在其中的事先未知的有价值的模式或者规律的复杂过程,其过程包括对于数据库的建立和管理、提取数据、数据预处理、建立模型、模型评估等一系列过程。在海量数据、高维数据的现在,要注重从数据本身的特征出发,发现数据中隐藏的价值。
冠心病的确诊一般最常见的是心电图,再就是64排CT检查,通过检查血管狭窄的情况,来判断是否患病,且一般没有预测。之前的研究是基于检查以及确诊以及治疗的,没有对于体检后是否可以由某些体检数据得到与冠心病相关列的指标,本文将对冠心病与体检数据进行关联分析,本文的数据是由医院记录的多年的体检数据,以及体检后病人在此医院就诊的数据,对得到的数据进行分析,看冠心病与哪些体检指标有关联,希望获得一些对人类有贡献的知识。
2.国内外研究进展
冠心病是一种严重危害人类健康的常见疾病、多发病症,已经成为在不同国家和地区发病和死亡的最常见病症之一。在大多数发展中国家,包括我国在近几十年对于冠心病之死亡率也大幅度上升,预计到2020年,冠心病将成为全球人口死亡和残疾的最主要的元凶[1]。
其研究的内容是基于医学理论的,有脂肪浸润学说,血小板活化、聚集和血栓形成学说、肉皮损伤学说、炎症学说等等,大部分研究的是冠心病的发病机制,以及药物对于冠心病治疗的研究,当然也有对于单项发病因素进行研究的案例,例如血浆载脂蛋白与冠心病的相关性研究[2][3] 。
大部分的研究是在医学领域,对于病理的研究与分析。研究冠心病患者的冠心病危险因素的特点以及临床表现,探讨冠心病病变的相关性。通过对患者各项指标的测量,得到了冠心病的危险因素,包括高敏括高敏C-反应蛋白hs-CRP水平、左心室射血分数等[4]。目前对于揭示冠心病特征的变化规律,揭示冠心病症候特征的变化规律等[5]。
3.本文研究分析
本文将对从医院获得的上万条病人的体检数据以及病人的门诊确诊数据进行研究分析。病人的体检数据中有很多数据,比如有血、血浆、血清、尿等检测项目,进一步对于各项又有小的检测项目,比如光是血清又有两百多项项目,有HIV,ALD、类风湿因子等等,对于如此巨大的数据量,想要获得需要的信息,就需要对数据进行处理。
将导出的数据、各种量表及病人的相关数据整理,建立病人的原始资料数据表。此表中包含医院给出的所有数据,包括冗余数据,无效数据等。进一步需要对得到的数据进行处理。各个表格数据类型不尽相同,且不是对应于每个病人或者体检者有相应的检查数据、诊断数据以及住院数据,但是体检流水号是唯一的,所以对于各个表格进行连接靠着体检流水号的唯一性进行的。经过对数据的清洗,去重等操作,再进一步查找与冠心病有关的体检项目。
最终得到患冠心病的患者大部分都检查了血浆、学液等几项指标,对于得到的指标,并不是每个病人都检查了此项内容,再对其中的每一小项进行研究,得到了血浆中与冠心病有关的七个小项,进一步分析得到此项指标比正常人高出两倍。
4.本文研究方法与步骤
4.1问题的确定
对于从医院获得的数据,建立数据库ceshi,将得到的体检数据、门诊数据以及住院数据分别建立表tj_jy,tj_mz以及tj_zy;由于获取的数据是杂乱的,且有很多重复的数据,所以先对数据进行简单的预处理,去除重复的数据,得到新的表ti_jy_qc, tj_mz_qc以及tj_zy_qc。对于得到的结果进行进一步处理,以便确定所要研究的内容。根据三个表格,先查询得到所有病人所患病症种类,让其按照数量降序排列,以便找到要研究的病症,得到病症后根据数量的多少来查看哪些具有研究价值,并且选择自己感兴趣的部分进行研究;用sql查询患者病症以及患者人数结果如下:
发病率较高的如发烧、咳嗽、高血压等大多为常见病,且对其的研究已经很全面,则选择了冠心病作为研究对象,从获得的数据中冠心病患者大约有两万多人,而且冠心病多发生于中老年。冠心病是冠状动脉性心脏病(coronary artery heart disease, CHD)的簡称,是一种最常见的心脏病,是指因冠状动脉狭窄、供血不足而引起的心肌机能障碍和(或)器质性病变,故又称缺血性心肌病。冠心病是一种由冠状动脉器质性(动脉粥样硬化或动力性血管痉挛)狭窄或阻塞引起的心肌缺血缺氧(心绞痛)或心肌坏死(心肌梗塞)的心脏病,亦称缺血性心脏病。冠心病的发生与冠状动脉粥样硬化狭窄的程度和支数有密切关系,同时患有高血压、糖尿病等疾病,以及过度肥胖、不良生活习惯等是诱发该病的主要因素。冠心病是全球死亡率最高的疾病之一,根据世界卫生组织2011年的报告,中国的冠心病死亡人数已列世界第二位,所以具有研究价值,确定研究对象后进行进一步的研究与分析。 4.2研究对象的确定
根据选定的研究对象,确定所研究的对象的相关科室以及患者在此之前所体检的项目;根据查询确定冠心病确诊的门诊科室,如下所示:
再用查询语句对tj_jy_qc表与tj_mz_qc表进行连接,查看患者之前所检查的项目研究冠心病与哪些体检项目有关联,进而研究有何种关联;根据之前的检查结果,冠心病的确诊是在内科以及心血管内科门诊确诊,所以限定科室为内科或者心血管内科门诊,以便快速的查询,经查询在限定科室内得到患者所进行的体检项目:
注:根据之前查询结果得到冠心病大部分是在心血管内科门诊确诊,所以此处限定科室,以便查询结果,涂黑部分为病人名字,为保证个人隐私,做涂黑处理。
得到两个表之间是有关联的,再对两个表进行连接,查看检查的项目中冠心病患者主要检查了哪些项目,经查询得到大部分患者检查过的项目有血浆,尿液,全血,血等,对于每个病人检查的项目中查询冠心病患者中检查最多的是哪个,以便去订研究对象,对上述查询结果进行保存,可以直接导出到表格xiangguanjiancha.xlsx,建立表xiangguanjiancha储存得到的结果,再对得到的结果进行查询检查最多的体检项目。
建立xiangguanjiancha表,将之前得到的保存结果xiangguanjiancha.xlsx导入xiangguanjiancha表中,查看患者检查的项目中哪项检查数量最多,经查询得到患者大部分检查了血浆,下一步则要对体检值进行研究。
4.3研究对象值的确定
检查体检检验中,血浆检查的二级项目有哪些,再对检查的项目建表,进行研究,
查询体检检验中所检查的各个项目的具体小项目,例如血清中检查了什么,得到查询结果结果如下:
将查询结果导出到EXCEl表中,根据SQL的命名规则,是不允许有中文以及不区分大小写的,所以对于得到的结果进行英文的命名,建立数据字典,将得到的结果建立表格xue_jiang。建立病人表,查询tj_jy表,将所有的病人导入表格patient中,以便在数据库中建立patient表,去掉重复的体检流水号,建立患者表,再将得到的结果保存到一个新表中,作为病人的记录表patient,建立patient,并将结果导入数据库中,进一步查询患有冠心病的患者,将患者数据导入表gxbpatient中,将的到的结果保存在gxbpatient表中便于进一步研究,同时检查患有冠心病的患者血浆中检查了哪些指标;得到195个患者血浆检测的二级项目246个,再对这246个二级项目进行分析,因为并不是每个患者都检查了这些二级项目,所以大部分为空值,对于空值的处理,首先选择非空值超过80%的二级项目进行处理,空值超多80%的则忽略不研究,再对得到二级项目的空值进行分析。此处对于表的操作用python处理,Python是一种面向对象、直译式计算机程序设计语言。也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用。Python语法简捷而清晰,具有丰富和强大的类库。它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。所以次出用python处理。代码见附录python代码1。
处理结果如下所示,得到从医院中获得的病人数据中患者的体检项目血浆的二级项目哪些具有研究意义:
分别是xue_jiang表中的第22/30/47/76/90/170/223/248/249项。将这些二级项目取出,保存在表gxbxjz(冠心病血浆值)中;再建立表gxbxjz以便对得到的冠心病患者血浆值二级目录值进行研究。
经观测,要研究的血浆的二级项目均为连续值,所以空值的填补用平均值。用python分别对gxbtjz与patient表进行处理,得到所要检测的二级项目值之间的关系,为了简易处理,计算二者的平均值进行比较分析。得到结果如下所示。
---病人的平均值:0.647126566 28.99658098 2.04196926 17.54878065 0.520438877 2.38056535 1.110689336 0.029725826 142.3368553
----冠心病患者平均值0.472993197 57.30806608 4.234275996 22.63556851 1.048386783 4.725111759 2.511690962 0.056448008 288.4373178
对比可以得到得到的平均值为普通的两倍多,其九项的内容分别是:甘油三酯(TG),肌酐(CREA),尿素(BUN),丙氨酸氨基转換酶(ALT),高密度脂蛋白C(HDL-c),葡萄糖(GLU),低密度脂蛋白C(LDL-c),尿素氮/肌酐(BUN/CR),尿酸(URIC)。
有研究表明冠心病患者[2]的血浆apoB100/apoA1明显高于普通人群,经相关性分析,载脂血蛋白(高密度脂蛋白C:HDL-c;低密度脂蛋白C:LDL-c)与冠心病密切相关,是冠心病最显著的独立相关危险因素,与以往的研究结果相似。与本文检测内容一致。所以以后病人在体检时,如果这几项指标超过正常值,则需要进一步做检查,查看是否患有冠心病,并且注意调整,以预防冠心病的发生。
4.4数据挖掘在冠心病体检项目中的应用
根据上面的研究与分析,得到冠心病患者体检中血浆项目的体检是较为全面的,下面用数据挖掘算法进行验证分析得到冠心病与血浆中这些检验项是有关联的。根据前面分析得到的表gxbhzxjjy(冠心病患者血浆检验),对它进行预处理,删除不相关列,比如tjliu、卡号、p_name明显不相关的直接删除;因为只有195条记录但是属性值有246条,所以进行预处理可以直接在EXCEL表中进行处理,因为空值较多,且空值表示没有检验此项内容的,为简便表示,做如下替换:NULL赋值为0,阴性、阴性(-)赋值为1,阳性、阳性(-)赋值为2,求每一列的和,值为0表示冠心病患者都没有检验此项,直接删除,以简化处理,对于留下的数据,非空值赋值为其属性值,空值则删除,得到每项记录。 为了找冠心病相关联因素,对数据进行处理,将0值删除,空值补充为平均值,将结果另存为gai.txt.
5.Apriori算法在冠心病研究中的应用
关联规则是数据挖掘的一个重要研究方向,其目的是发现大量数据中项集之间的关联或者相关联系。挖掘关联规则就是在大量实物数据中找出用户感兴趣的关联性,即事务数据库中满足用户给董的条件(最小支持度与最小置信度)的项目集合,我们将这个项目集合成为频繁项目集,简称频繁集。上述挖掘过程通常分为两个步骤:一是扫描事务数据库,从中找出所有满足用户指定最小支持度的频繁项集;而是利用频繁项集生成所需的关联规则,分析醒目之间的关联性。
5.1经典Apriori算法
Apriori算法[6]是挖掘关联规则的经典算法,由Agrawal等人于1994年提出,是一种具有重要影响的挖掘关联规则频繁项集的算法,其核心是基于两阶段频繁项集的递推算法,通过候选项集找到频繁项集。Apriori算法使用一种称作逐层搜索的迭代方法, 项集用于搜索生成 项集,将Apriori相纸用于茶渣频繁项集的时候,只要发现一个候选集的飞空自己不频繁,则可以判断这个候选集不频繁[7]。可以将这个过程分为两个步骤:连接和剪枝。
(1) 连接步:产生候选项集 ;
(2) 剪枝步:扫描数据库,计算候选项集 中每个候选的技术是否满足最小支持度来确定 。然而 可能很大,为了减少对数据库的扫描次数,可以利用Apriori的性质[7]将候选集从 中删除。
通过以上描述,我们看出监管利用Apriori的性质来减少了对数据库的扫描,但是依然存在不足:(1)他可能产生大量候选集;(2)他可能需要重复扫描数据库以计算每个候选集的频繁程度。所以对于Apriori的改进方法在于降低候选集的数量和减少对数据库的扫描次数。
5.2Apriori算法的改进
命题1:如果一个数据项在数据库中是频繁的,则该数据项的自己在数据库汇总也是频繁的。
命题2:如果一个数据项在数据集中是非频繁的,则包含该数据项的父集也是非频繁的。
由5.1的描述可知,如果我們从单一元素所构成的集合下手,根据支持度判别条件对该树进行“剪枝”,将大大降低计算的次数。
得到 后,如果根据组合原理直接生成 然后对每个可能的组合计算支持度,计算量依然很大。这里再次进行剪枝。为了不失一般性,对于 层中的每个集合先排序,然后将满足以下条件的集合融合,构成 层。之所以这样做是因为,根据命题2,如果集合C4层的{acde}是频繁集,那么 层中必定要存在 和 。因此只需在 成对这两个集合融合即可,不必再将 和 融合,在 层对元素排序的目的也正是在此,快速地找到满足条件的子集并融合,避免重复计算。
在得到 层后,计算其中每个集合的支持度,需要从数据库中遍历所有的数据项看是否包含该集合。假设由 生成 这一规则不满足置信度公式,回顾置信度的公式,也就是说 在数据库中出现的次数偏多,而 出现的次数偏少,根据命题1, 的子集也是频繁项,根据命题2, 的父集也很少出现,从而 生成 等规则的置信度更低,然后将其从集合树上减去。
通过上面的分析得到算法优化的步骤如下所示:
1). 遍历数据库,得到所有数据项构成的并集(也就是得到 层)
2). 计算 层中每个元素的支持度(该过程可用Hash表优化),删除不符合的元素,将剩下的元素排序,并加入频繁项集R
3). 根据融合规则将 层的元素融合得到 ,
4). 重复2),3)步直到某一层元素融合后得到的是空集
5). 遍历 中的元素,设该元素为
6). 按照方法 先生成 层规则
7). 计算该层所有规则的置信度,删除不符合的规则,将剩下的规则作为结果输出。
8). 生成下一层的规则,计算置信度,输出结果。
运行结果如下所示,因为设定阈值不同,导致得到的结果不尽相同,但包含着查询中体检项目,综上,冠心病与血浆检验中的ATL,可以得到结论:在日常体检中,如果ATL值、BUNCR值等比正常水平偏高,则需要进行进一步检测以及调整近期饮食与注意锻炼[8]。
参考文献
[1] 史琦.基于数据挖掘的冠心病不稳定性心绞痛中医证候识别规律的研究.博士论文,2012年5月
[2] 雷蕾,陈丽.血浆载脂蛋白与冠心病的相关性研究.当代医学.2011年4月第17卷第12期
[3] 张卫.冠心病患者糖化血红蛋白、脂蛋白a与冠脉病变程度的关系.2014年硕士论文
[4]高阅春,何继强,姜腾勇,陈方.冠心病患者冠状动脉病变严重程度与冠心病危险因素的相关分析.中国循环杂志2012年03期
[5]毛静远,牛子长,张伯礼.近40年冠心病中医证候特征研究文献分析.中医杂志 2011年11期
[6] 赵建松,陈在平. 基于SQL的Apriori改进算法研究. 天津理工大学学报.209年4月
[7] 顾庆峰,宋顺林. Apriori算法在SQL中的改进与应用. 计算机工程与设计. 2007年7月
[8] 闫志虹. 中西医结合治疗冠心病的研究进展. 中国保健营养. 2013年1月
关键字:数据挖掘;冠心病;Apriori算法;python
1.问题的提出
冠心病是冠状动脉粥样硬化性心脏病的简称,冠状动脉供应心脏自身血液,冠状动脉发生粥样硬化或者痉挛,使得冠状动脉变得狭窄甚至是鼻塞,导致心肌缺血缺氧的一种心脏病。冠心病由于其发病率高,死亡率高,严重危害着人类的身体健康,从而被称作是“人类的第一杀手”。所以对于冠心病患者的相关性分析成为近几年的热点,如何从已经得到的患者的数据中,找到与冠心病相关的数据,并进一步研究分析,或者与冠心病可能导致成因的数据加以分析,成为人们研究的重点。
据了解目前国内外研究冠心病发病相关因素主要停留在访谈法、A型行为量表测试收集资料法、问卷调查、病历分析等人工统计、分析阶段,鲜有相关资料证明是基于数据挖掘方面的冠心病发病相关因素研究分析的。随着计算机、网络技术的发展,获得有关资料已经变得简单易行。但是对于数量较大、涉及面广的数据,仅仅依靠简单地汇总,按照固定的模式进行分析统计是无法完成这一任务的,甚至是效率低下,得不到相应的结果,所以,一种智能化的,综合应用各种统计方法、数据库等的技术应运而生,这就是目前较为流行的数据挖掘。
数据挖掘又被称为数据库知识发现,是一种交叉学科,包括统计学、机器学习、数据库、模式识别等等,它是利用各种方法从海量的凌乱的有噪声的数据中提取隐含在其中的事先未知的有价值的模式或者规律的复杂过程,其过程包括对于数据库的建立和管理、提取数据、数据预处理、建立模型、模型评估等一系列过程。在海量数据、高维数据的现在,要注重从数据本身的特征出发,发现数据中隐藏的价值。
冠心病的确诊一般最常见的是心电图,再就是64排CT检查,通过检查血管狭窄的情况,来判断是否患病,且一般没有预测。之前的研究是基于检查以及确诊以及治疗的,没有对于体检后是否可以由某些体检数据得到与冠心病相关列的指标,本文将对冠心病与体检数据进行关联分析,本文的数据是由医院记录的多年的体检数据,以及体检后病人在此医院就诊的数据,对得到的数据进行分析,看冠心病与哪些体检指标有关联,希望获得一些对人类有贡献的知识。
2.国内外研究进展
冠心病是一种严重危害人类健康的常见疾病、多发病症,已经成为在不同国家和地区发病和死亡的最常见病症之一。在大多数发展中国家,包括我国在近几十年对于冠心病之死亡率也大幅度上升,预计到2020年,冠心病将成为全球人口死亡和残疾的最主要的元凶[1]。
其研究的内容是基于医学理论的,有脂肪浸润学说,血小板活化、聚集和血栓形成学说、肉皮损伤学说、炎症学说等等,大部分研究的是冠心病的发病机制,以及药物对于冠心病治疗的研究,当然也有对于单项发病因素进行研究的案例,例如血浆载脂蛋白与冠心病的相关性研究[2][3] 。
大部分的研究是在医学领域,对于病理的研究与分析。研究冠心病患者的冠心病危险因素的特点以及临床表现,探讨冠心病病变的相关性。通过对患者各项指标的测量,得到了冠心病的危险因素,包括高敏括高敏C-反应蛋白hs-CRP水平、左心室射血分数等[4]。目前对于揭示冠心病特征的变化规律,揭示冠心病症候特征的变化规律等[5]。
3.本文研究分析
本文将对从医院获得的上万条病人的体检数据以及病人的门诊确诊数据进行研究分析。病人的体检数据中有很多数据,比如有血、血浆、血清、尿等检测项目,进一步对于各项又有小的检测项目,比如光是血清又有两百多项项目,有HIV,ALD、类风湿因子等等,对于如此巨大的数据量,想要获得需要的信息,就需要对数据进行处理。
将导出的数据、各种量表及病人的相关数据整理,建立病人的原始资料数据表。此表中包含医院给出的所有数据,包括冗余数据,无效数据等。进一步需要对得到的数据进行处理。各个表格数据类型不尽相同,且不是对应于每个病人或者体检者有相应的检查数据、诊断数据以及住院数据,但是体检流水号是唯一的,所以对于各个表格进行连接靠着体检流水号的唯一性进行的。经过对数据的清洗,去重等操作,再进一步查找与冠心病有关的体检项目。
最终得到患冠心病的患者大部分都检查了血浆、学液等几项指标,对于得到的指标,并不是每个病人都检查了此项内容,再对其中的每一小项进行研究,得到了血浆中与冠心病有关的七个小项,进一步分析得到此项指标比正常人高出两倍。
4.本文研究方法与步骤
4.1问题的确定
对于从医院获得的数据,建立数据库ceshi,将得到的体检数据、门诊数据以及住院数据分别建立表tj_jy,tj_mz以及tj_zy;由于获取的数据是杂乱的,且有很多重复的数据,所以先对数据进行简单的预处理,去除重复的数据,得到新的表ti_jy_qc, tj_mz_qc以及tj_zy_qc。对于得到的结果进行进一步处理,以便确定所要研究的内容。根据三个表格,先查询得到所有病人所患病症种类,让其按照数量降序排列,以便找到要研究的病症,得到病症后根据数量的多少来查看哪些具有研究价值,并且选择自己感兴趣的部分进行研究;用sql查询患者病症以及患者人数结果如下:
发病率较高的如发烧、咳嗽、高血压等大多为常见病,且对其的研究已经很全面,则选择了冠心病作为研究对象,从获得的数据中冠心病患者大约有两万多人,而且冠心病多发生于中老年。冠心病是冠状动脉性心脏病(coronary artery heart disease, CHD)的簡称,是一种最常见的心脏病,是指因冠状动脉狭窄、供血不足而引起的心肌机能障碍和(或)器质性病变,故又称缺血性心肌病。冠心病是一种由冠状动脉器质性(动脉粥样硬化或动力性血管痉挛)狭窄或阻塞引起的心肌缺血缺氧(心绞痛)或心肌坏死(心肌梗塞)的心脏病,亦称缺血性心脏病。冠心病的发生与冠状动脉粥样硬化狭窄的程度和支数有密切关系,同时患有高血压、糖尿病等疾病,以及过度肥胖、不良生活习惯等是诱发该病的主要因素。冠心病是全球死亡率最高的疾病之一,根据世界卫生组织2011年的报告,中国的冠心病死亡人数已列世界第二位,所以具有研究价值,确定研究对象后进行进一步的研究与分析。 4.2研究对象的确定
根据选定的研究对象,确定所研究的对象的相关科室以及患者在此之前所体检的项目;根据查询确定冠心病确诊的门诊科室,如下所示:
再用查询语句对tj_jy_qc表与tj_mz_qc表进行连接,查看患者之前所检查的项目研究冠心病与哪些体检项目有关联,进而研究有何种关联;根据之前的检查结果,冠心病的确诊是在内科以及心血管内科门诊确诊,所以限定科室为内科或者心血管内科门诊,以便快速的查询,经查询在限定科室内得到患者所进行的体检项目:
注:根据之前查询结果得到冠心病大部分是在心血管内科门诊确诊,所以此处限定科室,以便查询结果,涂黑部分为病人名字,为保证个人隐私,做涂黑处理。
得到两个表之间是有关联的,再对两个表进行连接,查看检查的项目中冠心病患者主要检查了哪些项目,经查询得到大部分患者检查过的项目有血浆,尿液,全血,血等,对于每个病人检查的项目中查询冠心病患者中检查最多的是哪个,以便去订研究对象,对上述查询结果进行保存,可以直接导出到表格xiangguanjiancha.xlsx,建立表xiangguanjiancha储存得到的结果,再对得到的结果进行查询检查最多的体检项目。
建立xiangguanjiancha表,将之前得到的保存结果xiangguanjiancha.xlsx导入xiangguanjiancha表中,查看患者检查的项目中哪项检查数量最多,经查询得到患者大部分检查了血浆,下一步则要对体检值进行研究。
4.3研究对象值的确定
检查体检检验中,血浆检查的二级项目有哪些,再对检查的项目建表,进行研究,
查询体检检验中所检查的各个项目的具体小项目,例如血清中检查了什么,得到查询结果结果如下:
将查询结果导出到EXCEl表中,根据SQL的命名规则,是不允许有中文以及不区分大小写的,所以对于得到的结果进行英文的命名,建立数据字典,将得到的结果建立表格xue_jiang。建立病人表,查询tj_jy表,将所有的病人导入表格patient中,以便在数据库中建立patient表,去掉重复的体检流水号,建立患者表,再将得到的结果保存到一个新表中,作为病人的记录表patient,建立patient,并将结果导入数据库中,进一步查询患有冠心病的患者,将患者数据导入表gxbpatient中,将的到的结果保存在gxbpatient表中便于进一步研究,同时检查患有冠心病的患者血浆中检查了哪些指标;得到195个患者血浆检测的二级项目246个,再对这246个二级项目进行分析,因为并不是每个患者都检查了这些二级项目,所以大部分为空值,对于空值的处理,首先选择非空值超过80%的二级项目进行处理,空值超多80%的则忽略不研究,再对得到二级项目的空值进行分析。此处对于表的操作用python处理,Python是一种面向对象、直译式计算机程序设计语言。也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用。Python语法简捷而清晰,具有丰富和强大的类库。它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。所以次出用python处理。代码见附录python代码1。
处理结果如下所示,得到从医院中获得的病人数据中患者的体检项目血浆的二级项目哪些具有研究意义:
分别是xue_jiang表中的第22/30/47/76/90/170/223/248/249项。将这些二级项目取出,保存在表gxbxjz(冠心病血浆值)中;再建立表gxbxjz以便对得到的冠心病患者血浆值二级目录值进行研究。
经观测,要研究的血浆的二级项目均为连续值,所以空值的填补用平均值。用python分别对gxbtjz与patient表进行处理,得到所要检测的二级项目值之间的关系,为了简易处理,计算二者的平均值进行比较分析。得到结果如下所示。
---病人的平均值:0.647126566 28.99658098 2.04196926 17.54878065 0.520438877 2.38056535 1.110689336 0.029725826 142.3368553
----冠心病患者平均值0.472993197 57.30806608 4.234275996 22.63556851 1.048386783 4.725111759 2.511690962 0.056448008 288.4373178
对比可以得到得到的平均值为普通的两倍多,其九项的内容分别是:甘油三酯(TG),肌酐(CREA),尿素(BUN),丙氨酸氨基转換酶(ALT),高密度脂蛋白C(HDL-c),葡萄糖(GLU),低密度脂蛋白C(LDL-c),尿素氮/肌酐(BUN/CR),尿酸(URIC)。
有研究表明冠心病患者[2]的血浆apoB100/apoA1明显高于普通人群,经相关性分析,载脂血蛋白(高密度脂蛋白C:HDL-c;低密度脂蛋白C:LDL-c)与冠心病密切相关,是冠心病最显著的独立相关危险因素,与以往的研究结果相似。与本文检测内容一致。所以以后病人在体检时,如果这几项指标超过正常值,则需要进一步做检查,查看是否患有冠心病,并且注意调整,以预防冠心病的发生。
4.4数据挖掘在冠心病体检项目中的应用
根据上面的研究与分析,得到冠心病患者体检中血浆项目的体检是较为全面的,下面用数据挖掘算法进行验证分析得到冠心病与血浆中这些检验项是有关联的。根据前面分析得到的表gxbhzxjjy(冠心病患者血浆检验),对它进行预处理,删除不相关列,比如tjliu、卡号、p_name明显不相关的直接删除;因为只有195条记录但是属性值有246条,所以进行预处理可以直接在EXCEL表中进行处理,因为空值较多,且空值表示没有检验此项内容的,为简便表示,做如下替换:NULL赋值为0,阴性、阴性(-)赋值为1,阳性、阳性(-)赋值为2,求每一列的和,值为0表示冠心病患者都没有检验此项,直接删除,以简化处理,对于留下的数据,非空值赋值为其属性值,空值则删除,得到每项记录。 为了找冠心病相关联因素,对数据进行处理,将0值删除,空值补充为平均值,将结果另存为gai.txt.
5.Apriori算法在冠心病研究中的应用
关联规则是数据挖掘的一个重要研究方向,其目的是发现大量数据中项集之间的关联或者相关联系。挖掘关联规则就是在大量实物数据中找出用户感兴趣的关联性,即事务数据库中满足用户给董的条件(最小支持度与最小置信度)的项目集合,我们将这个项目集合成为频繁项目集,简称频繁集。上述挖掘过程通常分为两个步骤:一是扫描事务数据库,从中找出所有满足用户指定最小支持度的频繁项集;而是利用频繁项集生成所需的关联规则,分析醒目之间的关联性。
5.1经典Apriori算法
Apriori算法[6]是挖掘关联规则的经典算法,由Agrawal等人于1994年提出,是一种具有重要影响的挖掘关联规则频繁项集的算法,其核心是基于两阶段频繁项集的递推算法,通过候选项集找到频繁项集。Apriori算法使用一种称作逐层搜索的迭代方法, 项集用于搜索生成 项集,将Apriori相纸用于茶渣频繁项集的时候,只要发现一个候选集的飞空自己不频繁,则可以判断这个候选集不频繁[7]。可以将这个过程分为两个步骤:连接和剪枝。
(1) 连接步:产生候选项集 ;
(2) 剪枝步:扫描数据库,计算候选项集 中每个候选的技术是否满足最小支持度来确定 。然而 可能很大,为了减少对数据库的扫描次数,可以利用Apriori的性质[7]将候选集从 中删除。
通过以上描述,我们看出监管利用Apriori的性质来减少了对数据库的扫描,但是依然存在不足:(1)他可能产生大量候选集;(2)他可能需要重复扫描数据库以计算每个候选集的频繁程度。所以对于Apriori的改进方法在于降低候选集的数量和减少对数据库的扫描次数。
5.2Apriori算法的改进
命题1:如果一个数据项在数据库中是频繁的,则该数据项的自己在数据库汇总也是频繁的。
命题2:如果一个数据项在数据集中是非频繁的,则包含该数据项的父集也是非频繁的。
由5.1的描述可知,如果我們从单一元素所构成的集合下手,根据支持度判别条件对该树进行“剪枝”,将大大降低计算的次数。
得到 后,如果根据组合原理直接生成 然后对每个可能的组合计算支持度,计算量依然很大。这里再次进行剪枝。为了不失一般性,对于 层中的每个集合先排序,然后将满足以下条件的集合融合,构成 层。之所以这样做是因为,根据命题2,如果集合C4层的{acde}是频繁集,那么 层中必定要存在 和 。因此只需在 成对这两个集合融合即可,不必再将 和 融合,在 层对元素排序的目的也正是在此,快速地找到满足条件的子集并融合,避免重复计算。
在得到 层后,计算其中每个集合的支持度,需要从数据库中遍历所有的数据项看是否包含该集合。假设由 生成 这一规则不满足置信度公式,回顾置信度的公式,也就是说 在数据库中出现的次数偏多,而 出现的次数偏少,根据命题1, 的子集也是频繁项,根据命题2, 的父集也很少出现,从而 生成 等规则的置信度更低,然后将其从集合树上减去。
通过上面的分析得到算法优化的步骤如下所示:
1). 遍历数据库,得到所有数据项构成的并集(也就是得到 层)
2). 计算 层中每个元素的支持度(该过程可用Hash表优化),删除不符合的元素,将剩下的元素排序,并加入频繁项集R
3). 根据融合规则将 层的元素融合得到 ,
4). 重复2),3)步直到某一层元素融合后得到的是空集
5). 遍历 中的元素,设该元素为
6). 按照方法 先生成 层规则
7). 计算该层所有规则的置信度,删除不符合的规则,将剩下的规则作为结果输出。
8). 生成下一层的规则,计算置信度,输出结果。
运行结果如下所示,因为设定阈值不同,导致得到的结果不尽相同,但包含着查询中体检项目,综上,冠心病与血浆检验中的ATL,可以得到结论:在日常体检中,如果ATL值、BUNCR值等比正常水平偏高,则需要进行进一步检测以及调整近期饮食与注意锻炼[8]。
参考文献
[1] 史琦.基于数据挖掘的冠心病不稳定性心绞痛中医证候识别规律的研究.博士论文,2012年5月
[2] 雷蕾,陈丽.血浆载脂蛋白与冠心病的相关性研究.当代医学.2011年4月第17卷第12期
[3] 张卫.冠心病患者糖化血红蛋白、脂蛋白a与冠脉病变程度的关系.2014年硕士论文
[4]高阅春,何继强,姜腾勇,陈方.冠心病患者冠状动脉病变严重程度与冠心病危险因素的相关分析.中国循环杂志2012年03期
[5]毛静远,牛子长,张伯礼.近40年冠心病中医证候特征研究文献分析.中医杂志 2011年11期
[6] 赵建松,陈在平. 基于SQL的Apriori改进算法研究. 天津理工大学学报.209年4月
[7] 顾庆峰,宋顺林. Apriori算法在SQL中的改进与应用. 计算机工程与设计. 2007年7月
[8] 闫志虹. 中西医结合治疗冠心病的研究进展. 中国保健营养. 2013年1月