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

  1. 数据预处理
    首先从数据集中读取数据。
    第8章 中医证型关联规则挖掘_第1张图片

  2. 1-6列分别进行聚类,然后分别存入新的DataFrame中。得到每一列的质心和聚类的个数。会与书中略有不同。
    第8章 中医证型关联规则挖掘_第2张图片

3.根据上面聚类的质心,替换表中的数据为类别。我采用的是cut方法。代码如下,不知道有没有更方便的:

for r in range(6):
    cr = result.iloc[::2,:].ix[r]
    data_c.ix[:,r] = pd.cut(data_c.ix[:,r],cr,labels=[cr.name+str(i) for i in range(1,4)],right=False).astype('str').replace('nan',cr.name+'4')

得到的结果如下:
第8章 中医证型关联规则挖掘_第3张图片

4.选取出需要求证关联的的证型和结果列。进行Apriori关联。
书中提供的代码在python3中有一处错误,修改如下:

def find_result(data):
    start = time.clock()
    print('\n转换原始数据至0-1矩阵...')
    ct = lambda x: pd.Series(1, index= x[pd.notnull(x)])
    b = list(map(ct, data.as_matrix()))  # 需要转为list
    data = pd.DataFrame(b).fillna(0)
    end = time.clock()
    print('\n转换完毕,用时:{:.2f}秒'.format(end-start))
    del b

    support = 0.06
    confidence = 0.75
    ms = '---'

    start = time.clock()
    print('\n开始搜索关联规则...')
    find_rule(data, support, confidence, ms)
    end = time.clock()
    print('\n搜索完成,用时:{:.2f}秒'.format(end-start))

因为是给定的数据,所以可以收敛,但不知道是不是所有的数据都可以收敛。得到结果如下,每次结果都不完全相同:

第8章 中医证型关联规则挖掘_第4张图片

至于拓展思考的内容,基本就是在第4步选取不同的列即可,此处不再追溯。得到的结果并没有第一条的结果那么具有代表性。可见关联算法的结果也不完全有效。

你可能感兴趣的:(数据分析,python)