jupyter写FP-growth算法,fpgrowth未定义

在用jupyter写FP-growth算法时,找不到fpgrowth.

出现NameError: name 'fpgrowth' is not defined

运行结果及报错内容

img

我的全部代码如下:

img

img

img

img

我的解答思路和尝试过的方法

reload(fpgrowth)也试过了不行,直接import fpgrowth也不行,并且我已经pip过并且成功下载了

#我的源代码如下
#构建类,用于保存树的每一个节点
class treeNode:
    def __init__(self, nameValue, numOccur, parentNode):
        self.name = nameValue#节点名称
        self.count = numOccur#节点出现次数
        self.nodeLink = None#链接指向下一个节点
        self.parent = parentNode#父节点
        self.children = {}#子节点
    def inc(self, numOccur):#用来增加节点出现的次数
        self.count += numOccur
    def disp(self, ind = 1):
        print (' '*ind, self.name,' ',self.count)#展现节点名称以及出现的次数
        for child in self.children.values():
            child.disp(ind+1)#打印时,子节点的缩进比父节点更深一级
def updateHeader(nodeToTest, targetNode):
    while nodeToTest.nodeLink != None:
        nodeToTest = nodeToTest.nodeLink
    nodeToTest.nodeLink = targetNode
def updateFPtree(items, inTree, headerTable, count):
    if items[0] in inTree.children:
        # 判断items的第一个结点是否已作为子结点
        inTree.children[items[0]].inc(count)
    else:
        # 创建新的分支
        inTree.children[items[0]] = treeNode(items[0], count, inTree)
        # 更新相应频繁项集的链表,往后添加
        if headerTable[items[0]][1] == None:
            headerTable[items[0]][1] = inTree.children[items[0]]
        else:
            updateHeader(headerTable[items[0]][1], inTree.children[items[0]])
    # 递归
    if len(items) > 1:
         updateFPtree(items[1::], inTree.children[items[0]], headerTable, count)
def createFPtree(dataSet, minSup = 1):
    headerTable = {}
    for trans in dateSet:
        for item in trans:
            headerTable[item] = headerTable.get(item ,0) + dataSet[trans]
    for k in headerTable.keys():
        if headerTable[k] < minSup:
            del(headerTable[k])#删除不满足最小支持度的元素
    freItemSet = set(headerTable.keys())#满足最小支持的频繁项集
    if len(freItemSet) == 0:
        return None, None
    for k in headerTable:
        headerTable[k] = [headerTable[k], None]
    retTree =treeNode('Null set', 1, None)
    for tranSet, count in dataSet.items():
        # dataSet:[element, count]
        localD = {}
        for item in tranSet:
            if item in freqItemSet: # 过滤,只取该样本中满足最小支持度的频繁项
                localD[item] = headerTable[item][0] # element : count
        if len(localD) > 0:
            # 根据全局频数从大到小对单样本排序
            orderedItem = [v[0] for v in sorted(localD.items(), key=lambda p:p[1], reverse=True)]
            # 用过滤且排序后的样本更新树
            updateFPtree(orderedItem, retTree, headerTable, count)
    return retTree, headerTable
# 数据集测试实例
def loadSimpDat():
    simDat = [['r','z','h','j','p'],
              ['z','y','x','w','v','u','t','s'],
              ['z'],
              ['r','x','n','o','s'],
              ['y','r','x','z','q','t','p'],
              ['y','z','x','e','q','s','t','m']]
    return simDat
# 构造成 element : count 的形式
def createInitSet(dataSet):
    retDict={}
    for trans in dataSet:
        retDict[frozenset(trans)] += 1
    return retDict
import importlib
import re
importlib.reload(fpgrowth)
simDat = fpgrowth.loadSimpDat()
initSet = fpgrowth.createInitSet(simDat)
myFPtree, myHeaderTab = fpgrowth.createFPtree(initSet, 3) # 最小支持度3
myFPtree.disp()