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')
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))
因为是给定的数据,所以可以收敛,但不知道是不是所有的数据都可以收敛。得到结果如下,每次结果都不完全相同:
至于拓展思考的内容,基本就是在第4步选取不同的列即可,此处不再追溯。得到的结果并没有第一条的结果那么具有代表性。可见关联算法的结果也不完全有效。