中医证型关联规则挖掘

  • 建模流程
    • 导入常用包
    • 可视化统计分析
    • 数据离散化处理
    • 生成结果数据表
    • 分类变量可视化
    • 导出算法所需格式
    • 导入apriori算法
    • 结果展示
    • 结果说明

建模流程

导入常用包

from plotly.subplots import make_subplots
import numpy as np
import pandas as pd
import os
import matplotlib.pyplot as plt
from PIL import Image
%matplotlib inline
import seaborn as sns
import itertools
import warnings
warnings.filterwarnings("ignore")
import io
import plotly.offline as py
py.init_notebook_mode(connected=True)
import plotly.graph_objs as go
import plotly.tools as tls
import plotly.figure_factory as ff
import plotly.express as px

可视化统计分析

data  = pd.read_excel('./data/data.xls',usecols=[0,1,2,3,4,5,7])
data_d = data.describe().reset_index()
data_n = data.nunique().reset_index().T
fig = make_subplots(rows=3, cols=1,specs=[[{"type": "table"}],[{"type": "table"}],[{"type": "table"}]]
)fig.add_trace(go.Table(header=dict(values=['','肝气郁结证型系数', '热毒蕴结证型系数', '冲任失调证型系数', '气血两虚证型系数', '脾胃虚弱证型系数', '肝肾阴虚证型系数'],font=dict(size=10),align="left"),cells=dict(values=[data_d[k].tolist() for k in data_d.columns],align = "left")),row=2, col=1
)fig.add_trace(go.Table(header=dict(values=['肝气郁结证型系数', '热毒蕴结证型系数', '冲任失调证型系数', '气血两虚证型系数', '脾胃虚弱证型系数', '肝肾阴虚证型系数'],font=dict(size=10),align="left"),cells=dict(values=[data[k].tolist() for k in data.columns[1:]],align = "left"),name= '1'),row=1, col=1
)fig.add_trace(go.Table(header=dict(values=[data_n[k].tolist()[:1] for k in data_n.columns],font=dict(size=10),align="left"),cells=dict(values=[data_n[k].tolist()[1:] for k in data_n.columns],align = "left")),row=3, col=1
)fig.update_layout(height=1000,showlegend=False,title_text="中医证型关联挖掘: 1-图表 2-描述统计 3-去重值")fig.show()

data.info()
data_x = data[['肝气郁结证型系数', '热毒蕴结证型系数', '冲任失调证型系数', '气血两虚证型系数', '脾胃虚弱证型系数', '肝肾阴虚证型系数']]

sns.pairplot(data)

def plot_violin(i):print(i)fig = px.violin(data, y=i, x='TNM分期', color='TNM分期',box=True, points="all", hover_data=data_x.columns)fig.show()for i in data_x.columns:plot_violin(i)






color_m = data['TNM分期'].map({"H1":1,"H2":2,"H3":3,"H4":4})fig = px.parallel_coordinates(data, color=color_m, labels={"肝气郁结证型系数": "'肝气郁结证型系数","热毒蕴结证型系数": "热毒蕴结证型系数", "冲任失调证型系数": "冲任失调证型系数","气血两虚证型系数":"气血两虚证型系数","脾胃虚弱证型系数": "脾胃虚弱证型系数", "肝肾阴虚证型系数": "肝肾阴虚证型系数", },color_continuous_scale=px.colors.diverging.Tealrose, color_continuous_midpoint=2)
fig.show()

fig = px.box(data_x, y=data_x.columns,color=data['TNM分期'])
fig.show()

数据离散化处理

#数据离散化处理
from __future__ import print_function
from sklearn.cluster import KMeans #使用K-means算法processdfile = './data/data_processed.xls'
typelabel = {'肝气郁结证型系数':'A','热毒蕴结证型系数':'B','冲任失调证型系数':'C','气血两虚证型系数':'D','脾胃虚弱证型系数':'E','肝肾阴虚证型系数':'F',
}k = 4 #需要聚类的类别数data2 = pd.read_excel('./data/data.xls')
keys = list(typelabel.keys())
result = pd.DataFrame()if __name__ == '__main__':for i in range(len(keys)):print('正在进行"%s"的聚类。。。'%keys[i])kmodel = KMeans(n_clusters=k,n_jobs=4)kmodel.fit(data2[[keys[i]]].values)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[typelabel[keys[i]]][1] = 0.0result =result.append(r.T)result = result.sort_index()result.to_excel(processdfile)

data3 = pd.read_excel('./data/data_processed.xls',index_col=0)
data3
#以A列为例,0-0.178有240个样本,用A1表示,0.17-0.25有356个样本用A2表示,以此类推

data

# 用每个数值去匹配所在范围,根据data3的数据来分类,最后替换原数据
def replace_num(cols,num,data3):typelabel = {'肝气郁结证型系数':'A','热毒蕴结证型系数':'B','冲任失调证型系数':'C','气血两虚证型系数':'D','脾胃虚弱证型系数':'E','肝肾阴虚证型系数':'F',
}x = typelabel[cols]bins = list(data3.loc[x])if bins[0]<num<bins[1]:return '%s1'%xelif bins[1]<num<bins[2]:return '%s2'%xelif bins[2]<num<bins[3]:return '%s3'%xelse:return '%s4'%x
for i in data.columns:if i == 'TNM分期':breakfor j in range(len(data)):data[i][j] = replace_num(i,data[i][j],data3)

生成结果数据表

data

分类变量可视化

fig = px.parallel_categories(data.iloc[:,:], color = color_m,color_continuous_scale=px.colors.sequential.Inferno)
fig.show()

导出算法所需格式

data.to_csv('a3.txt',index=False,header=False)

导入apriori算法

from apriori import *
import time
inputfile = 'a3.txt'
data = pd.read_csv(inputfile,header=None,dtype=object)
start = time.time()
print('转化数据矩阵...'+'\n')
ct = lambda x : pd.Series(1, index= x[pd.notnull(x)])
b = map(ct,data.values)
data = pd.DataFrame(b).fillna(0)
end = time.time()
print('转换完毕用时%0.2f秒'%(end - start))
del bsupport = 0.06 #支持度阈值,根据业务需要自行设置,数值越小,结果越多
confidence = 0.75 #置信度阈值,根据业务需要自行设置,数值越小,结果越多ms = '---'
start = time.time()
print('开始搜索关联规则。。。')
result = find_rule(data,support,confidence,ms)
end = time.time()
print('搜索完成,共计用时%0.2f秒'%(end - start))

结果展示

 我们要剔除结果中以非”TNM分期“为结果的数据

结果说明

 A3、F4=>H4的支持度最大,达到7.9%,置信度也最大,达到88%。说明肝气郁结证型系数在(0.25,0.35),肝肾阴虚证型系数在(0.35,0.6)范围内TNM分期诊断为H4的可能性为87.96%,而这种情况占所有情况的7.9%

中医证型关联规则----apriori算法挖掘及plotly数据可视化相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 关于mysql服务器3306端口不能远程连接的解决
  2. tcp/ip协议包含哪几层_TCP/IP协议的简单介绍
  3. php显示服务器拒绝连接失败,php – SMTP ERROR:无法连接到服务器:连接被Office365拒绝(111)...
  4. android studio 如何导入工程文件,Android studio如何导入已有的eclipse工程
  5. 使用Jquery 结合后台数据库显示类似QQ图片中心
  6. 美团点评APP在移动网络性能优化的实践,通用流行框架大全
  7. python数据结构与算法
  8. MVP模式在Android项目中的使用
  9. createbitmap 旋转90度_解决某些机型调用系统相机照片旋转的问题
  10. guestfish修改镜像内容
  11. 如何利用快解析搭建汽车经销商管理系统
  12. 冲压工艺中常见的问题,值得收藏
  13. vue实现非同源图片的下载功能--跨域问题(解决浏览器打开图片,而不是下载)
  14. 你手机里有哪些堪称神器的 App?
  15. android listview 的下拉刷新
  16. 工控机安装服务器系统,工控机驱动安装步骤及流程说明
  17. IT30: IT项目之20年软技能
  18. Android手机QQ的UI自动化实践,为什么spring能最好地改变Android
  19. FFmpeg任意文件读取漏洞分析
  20. html 页面右侧浮窗 CSS,CSS实现广告右侧悬浮效果

热门文章

  1. 中英文停止词表(stopword)
  2. StyleGAN2发展介绍 花卉图像生成 模型修改
  3. 2018年度亚太区最佳机场贵宾室公布
  4. 章节十六:编码和文件读写
  5. 计算机网络(十九)其他IP相关技术
  6. 沉睡者 - 网赚创业VIP项目课程-持续更新中...
  7. 牛客多校4J二分答案连续子段最大平均值
  8. LeetCode力扣刷题——巧解数学问题
  9. 计算机名无法修改怎么办,win7系统计算机名字无法更改的解决方法
  10. FTP上传文件报错200 PORT command successful. Consider using PASV. 553 Could not create file.