使用Apriori进行关联分析

源码有问题,贴出修改后可运行代码:
def loadDataSet():
    return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]


def createC1(dataSet):
    C1 = []
    for transaction in dataSet:
        for item in transaction:
            if not [item] in C1:
                C1.append([item])
    C1.sort()
    # map(frozenset, C1]用[frozenset(fset) for fset in C1]代替
代替原来的 if not ssCnt.has_key(can):
return [frozenset(fset) for fset in C1]# D = [set(fset) for fset in dataSet]def scanD(D, Ck, minSupport): ssCnt = {} for tid in D: for can in Ck: if can.issubset(tid): if not can in ssCnt: #修改,代替原来的 if not ssCnt.has_key(can): ssCnt[can] = 1 else: ssCnt[can] += 1 numItems = float(len(D)) retList = [] supportData = {} for key in ssCnt: support = ssCnt[key] / numItems if support >= minSupport: retList.insert(0, key) supportData[key] = support return retList, supportDatadef aprioriGen(Lk, k): retList = [] lenLk = len(Lk) for i in range(lenLk): # 前k-2项相同时, 将两个集合合并 for j in range(i + 1, lenLk): L1 = list(Lk[i])[:k - 2] # k-2减少重复操作 L2 = list(Lk[j])[:k - 2] L1.sort() L2.sort() if L1 == L2: retList.append(Lk[i] | Lk[j]) return retListdef apriori(dataSet, minSupport=0.5): C1 = createC1(dataSet) D = [s for s in dataSet] #修改处,原来是map(set,dataSet),估计是作者重写的函数 L1, supportData = scanD(D, C1, minSupport) L = [L1] k = 2 while (len(L[k - 2])) > 0: Ck = aprioriGen(L[k - 2], k) Lk, supK = scanD(D, Ck, minSupport) supportData.update(supK) L.append(Lk) k += 1 return L, supportData

问题1:

TypeError: object of type 'map' has no len()

原因:

map(set,dataSet),估计是作者重写的函数 
问题2:

AttributeError: 'dict' object has no attribute 'has_key'

原因:

python3

dict没有hash\_key()方法,用

if not can in ssCnt:代替原来的 if not ssCnt.has_key

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值