糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > Python 数据挖掘之中医证型关联规则挖掘

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

时间:2024-04-15 23:44:15

相关推荐

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

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

综述部分数据展示数据聚类离散化Apriori关联规则分析结果

综述

对中医证型数据进行挖掘分析,运用的算法有K-MeansMeanShiftapriori。完整代码与数据可在我的GitHub中找到,链接在此。

部分数据展示

数据聚类离散化

# -*- coding: utf-8 -*-import pandas as pdfrom sklearn.cluster import KMeans # 导入K均值聚类算法from sklearn.cluster import MeanShiftdef KMeansTest():result = pd.DataFrame()for i in range(len(keys)):# 调用k-means算法,进行聚类离散化print(u'正在进行“%s”的聚类...' % keys[i])kmodel = KMeans(n_clusters=k, n_jobs=4) # n_jobs是并行数,一般等于CPU数较好kmodel.fit(data[[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']) # 转为DataFrame,记录各个类别的数目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) # rolling_mean()用来计算相邻2列的均值,以此作为边界点。r[typelabel[keys[i]]] = r[typelabel[keys[i]]].rolling(2).mean() # rolling_mean()用来计算相邻2列的均值,以此作为边界点。r[typelabel[keys[i]]][1] = 0.0 # 这两句代码将原来的聚类中心改为边界点。result = result.append(r.T)return resultdef MeanShiftTest():result = pd.DataFrame()for i in range(len(keys)):# 调用MeanShift算法,进行聚类离散化print(u'正在进行“%s”的聚类...' % keys[i])kmodel = MeanShift() # n_jobs是并行数,一般等于CPU数较好kmodel.fit(data[[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']) # 转为DataFrame,记录各个类别的数目r = pd.concat([r1, r2], axis=1).sort_values(typelabel[keys[i]]) # 匹配聚类中心和类别数目r[typelabel[keys[i]]] = r[typelabel[keys[i]]].rolling(2).mean() # rolling_mean()用来计算相邻2列的均值,以此作为边界点。r[typelabel[keys[i]]][1] = 0.0 # 这两句代码将原来的聚类中心改为边界点。result = result.append(r.T)return resultif __name__ == '__main__': # 判断是否主窗口运行,如果是将代码保存为.py后运行,则需要这句,如果直接复制到命令窗口运行,则不需要这句。datafile = 'data.xls' # 待聚类的数据文件processedfile1 = 'KMeansData_processed.xls' # 数据处理后文件processedfile2 = 'MeanShiftData_processed.xls' # 数据处理后文件typelabel = {u'肝气郁结证型系数': 'A', u'热毒蕴结证型系数': 'B', u'冲任失调证型系数': 'C', u'气血两虚证型系数': 'D', u'脾胃虚弱证型系数': 'E', u'肝肾阴虚证型系数': 'F'}k = 4 # 需要进行的聚类类别数# 读取数据并进行聚类分析data = pd.read_excel(datafile) # 读取数据keys = list(typelabel.keys())result1 = KMeansTest()result1 = result1.sort_index() # 以Index排序,即以A,B,C,D,E,F顺序排result1.to_excel(processedfile1)result2 = MeanShiftTest()result2 = result2.sort_index() # 以Index排序,即以A,B,C,D,E,F顺序排result2.to_excel(processedfile2)

Apriori关联规则分析

# -*- coding: utf-8 -*-from __future__ import print_functionimport pandas as pdfrom apriori import * # 导入自行编写的apriori函数import time # 导入时间库用来计算用时inputfile = 'apriori.txt' # 输入事务集文件data = pd.read_csv(inputfile, header=None, dtype=object)start = time.time() # 计时开始print(u'\n转换原始数据至0-1矩阵...')ct = lambda x: pd.Series(1, index=x[pd.notnull(x)]) # 转换0-1矩阵的过渡函数b = map(ct, data.values) # 用map方式执行data = pd.DataFrame(b).fillna(0) # 实现矩阵转换,空值用0填充end = time.time() # 计时结束print(u'\n转换完毕,用时:%0.2f秒' % (end - start))del b # 删除中间变量b,节省内存support = 0.06 # 最小支持度confidence = 0.75 # 最小置信度ms = '---' # 连接符,默认'--',用来区分不同元素,如A--B。需要保证原始表格中不含有该字符start = time.time() # 计时开始print(u'\n开始搜索关联规则...')find_rule(data, support, confidence, ms)end = time.time() # 计时结束print(u'\n搜索完成,用时:%0.2f秒' % (end - start))

结果

如果觉得《Python 数据挖掘之中医证型关联规则挖掘》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。