Back

中医证型关联规则挖掘错误解决办法

最近在读Python数据分析与挖掘实战发现《中医证型关联规则挖掘》中Apriori关联规则

通过百度发现来自苏剑林《用Pandas实现高效的Apriori算法》一文,书中代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#-*- coding: utf-8 -*-
from __future__ import print_function
import pandas as pd
from apriori import * #导入自行编写的apriori函数
import time #导入时间库用来计算用时

inputfile = '../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) #转换0-1矩阵的过渡函数
b = map(ct, data.as_matrix()) #用map方式执行
data = pd.DataFrame(b).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))

其中data = pd.DataFrame(b).fillna(0)会出现无法迭代的错误出现,查看原文是map后需要list转换成列表模型,才可以迭代,故应该更正为data = pd.DataFrame(list(b)).fillna(0)

特别记录给后来人方便

开始以为本书是抄袭,后来发现博主就是作者之一,造成的负面影响非常抱歉

Licensed under CC BY-NC-SA 4.0