# -*- coding: utf-8 -*-
"""
Created on Sun Aug 5 17:29:40 2018
@author: wzy
"""
# FP树的类定义
class treeNode:
def __init__(self, nameValue, numOccur, parentNode):
# 节点名称
self.name = nameValue
# 节点出现次数
self.count = numOccur
# 不同项集的相同项通过nodeLink连接在一起
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)
"""
函数说明:构建FP-tree
Parameters:
dataSet - 需要处理的数据集合
minSup - 最少出现的次数(支持度)
Returns:
retTree - 树
headerTable - 头指针表
Modify:
2018-08-06
"""
def createTree(dataSet, minSup=1):
headerTable = {}
# 遍历数据表中的每一行数据
for trans in dataSet:
# 遍历每一行数据中的每一个数据元素
# 统计每一个字母出现的次数,将次数保存在headerTable中
for item in trans:
# 字典get()函数返回指定键的值,如果值不在字典中返回0。
# 由于dataSet里的每个列表均为frozenset所以每一个列表的值均为1即dataSet[trans]=1
headerTable[item] = headerTable.get(item, 0) + dataSet[trans]
# 遍历headerTable中的每一个字母
# 若headerTable中的字母出现的次数小于minSup则把这个字母删除处理
lessThanMinsup = list(filter(lambda k:headerTable[k] < minSup, headerTable.keys()))
for k in lessThanMinsup: del(headerTable[k]