案例来源:《Python数据分析与挖掘实战》第8章

案例背景与挖掘目标

输入数据:

挖掘目标:

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

分析方法与过程(选择的原则)

子任务规划

  1. 问卷形式收集原始数据
  2. 数据预处理
  3. 运用关联规则算法建模
  4. 分析结果,应用到实际业务中

实验
实现Apriori关联规则算法

  1. 读取数据 demo/data/apriori.txt
  2. 离散化操作,将事务集转换为 0, 1 矩阵
  3. 根据支持度找出频繁集,直至找到最大频繁集后停止
  4. 根据置信度得到大于等于置信度的规则,即为Apriori算法所求的关联规则
  5. 对Apriori算法输出的规则,编写过滤函数
  6. (拓展)以上实验使用聚类进行数据离散化,可尝试其他离散化方法,如等距、等频、决策树、基于卡方检验等,比较各个方法的优缺点

代码存档:

实验

import pandas as pd
import os
from __future__ import print_function
from sklearn.cluster import KMeans
import time
dpath = './demo/data/data.xls'
input_data = pd.read_excel(dpath)
input_data.describe()
肝气郁结证型系数 热毒蕴结证型系数 冲任失调证型系数 气血两虚证型系数 脾胃虚弱证型系数 肝肾阴虚证型系数
count 930.000000 930.000000 930.000000 930.000000 930.000000 930.000000
mean 0.232154 0.214438 0.247039 0.217702 0.227043 0.271739
std 0.078292 0.131887 0.087779 0.079210 0.108064 0.099186
min 0.026000 0.000000 0.067000 0.059000 0.003000 0.016000
25% 0.176250 0.127000 0.185000 0.160000 0.140000 0.188250
50% 0.231000 0.186000 0.236500 0.208500 0.200000 0.273000
75% 0.281750 0.274000 0.291000 0.264000 0.318000 0.352000
max 0.504000 0.780000 0.610000 0.552000 0.526000 0.607000
processedfile = './demo/tmp/data_processed2.xls'
typelabel = {u'肝气郁结证型系数':'A', u'热毒蕴结证型系数':'B', u'冲任失调证型系数':'C', u'气血两虚证型系数':'D', u'脾胃虚弱证型系数':'E', u'肝肾阴虚证型系数':'F'}
k = 4keys = list(typelabel.keys())
result = pd.DataFrame()
for i in range(len(keys)):print(u'executing "%s" clustering' % keys[i])kmodel = KMeans(n_clusters=k, n_jobs=4)kmodel.fit(input_data[[keys[i]]].as_matrix())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]]] = pd.rolling_mean(r[typelabel[keys[i]]], 2)r[typelabel[keys[i]]] = r2.rolling(window = 2, center = False).mean()r[typelabel[keys[i]]][1] = 0.0result = result.append(r.T)result = result.sort_index()
result.to_excel(processedfile)
executing "肝气郁结证型系数" clustering
executing "热毒蕴结证型系数" clustering/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/ipykernel_launcher.py:14: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrameSee the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copyexecuting "冲任失调证型系数" clustering
executing "气血两虚证型系数" clustering
executing "脾胃虚弱证型系数" clustering
executing "肝肾阴虚证型系数" clustering
def connect_string(x, ms):x = list(map(lambda i: sorted(i.split(ms)), x))l = len(x[0])r = []for i in range(len(x)):for j in range(i, len(x)):if x[i][:l - 1] == x[j][:l - 1] and x[i][l - 1] != x[j][l - 1]:r.append(x[i][:l - 1] + sorted([x[j][l - 1], x[i][l - 1]]))return r
def find_rule(d, support, confidence, ms=u'--'):result = pd.DataFrame(index=['support', 'confidence'])  # 定义输出结果support_series = 1.0 * d.sum() / len(d)  # 支持度序列column = list(support_series[support_series > support].index)  # 初步根据支持度筛选k = 0while len(column) > 1:k = k + 1print(u'\n正在进行第%s次搜索...' % k)column = connect_string(column, ms)print(u'数目:%s...' % len(column))sf = lambda i: d[i].prod(axis=1, numeric_only=True)  # 新一批支持度的计算函数# 创建连接数据,这一步耗时、耗内存最严重。当数据集较大时,可以考虑并行运算优化。d_2 = pd.DataFrame(list(map(sf, column)), index=[ms.join(i) for i in column]).Tsupport_series_2 = 1.0 * d_2[[ms.join(i) for i in column]].sum() / len(d)  # 计算连接后的支持度column = list(support_series_2[support_series_2 > support].index)  # 新一轮支持度筛选support_series = support_series.append(support_series_2)column2 = []for i in column:  # 遍历可能的推理,如{A,B,C}究竟是A+B-->C还是B+C-->A还是C+A-->B?i = i.split(ms)for j in range(len(i)):column2.append(i[:j] + i[j + 1:] + i[j:j + 1])cofidence_series = pd.Series(index=[ms.join(i) for i in column2])  # 定义置信度序列for i in column2:  # 计算置信度序列cofidence_series[ms.join(i)] = support_series[ms.join(sorted(i))] / support_series[ms.join(i[:len(i) - 1])]for i in cofidence_series[cofidence_series > confidence].index:  # 置信度筛选result[i] = 0.0result[i]['confidence'] = cofidence_series[i]result[i]['support'] = support_series[ms.join(sorted(i.split(ms)))]result = result.T.sort_values(['confidence', 'support'], ascending=False)  # 结果整理,输出print(u'\n结果为:')print(result)return result
inputfile = './demo/data/apriori.txt' #输入事务集文件
data = pd.read_csv(inputfile, header=None, dtype = object)start = time.clock() #计时开始
print(u'\n转换原始数据至0-1矩阵...')
ct = lambda x : pd.Series(1, index = x[pd.notnull(x)]) #转换0-1矩阵的过渡函数
b = map(ct, data.as_matrix()) #用map方式执行
c = list(b)
data = pd.DataFrame(c).fillna(0) #实现矩阵转换,空值用0填充
end = time.clock() #计时结束
print(u'\n转换完毕,用时:%0.2f秒' %(end-start))
del b #删除中间变量b,节省内存support = 0.06 #最小支持度
confidence = 0.75 #最小置信度
ms = '---' #连接符,默认'--',用来区分不同元素,如A--B。需要保证原始表格中不含有该字符start = time.clock() #计时开始
print(u'\n开始搜索关联规则...')
find_rule(data, support, confidence, ms)
end = time.clock() #计时结束
print(u'\n搜索完成,用时:%0.2f秒' %(end-start))
转换原始数据至0-1矩阵...转换完毕,用时:0.33秒开始搜索关联规则...正在进行第1次搜索...
数目:276...正在进行第2次搜索...
数目:947...正在进行第3次搜索...
数目:41...结果为:support  confidence
A3---F4---H4       0.078495    0.879518
C3---F4---H4       0.075269    0.875000
B2---F4---H4       0.062366    0.794521
C2---E3---D2       0.092473    0.754386
D2---F3---H4---A2  0.062366    0.753247搜索完成,用时:2.34秒

转载于:https://www.cnblogs.com/jc53/p/9438624.html

学习笔记:【案例】中医证型关联规则挖掘相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. Solr 中遇到的问题
  2. c++各种数据类型表示范围
  3. pandas创建时间序列仿真数据并过滤(filter)时间数据:头尾数据、某年的数据、某年某月的数据、某年某月某日的数据、某个时间范围内的数据、truncate函数查看特定时间之前护着之后的数据
  4. 【PAT乙级】1003 我要通过! (20 分)详解
  5. cannot open file mfc42u.lib的问题解决
  6. NFS 服务固定端口
  7. Chorme浏览器中安装Axure插件的方法
  8. 虚拟化的软件有哪些?区别是什么?
  9. Ubuntu下安装honeyd
  10. 2021年全国程序员工资出炉想要年薪60万,难吗?网友,扎心了
  11. 使用Python快速获取哥白尼数据开放访问中心购物车里的数据下载链接
  12. 计算机算单元格个数,罕见知识点–Excel 参数这样用,才能算出区域内文本单元格的数量...
  13. ubuntu 中 vi 编辑文件上下左右删除键毫无作用肿么办!(上上下下左右左右BABA)
  14. UOS 加锁文件夹/文件之解锁
  15. 明日之后最新服务器开服时间,明日之后什么时候开服 新服开区详解
  16. 目标跟踪 OP,CLE,DP,AUC的概念和计算
  17. 计算机专业顶岗实训,计算机专业学生的顶岗实习
  18. 明天见丨云和恩墨生态产品发布会双平台直播,三款新品即将揭晓
  19. 某游戏客户流失情况数据分析
  20. Windows XP SP2上安装.net 4

热门文章

  1. RegNet: Designing Network Design Spaces
  2. 如何使用PS的蒙版,调整局部的对比度
  3. 100BASE-T1 /1000BASE-T1 车载以太网转换器产品汇总
  4. 变分推断 python_变分推断(Variational Inference)
  5. Android开发实例-自动生成题库的数独
  6. 微信互动营销有哪些方式?
  7. LinuxC中“库函数”的使用和常用的“输出函数”。
  8. 树存储结构的几种表示方法
  9. 那些年这么火的MyCat你还不知道吗?
  10. java mq编程_MQ java 基础编程