中医证型关联规则----apriori算法挖掘及plotly数据可视化
中医证型关联规则挖掘
- 建模流程
- 导入常用包
- 可视化统计分析
- 数据离散化处理
- 生成结果数据表
- 分类变量可视化
- 导出算法所需格式
- 导入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数据可视化相关推荐
- 《Python数据分析与挖掘实战》第8章——中医证型关联规则挖掘(Apriori关联)
本文是基于<Python数据分析与挖掘实战>的实战部分的第八章的数据--<中医证型关联规则挖掘>做的分析. 旨在补充原文中的细节代码,并给出文中涉及到的内容的完整代码. 主要有 ...
- 数据分析与挖掘实战-中医证型关联规则挖掘
中医证型关联规则挖掘 背景 显然,如今的中医治疗再度火了起来,归根到底的原因还是中医在某些疾病处理上具有天然优势. 而且,中医治疗没有西医治疗的很多毒副作用. "先证而治". 挖掘 ...
- 中医证型关联规则挖掘
背景与挖掘目标 在医学上,癌是指起源于上皮组织的恶性肿瘤,是恶性肿瘤中最常见的一类.相对应的,起源于间叶组织的恶性肿瘤统称为肉瘤.有少数恶性肿瘤不按上述原则命名,如肾母细胞瘤.恶性畸胎瘤等.一般人们所 ...
- 第8章 中医证型关联规则挖掘
8.1 背景与挖掘目标 借助患者的病理信息,挖掘患者的症状与中医证型之间的关联关系 对截断治疗提供依据,挖掘潜性证素 8.2 分析方法与过程 数据收集与整理,问卷调查.将问卷信息整理成原始数据 数据预 ...
- python数据与挖掘实战学习:实战篇 第八章中医证型关联规则挖掘笔记
第八章 中医证型关联规则挖掘 8.1 背景与挖掘目标 中医药治疗恶性肿瘤,从整体出发,调整机体气血.阴阳.脏腑功能的平衡,根据不同的临床证候进行辩证论治.确定"先证而治"的方向:即 ...
- Python 数据挖掘之中医证型关联规则挖掘
Python 数据挖掘之中医证型关联规则挖掘 综述 部分数据展示 数据聚类离散化 Apriori关联规则分析 结果 综述 对中医证型数据进行挖掘分析,运用的算法有 K-Means,MeanShift, ...
- Chapter 8 中医证型关联规则挖掘
目录 一.背景和目标 二.方法步骤 三.过程 3.1 数据获取 3.2 数据预处理 3.3 模型构建 四.模型应用 一.背景和目标 借助患者的病理信息,挖掘患者的症状于中医证型之间的关联关系. 对截断 ...
- 学习笔记:【案例】中医证型关联规则挖掘
案例来源:<Python数据分析与挖掘实战>第8章 案例背景与挖掘目标 输入数据: 挖掘目标: 借助三阴乳腺癌患者的病理信息,挖掘患者的症状与中医证型之间的关联关系 对截断治疗提供依据,挖 ...
- (八)Python数据分析与挖掘实战(实战篇)——中医证型关联规则挖掘
这个专栏用来记录我在学习和实践<Python数据分析与挖掘实战>一书时的一些知识点总结和代码实现. 文章目录 背景和目标 数据 原始属性表 脚本 discretization.py apr ...
最新文章
- 关于mysql服务器3306端口不能远程连接的解决
- tcp/ip协议包含哪几层_TCP/IP协议的简单介绍
- php显示服务器拒绝连接失败,php – SMTP ERROR:无法连接到服务器:连接被Office365拒绝(111)...
- android studio 如何导入工程文件,Android studio如何导入已有的eclipse工程
- 使用Jquery 结合后台数据库显示类似QQ图片中心
- 美团点评APP在移动网络性能优化的实践,通用流行框架大全
- python数据结构与算法
- MVP模式在Android项目中的使用
- createbitmap 旋转90度_解决某些机型调用系统相机照片旋转的问题
- guestfish修改镜像内容
- 如何利用快解析搭建汽车经销商管理系统
- 冲压工艺中常见的问题,值得收藏
- vue实现非同源图片的下载功能--跨域问题(解决浏览器打开图片,而不是下载)
- 你手机里有哪些堪称神器的 App?
- android listview 的下拉刷新
- 工控机安装服务器系统,工控机驱动安装步骤及流程说明
- IT30: IT项目之20年软技能
- Android手机QQ的UI自动化实践,为什么spring能最好地改变Android
- FFmpeg任意文件读取漏洞分析
- html 页面右侧浮窗 CSS,CSS实现广告右侧悬浮效果
热门文章
- 中英文停止词表(stopword)
- StyleGAN2发展介绍 花卉图像生成 模型修改
- 2018年度亚太区最佳机场贵宾室公布
- 章节十六:编码和文件读写
- 计算机网络(十九)其他IP相关技术
- 沉睡者 - 网赚创业VIP项目课程-持续更新中...
- 牛客多校4J二分答案连续子段最大平均值
- LeetCode力扣刷题——巧解数学问题
- 计算机名无法修改怎么办,win7系统计算机名字无法更改的解决方法
- FTP上传文件报错200 PORT command successful. Consider using PASV. 553 Could not create file.