1. 项目背景

恶性肿瘤俗称癌症,当前已成为危害我国居民生命健康的主要杀手。应用中医药治疗恶性肿瘤已成为公认的综合治疗方法之一,且中医药治疗乳腺癌有着广泛的适应证和独特的优势。从整体出发,调整机体气血、阴阳、脏腑功能的平衡,根据不同的临床证候进行辨证论治。确定“先证而治”的方向:即后续证侯尚未出现之前,需要截断恶化病情的哪些后续证侯。发现中医症状间的关联关系和诸多症状间的规律性,并且依据规则分析病因、预测病情发展以及为未来临床诊治提供有效借鉴。这样,在治疗患者的过程中,医生可以有效地减少西医治疗的毒副作用,为后续治疗打下基础。并且还能够帮助乳腺癌患者在手术后恢复体质,改善生存质量,有利于提高患者的生存机率。

2. 挖掘目标

2.1 目标

本实验我们对三阴乳腺癌患者的病理信息进行数据挖掘。需要实现以下目标:

  1. 借助三阴乳腺癌患者的病理信息,挖掘患者的症状与中医证型之间的关联关系。
  2. 对截断治疗提供依据,挖掘潜性证素。

由于患者在围手术期、围化疗期、围放疗期和内分泌治疗期等各个病程阶段,基本都会出现特定的临床症状,故而可以运用中医截断疗法进行治疗,在辨病的基础上围绕各个病程的特殊证候先证而治。截断扭转的主要观点是强调早期治疗,力图快速控制病情,截断病情邪变深入,扭转阻止疾病恶化。

目前,患者的临床病理信息大部分都记录在纸张上,包含了患者的基本信息、具体患病信息等,很少会将患者的患病信息存放于系统中,因此在对数据进行分析时会面临数据缺乏的情况。针对这种状况,我们采用问卷调查的方式收集数据;运用数据挖掘技术对收集的数据进行数据探索与预处理,形成建模数据;采用关联规则算法,挖掘各中医证素与乳腺癌TNM分期之间的关系。探索不同分期阶段的三阴乳腺癌患者的中医证素分布规律,以及采用截断病变发展、先期干预的治疗思路,指导三阴乳腺癌的中医临床治疗。

在本实验中,我们接触了一种新的数据获取方式——问卷调查法。本次数据挖掘建模的总体流程如下:

  1. 以问卷调查的方法收集数据,并将问卷信息整理成原始数据
  2. 对原始数据集进行数据预处理,包括数据清洗、属性规约、数据变换
  3. 利用步骤2形成的建模数据,采用关联规则算法,调整模型输入参数,获取各中医证素 与乳腺癌TNM分期之间的关系。
  4. 结合实际业务,对模型结果进行分析,且将模型结果应用到实际业务中,最后输出关联规则结果。

2.2 数据获取

本实验采用调查问卷的形式对数据进行收集。以本实验为例简单介绍如何使用问卷调查的形式来收集数据。 数据获取的具体过程如下:

  1. 拟定调查问卷表并形成原始指标表。
  2. 定义纳入标准与排除标准。
  3. 将收集回来的问卷表整理成原始数据。

在制定问卷表时,首先根据中华中医药学会制定的相关指南与标注,从乳腺癌6种分型的症状中提取相应证素拟定调查问卷,并制定三阴乳腺癌中医证素诊断量表。从调查问卷中提炼信息形成原始属性表。然后依据标准定义表,将有效的问卷表整理成原始数据。 问卷调查需要满足的两个条件:

  1. 问卷信息采集者均要求有中医诊断学基础,能准确识别病人的舌苔脉象,用通俗的语言解释医学术语,并确保患者信息填写准确。
  2. 问卷调查对象必须是三阴乳腺癌患者。

3. 数据预处理

3.1 数据清洗

由于本实验采用调查问卷的形式收集数据,应对收集到的调查问卷进行有效性筛选,收集者根据从医知识、日常知识等方面来对数据进行筛选。 并将有效问卷整理成原始数据,共930条记录。

3.2 属性规约

为了更有效地对其进行挖掘,将冗余属性与挖掘任务不相关属性剔除。因此选取其中6种证型得分、TNM分期的属性值构成数据集。

3.3 数据变换

数据变换采用属性构造和数据离散化两种方法对数据进行处理。首先通过属性构造,获得证型系数,然后通过聚类算法对数据进行离散化处理,形成建模数据。

3.3.1 属性构造

为了更好地反映出中医证素分布的特征,采用证型系数代替具体单证型的证素得分,证型相关系数计算公式为:证型系数=该证型得分/该证型总分。

3.3.2 数据离散化

由于Apriori关联规则算法无法处理连续型数值变量,为了将原始数据格式转换为适合建模的格式,需要对数据进行离散化。本章采用聚类算法对各个证型系数进行离散化处理,将每个属性聚成4类。

import pandas as pd
from sklearn.cluster import KMeans
data = pd.read_excel('./chapter8/demo/data/data.xls')
k = 4
typelabel ={'肝气郁结证型系数':'A', '热毒蕴结证型系数':'B', '冲任失调证型系数':'C', '气血两虚证型系数':'D', '脾胃虚弱证型系数':'E', '肝肾阴虚证型系数':'F'}
keys = list(typelabel.keys())
result = pd.DataFrame()for i in range(len(keys)):print("正在进行{}的聚类" .format(keys[i]))kmodel = KMeans(n_clusters= k)kmodel.fit(data[[keys[i]]])r1 = pd.DataFrame(kmodel.cluster_centers_, columns = [typelabel[keys[i]]])r2 = pd.Series(kmodel.labels_).value_counts()r2 = pd.DataFrame(r2, columns = [typelabel[keys[i]] + 'n'])r = pd.concat([r1, r2], axis = 1).sort_values(typelabel[keys[i]])r.index = [1, 2, 3, 4]r[typelabel[keys[i]]] = r[typelabel[keys[i]]].rolling(2).mean()r.loc[1, typelabel[keys[i]]] = 0.0result = result.append(r.T)
result = result.sort_index()
result

源代码是r = pd.concat([r1, r2], axis = 1).sort(typelabel[keys[i]]),sort()在pandas0.20版本删除了,改用sort_values()/sort_index()
rolling_mean()也已删除

4. 模型构建

目前,如何设置最小支持度与最小置信度,并没有统一的标准。大部分都是根据业务经验设置初始值,然后经过多次调整,获取与业务相符的关联规则结果。此案例经过多次调整并结合实际业务分析,选取模型的输入参数为:最小支持度6%、最小置信度75%。

import time
from __future__ import print_function
from apriori import *
""" 书中的代码
# %%time
# data = pd.read_csv('./chapter8/demo/data/apriori.txt', header= None, dtype= object)start = time.time()
print('转换原始数据至0-1矩阵...')ct = lambda x : pd.Series(1, index = x) #转换0-1矩阵的过渡函数
b = map(ct, data.values)
data = pd.DataFrame(list(b)).fillna(0)
end = time.time()
print("转换完毕,用时{:.2f}".format(end-start))
del b # 删除中间变量节省内存support = 0.06 # 最小支持度
confidence = 0.75 # 最小置信度
ms = '---' # 连接符start = time.time()
print('\n开始搜索关联规则...')find_rule(data, support, confidence, ms)
end = time.time()print('\n搜索完成,用时{:.2f}'.format(end-start))
"""
# 建模数据,书中是自带的,这里自己建df = data[['肝气郁结证型系数', '热毒蕴结证型系数', '冲任失调证型系数', '气血两虚证型系数', '脾胃虚弱证型系数', '肝肾阴虚证型系数', 'TNM分期']].copy()
df.columns = ['A','B','C','D','E','F', 'TNM分期']df.loc[(df.A > result.iloc[0, 0]) & (df.A < result.iloc[0, 1]), 'Ax'] = 'A1'
df.loc[(df.A > result.iloc[0, 1]) & (df.A < result.iloc[0, 2]), 'Ax'] = 'A2'
df.loc[(df.A > result.iloc[0, 2]) & (df.A < result.iloc[0, 3]), 'Ax'] = 'A3'
df.loc[(df.A > result.iloc[0, 3]), 'Ax']= 'A4'df.loc[(df.B > result.iloc[2, 0]) & (df.B < result.iloc[2, 1]), 'Bx'] = 'B1'
df.loc[(df.B > result.iloc[2, 1]) & (df.B < result.iloc[2, 2]), 'Bx'] = 'B2'
df.loc[(df.B > result.iloc[2, 2]) & (df.B < result.iloc[2, 3]), 'Bx'] = 'B3'
df.loc[(df.B > result.iloc[2, 3]), 'Bx']= 'B4'df.loc[(df.C > result.iloc[4, 0]) & (df.C < result.iloc[4, 1]), 'Cx'] = 'C1'
df.loc[(df.C > result.iloc[4, 1]) & (df.C < result.iloc[4, 2]), 'Cx'] = 'C2'
df.loc[(df.C > result.iloc[4, 2]) & (df.C < result.iloc[4, 3]), 'Cx'] = 'C3'
df.loc[(df.C > result.iloc[4, 3]), 'Cx']= 'C4'df.loc[(df.D > result.iloc[6, 0]) & (df.D < result.iloc[6, 1]), 'Dx'] = 'D1'
df.loc[(df.D > result.iloc[6, 1]) & (df.D < result.iloc[6, 2]), 'Dx'] = 'D2'
df.loc[(df.D > result.iloc[6, 2]) & (df.D < result.iloc[6, 3]), 'Dx'] = 'D3'
df.loc[(df.D > result.iloc[6, 3]), 'Dx']= 'D4'df.loc[(df.E > result.iloc[8, 0]) & (df.E < result.iloc[8, 1]), 'Ex'] = 'E1'
df.loc[(df.E > result.iloc[8, 1]) & (df.E < result.iloc[8, 2]), 'Ex'] = 'E2'
df.loc[(df.E > result.iloc[8, 2]) & (df.E < result.iloc[8, 3]), 'Ex'] = 'E3'
df.loc[(df.E > result.iloc[8, 3]), 'Ex']= 'E4'df.loc[(df.F > result.iloc[10, 0]) & (df.F < result.iloc[10, 1]), 'Fx'] = 'F1'
df.loc[(df.F > result.iloc[10, 1]) & (df.F < result.iloc[10, 2]), 'Fx'] = 'F2'
df.loc[(df.F > result.iloc[10, 2]) & (df.F < result.iloc[10, 3]), 'Fx'] = 'F3'
df.loc[(df.F > result.iloc[10, 3]), 'Fx']= 'F4'
df = df[['Ax', 'Bx', 'Cx', 'Dx', 'Ex', 'Fx', 'TNM分期']]
df.columns = ['A', 'B', 'C', 'D', 'E', 'F', 'TNM分期']ct = lambda x: pd.Series(1, index= x)
b = map(ct, df.values)
df = pd.DataFrame(list(b)).fillna(0)
del bsupport = 0.06 # 最小支持度
confidence = 0.75 # 最小置信度
ms = '---' # 连接符find_rule(df, support, confidence, ms)


因为聚类的原因,结果可能有点差别,但总体来看A3—F4—H4和C3—F4—H4两个关联规则是必有的,H4表示TNM分期为H4期。A3表示肝气郁结证型系数处于(0.258,0.35]范围内的数值,B2表示热毒蕴结证型系数处于(0.15,0.295]范围内的数值,C3表示冲任失调证型系数处于( 0.288,0.423]范围内的数值,F4表示肝肾阴虚证型系数处于 > 0.355 范围内的数值。

拓展思考那里,分析中医证型系数与病程阶段、转移部位和确诊后几年发现转移3个指标的关联分析。
把df中“TNM分期”换成对应要关联的数据即可。

python数据分析与挖掘实战---chapter8中医证型关联规则挖掘相关推荐

  1. 《Python数据分析与挖掘实战》Chapter8中医证型关联规则挖掘笔记

    最近在学习<Python数据分析与挖掘实战>中的案例,写写自己的心得. 代码分为两大部分:1.读取数据并进行聚类分析                                  2. ...

  2. 《Python数据分析与挖掘实战》第8章——中医证型关联规则挖掘(Apriori关联)

    本文是基于<Python数据分析与挖掘实战>的实战部分的第八章的数据--<中医证型关联规则挖掘>做的分析. 旨在补充原文中的细节代码,并给出文中涉及到的内容的完整代码. 主要有 ...

  3. 数据分析与挖掘实战-中医证型关联规则挖掘

    中医证型关联规则挖掘 背景 显然,如今的中医治疗再度火了起来,归根到底的原因还是中医在某些疾病处理上具有天然优势. 而且,中医治疗没有西医治疗的很多毒副作用. "先证而治". 挖掘 ...

  4. python数据与挖掘实战学习:实战篇 第八章中医证型关联规则挖掘笔记

    第八章 中医证型关联规则挖掘 8.1 背景与挖掘目标 中医药治疗恶性肿瘤,从整体出发,调整机体气血.阴阳.脏腑功能的平衡,根据不同的临床证候进行辩证论治.确定"先证而治"的方向:即 ...

  5. Python 数据挖掘之中医证型关联规则挖掘

    Python 数据挖掘之中医证型关联规则挖掘 综述 部分数据展示 数据聚类离散化 Apriori关联规则分析 结果 综述 对中医证型数据进行挖掘分析,运用的算法有 K-Means,MeanShift, ...

  6. 中医证型关联规则挖掘

    背景与挖掘目标 在医学上,癌是指起源于上皮组织的恶性肿瘤,是恶性肿瘤中最常见的一类.相对应的,起源于间叶组织的恶性肿瘤统称为肉瘤.有少数恶性肿瘤不按上述原则命名,如肾母细胞瘤.恶性畸胎瘤等.一般人们所 ...

  7. 第8章 中医证型关联规则挖掘

    8.1 背景与挖掘目标 借助患者的病理信息,挖掘患者的症状与中医证型之间的关联关系 对截断治疗提供依据,挖掘潜性证素 8.2 分析方法与过程 数据收集与整理,问卷调查.将问卷信息整理成原始数据 数据预 ...

  8. (八)Python数据分析与挖掘实战(实战篇)——中医证型关联规则挖掘

    这个专栏用来记录我在学习和实践<Python数据分析与挖掘实战>一书时的一些知识点总结和代码实现. 文章目录 背景和目标 数据 原始属性表 脚本 discretization.py apr ...

  9. 学习笔记:【案例】中医证型关联规则挖掘

    案例来源:<Python数据分析与挖掘实战>第8章 案例背景与挖掘目标 输入数据: 挖掘目标: 借助三阴乳腺癌患者的病理信息,挖掘患者的症状与中医证型之间的关联关系 对截断治疗提供依据,挖 ...

  10. Chapter 8 中医证型关联规则挖掘

    目录 一.背景和目标 二.方法步骤 三.过程 3.1 数据获取 3.2 数据预处理 3.3 模型构建 四.模型应用 一.背景和目标 借助患者的病理信息,挖掘患者的症状于中医证型之间的关联关系. 对截断 ...

最新文章

  1. 亿级PV请求的三种负载均衡技术
  2. 006_Redis的List数据类型
  3. 《《python基础》》
  4. 天眼查sign 算法破解
  5. pandas: DataFrame在数据处理时一些常用的操作汇总
  6. 重载与重写(overload and override)
  7. windows c++ 内存映射大文件问题记录
  8. C语言究竟是一门怎样的语言?
  9. 详解Intellij IDEA中.properties文件中文显示乱码问题的解决
  10. hdfs 指令_Hadoop Shell命令
  11. 微软公有云魅力之Traffic Manager
  12. svn 中的url路径修改和 清除 svn用户名和密码
  13. windows制作docker镜像_Windows镜像制作
  14. 超级外链工具_慈溪SEO优化_豆瓣外链:豆瓣小组做外链的注意事项?
  15. js date 加一天_需要知道的JS的日期的知识,都在这了
  16. 风暴孵化分享:新手小白想做手游代理可不可以?
  17. 国外广告联盟前期需要准备的事情
  18. 不想周末被工作提醒打扰?你需要这个手机便签消息免打扰设置
  19. unity编辑器一些设置
  20. 听说你觉得自己上了大学就长大懂事了...

热门文章

  1. f1c100s uboot调试记录
  2. 计算机怎么把文字转换成表格,如何将EXCEL的图片转换成excel表格或者文字?,Word将文字转化成表格...
  3. 轻巧实用的web ssh工具使用笔记——WGCLOUD
  4. 2022年最新《小鹿线web前端课程+项目实践课程》
  5. 局域网SDN技术硬核内幕 一 分布式任意播网关
  6. 电子合同助力企业实现全程无纸化闭环
  7. dht磁力链php,基于 DHT 网络的磁力链接和BT种子的搜索引擎架构
  8. 转《营销活动及网络红包个税征免与税收策划》
  9. 计算机离港系统分为模块,计算机离港系统包括( )模块。
  10. 朗文当代高级词典LONGMAN.Dictionary