这个专栏用来记录我在学习和实践《Python数据分析与挖掘实战》一书时的一些知识点总结和代码实现。
背景和目标
借助
三阴乳腺癌患者
的病理信息,挖掘患者的症状与中医证型之间的关联关系
对截断治疗提供依据,挖掘潜性证素
数据
原始属性表
属性名称 | 属性描述 |
---|---|
实际年龄 | |
发病年龄 | |
初潮年龄 | |
既往月经是否规律 | |
是否痛经 | |
是否绝经 | |
… | |
肝气郁结症得分 | |
热毒蕴结证得分 | |
冲任失调症得分 | |
气血两虚证得分 | |
脾胃虚弱证得分 | |
肝肾阴虚证得分 | |
TNM分期 | |
确诊后几年发现转移 | |
转移部位 | |
病程阶段 |
脚本
discretization.py
#-*- coding: utf-8 -*-
'''
聚类离散化,最后的result的格式为:
1 2 3 4
A 0 0.178698 0.257724 0.351843
An 240 356.000000 281.000000 53.000000
即(0, 0.178698]有240个,(0.178698, 0.257724]有356个,依此类推。
'''
from __future__ import print_function
import pandas as pd
from sklearn.cluster import KMeans # 导入K均值聚类算法
datafile = '../data/data.xls' # 待聚类的数据文件
processedfile = '../tmp/data_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())
result = pd.DataFrame()
if __name__ == '__main__': # 判断是否主窗口运行,如果是将代码保存为.py后运行,则需要这句,如果直接复制到命令窗口运行,则不需要这句。
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]]].as_matrix()) # 训练模型
r1 = pd.DataFrame(kmodel.cluster_centers_, columns=[
typelabel[keys[i]]]) # 聚类中心
r2 = pd.Series(kmodel.labels_).value_counts(