好了,本章的最后一个例子很酷,而你有可能正在想:“伙计,这个算法应该很快,因为只有1400条推文!”你的想法是正确的。下面在更大的文件上看下运行效果。在源数据集合中,有一个kosarak.dat文件,它包含将近100万条记录1。该文件中的每一行包含某个用户浏览过的新闻报道。一些用户只看过一篇报道,而有些用户看过2498篇报道。用户和报道被编码成整数,所以查看频繁项集很难得到更多的东西,但是该数据对于展示FP-growth算法的速度十分有效。
1. Hungarian online news portal clickstream retrieved July 11, 2011; from Frequent Itemset Mining Dataset Repository, http://fimi.ua.ac.be/data/, donated by Ferenc Bodon.
首先,将数据集导入到列表:
>>> parsedDat = [line.split for line in open('kosarak.dat').readlines]
接下来需要对初始集合格式化:
>>> initSet = fpGrowth.createInitSet(parsedDat)
然后构建FP树,并从中寻找那些至少被10万人浏览过的新闻报道。
>>> myFPtree, myHeaderTab = fpGrowth.createTree(initSet, 100000)
在我这台简陋的笔记本电脑上,构建树以及扫描100万行只需要几秒钟,这展示了FP-growth算法的强大威力。下面需要创建一个空列表来保存这些频繁项集:
>>> myFreqList = >>> fpGrowth.mineTree(myFPtree, myHeaderTab, 100000, set(), myFreqList)
接下来看下有多少新闻报道或报道集合曾经被10万或者更多的人浏览过:
>>> len(myFreqList)9
总共有9个。下面看看都是哪些:
>>> myFreqList[set(['1']), set(['1', '6']), set(['3']), set(['11', '3']), set(['11', '3','6']), set(['3', '6']), set(['11']), set(['11', '6']), set(['6'])]
可以使用其他设置来查看运行结果,比如降低置信度级别。