{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from fpgrowth_py import fpgrowth\n", "itemSetList = [['eggs', 'bacon', 'soup'],\n", " ['eggs', 'bacon', 'apple'],\n", " ['soup', 'bacon', 'banana']]\n", "freqItemSet, rules = fpgrowth(itemSetList, minSupRatio=0.5, minConf=0.5)\n", "print(freqItemSet)\n", "print(rules)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tes\n" ] } ], "source": [ "print(\"tes\")" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "1\n", "1\n", "1\n", "1\n", "1\n", "2\n", "2\n", "2\n", "2\n", "2\n", "2\n", "2\n", "2\n", "2\n", "2\n", "2\n", "3\n", "3\n", "3\n", "3\n", "3\n", "3\n", "3\n", "4\n", "4\n", "------ITEMSET--------------\n", "{frozenset({'apple'}), frozenset({'chicken'}), frozenset({'beer'}), frozenset({'milk'}), frozenset({'mango'}), frozenset({'rice'})}\n", "---------------TRANSACTION LIST----------------\n", "[frozenset({'rice', 'beer', 'apple', 'chicken'}), frozenset({'rice', 'beer', 'apple'}), frozenset({'beer', 'apple'}), frozenset({'apple', 'mango'}), frozenset({'rice', 'beer', 'chicken', 'milk'}), frozenset({'rice', 'beer', 'milk'}), frozenset({'milk', 'beer'}), frozenset({'milk', 'mango'})]\n", "MINIMUM SUPPORT 0.20833333333333334\n", "\n", "------------------------ FREQUENT ITEMSET:\n", "item: ('chicken',) , 0.250\n", "item: ('apple', 'mango') , 0.250\n", "item: ('beer', 'apple', 'chicken') , 0.250\n", "item: ('milk', 'chicken') , 0.312\n", "item: ('milk', 'beer', 'chicken') , 0.333\n", "item: ('milk', 'mango') , 0.375\n", "item: ('beer', 'rice', 'apple', 'chicken') , 0.438\n", "item: ('rice', 'apple', 'chicken') , 0.458\n", "item: ('mango',) , 0.500\n", "item: ('beer', 'chicken') , 0.500\n", "item: ('milk', 'beer', 'rice', 'chicken') , 0.500\n", "item: ('milk', 'rice', 'chicken') , 0.542\n", "item: ('beer', 'apple') , 0.938\n", "item: ('apple',) , 1.000\n", "item: ('rice', 'beer', 'chicken') , 1.000\n", "item: ('rice', 'apple', 'beer') , 1.083\n", "item: ('rice', 'chicken') , 1.125\n", "item: ('rice', 'apple') , 1.250\n", "item: ('rice', 'beer', 'milk') , 1.250\n", "item: ('milk', 'beer') , 1.312\n", "item: ('milk', 'rice') , 1.500\n", "item: ('milk',) , 2.000\n", "item: ('beer',) , 2.250\n", "item: ('rice', 'beer') , 2.750\n", "item: ('rice',) , 4.000\n", "25\n", "\n", "------------------------ RULES:\n", "Rule: ('chicken',) ==> ('rice',) , 4.500\n", "Rule: ('chicken',) ==> ('rice', 'beer') , 4.000\n", "Rule: ('apple', 'chicken') ==> ('rice',) , 2.444\n", "Rule: ('apple', 'chicken') ==> ('rice', 'beer') , 2.333\n", "Rule: ('chicken',) ==> ('milk', 'rice') , 2.167\n", "Rule: ('chicken',) ==> ('beer',) , 2.000\n", "Rule: ('beer', 'chicken') ==> ('rice',) , 2.000\n", "Rule: ('chicken',) ==> ('milk', 'beer', 'rice') , 2.000\n", "Rule: ('chicken',) ==> ('rice', 'apple') , 1.833\n", "Rule: ('chicken',) ==> ('rice', 'beer', 'apple') , 1.750\n", "Rule: ('beer', 'apple', 'chicken') ==> ('rice',) , 1.750\n", "Rule: ('milk', 'chicken') ==> ('rice',) , 1.733\n", "Rule: ('milk', 'chicken') ==> ('rice', 'beer') , 1.600\n", "Rule: ('milk', 'beer', 'chicken') ==> ('rice',) , 1.500\n", "Rule: ('chicken',) ==> ('milk', 'beer') , 1.333\n", "Rule: ('apple', 'chicken') ==> ('beer',) , 1.333\n", "Rule: ('apple',) ==> ('rice',) , 1.250\n", "Rule: ('chicken',) ==> ('milk',) , 1.250\n", "Rule: ('beer',) ==> ('rice',) , 1.222\n", "Rule: ('apple', 'beer') ==> ('rice',) , 1.156\n", "Rule: ('apple',) ==> ('rice', 'beer') , 1.083\n", "Rule: ('milk', 'chicken') ==> ('beer',) , 1.067\n", "Rule: ('chicken',) ==> ('beer', 'apple') , 1.000\n", "Rule: ('beer', 'chicken') ==> ('milk', 'rice') , 1.000\n", "Rule: ('rice', 'apple', 'chicken') ==> ('beer',) , 0.955\n", "Rule: ('milk', 'beer') ==> ('rice',) , 0.952\n", "Rule: ('apple',) ==> ('beer',) , 0.938\n", "Rule: ('milk', 'rice', 'chicken') ==> ('beer',) , 0.923\n", "Rule: ('rice', 'chicken') ==> ('beer',) , 0.889\n", "Rule: ('beer', 'chicken') ==> ('rice', 'apple') , 0.875\n", "Rule: ('rice', 'apple') ==> ('beer',) , 0.867\n", "Rule: ('rice', 'milk') ==> ('beer',) , 0.833\n", "Rule: ('mango',) ==> ('milk',) , 0.750\n", "Rule: ('milk',) ==> ('rice',) , 0.750\n", "Rule: ('rice',) ==> ('beer',) , 0.688\n", "Rule: ('beer', 'chicken') ==> ('milk',) , 0.667\n", "Rule: ('milk',) ==> ('beer',) , 0.656\n", "Rule: ('milk',) ==> ('rice', 'beer') , 0.625\n", "Rule: ('beer',) ==> ('milk',) , 0.583\n", "Rule: ('beer',) ==> ('rice', 'milk') , 0.556\n", "Rule: ('mango',) ==> ('apple',) , 0.500\n", "Rule: ('beer', 'chicken') ==> ('apple',) , 0.500\n", "Rule: ('rice', 'beer', 'chicken') ==> ('milk',) , 0.500\n", "43\n" ] } ], "source": [ "\n", "import sys\n", "\n", "from itertools import chain, combinations\n", "from collections import defaultdict\n", "from optparse import OptionParser\n", "\n", "# from apriori import (\n", "# getItemSetTransactionList,\n", "# dataFromFile,\n", "# joinSet,\n", "# printResults,\n", "# returnItemsWithMinSupport,\n", "# runApriori,\n", "# subsets,\n", "# )\n", "\n", "\n", "itemresult = set()\n", "freqSet = defaultdict(int)\n", "freqSet2 = defaultdict(int)\n", "utilSet = defaultdict(int)\n", "utilSet2 = defaultdict(int)\n", "\n", "freqitemset=[]\n", "freqitemset2=[]\n", "largeSet = dict()\n", "minConfidence=0.5\n", "\n", "itemSet = set([\n", " frozenset(['apple']),\n", " frozenset(['beer']),\n", " frozenset(['chicken']),\n", " frozenset(['mango']),\n", " frozenset(['milk']),\n", " frozenset(['rice'])\n", " ])\n", "\n", "utilSet[frozenset({'apple'})]=2\n", "utilSet[frozenset({'beer'})]=3\n", "utilSet[frozenset({'chicken'})]=1\n", "utilSet[frozenset({'mango'})]=2\n", "utilSet[frozenset({'milk'})]=4\n", "utilSet[frozenset({'rice'})]=8\n", "\n", "transactionList = [\n", " frozenset(['beer', 'rice', 'apple', 'chicken']),\n", " frozenset(['beer', 'rice', 'apple']),\n", " frozenset(['beer', 'apple']),\n", " frozenset(['mango', 'apple']),\n", " frozenset(['beer', 'rice', 'milk', 'chicken']),\n", " frozenset(['beer', 'rice', 'milk']),\n", " frozenset(['beer', 'milk']),\n", " frozenset(['mango', 'milk'])\n", "]\n", "\n", "def getminsup(itemSet,transactionList):\n", " for item in itemSet:\n", "# print(item)\n", " for transaction in transactionList:\n", " if item.issubset(transaction):\n", " freqSet[item] += 1\n", "# print(freqSet)\n", " \n", " sum=0 \n", " for item, count in freqSet.items():\n", " support = float(count) / float(len(transactionList))\n", "# print(support)\n", "# print(utilSet)\n", " ut=utilSet[item]\n", " utility1=support*ut\n", " sum=sum+utility1\n", " utilSet2[item]=utility1\n", "# print(utilSet2)\n", " aveutil=sum/len(itemSet)\n", "# print(aveutil)\n", " minsup=aveutil/len(transactionList)\n", "# print(minsup)\n", "\n", " return minsup\n", "\n", "\n", "def getfreqitem2(itemSet,transactionList,minimumSupport,freqSet,k):\n", " _itemSet=set()\n", " localSet = defaultdict(int)\n", " for item in itemSet:\n", "# print(\"item\")\n", "# print(item)\n", " for transaction in transactionList:\n", " if item.issubset(transaction):\n", " freqSet[item] += 1\n", " localSet[item] += 1\n", "# print(localSet)\n", " \n", " sum=0 \n", " for item, count in localSet.items():\n", " support = float(count) / float(len(transactionList))\n", " ut=0\n", " for item1,util in utilSet.items():\n", " if(item1.issubset(item)):\n", " ut=ut+float(util)\n", " averageutil=ut/k\n", "# print(averageutil)\n", " utility1=support*averageutil\n", "# print(utility1)\n", " utilSet2[item]=utility1\n", "# print(\"utilset\",utilSet2)\n", "# print(\"localset\",localSet)\n", " \n", " for item in itemSet:\n", "# print(item)\n", "# print(utilSet2[item])\n", " if(utilSet2[item])>=minimumSupport:\n", " _itemSet.add(item)\n", " return _itemSet\n", "\n", "\n", "def subsets(arr):\n", " \"\"\" Returns non empty subsets of arr\"\"\"\n", " return chain(*[combinations(arr, i + 1) for i, a in enumerate(arr)])\n", "\n", "def joinSet(itemSet, length):\n", " \"\"\"Join a set with itself and returns the n-element itemsets\"\"\"\n", " itemSet=frozenset(itemSet)\n", " return set(\n", " [i.union(j) for i in itemSet for j in itemSet if len(i.union(j)) == length]\n", " )\n", "\n", "def getSupport(item):\n", " \"\"\"local function which Returns the support of an item\"\"\"\n", " return float(utilSet2[item])\n", "\n", " \n", "largeSet = dict()\n", " # Global dictionary which stores (key=n-itemSets,value=support)\n", " # which satisfy minSupport\n", "\n", "assocRules = dict()\n", " # Dictionary which stores Association Rules\n", "minsup=getminsup(itemSet,transactionList)\n", "# print(minsup)\n", "oneCSet = getfreqitem2(itemSet, transactionList, minsup,freqSet,1)\n", "# print(oneCSet)\n", "\n", "currentLSet = oneCSet\n", "k = 2\n", "# currentLSet = joinSet(currentLSet, k)\n", "# print(\"2 itemset\")\n", "# print(currentLSet)\n", "# freqitemset2 = getfreqitem2(currentLSet, transactionList, minsup,freqSet,k)\n", "# print(\"freq item 2\")\n", "# print(freqitemset2)\n", "# k=3\n", "# currentLSet = joinSet(oneCSet, k)\n", "# print(currentLSet)\n", "# oneCSet = getfreqitem2(currentLSet, transactionList, minsup,freqSet,k)\n", "# print(\"freq item 3\")\n", "# print(oneCSet)\n", "\n", "while currentLSet != set([]):\n", " largeSet[k - 1] = currentLSet\n", " currentLSet = joinSet(currentLSet, k)\n", "# print(currentLSet)\n", " currentCSet = getfreqitem2(\n", " currentLSet, transactionList, minsup,freqSet,k\n", " )\n", " currentLSet = currentCSet\n", "# print(currentLSet)\n", " k = k + 1\n", "\n", " \n", "# print(largeSet)\n", " \n", "toRetItems = []\n", "for key, value in largeSet.items():\n", " toRetItems.extend([(tuple(item), getSupport(item)) for item in value])\n", "\n", "toRetRules = []\n", "for key, value in list(largeSet.items())[1:]:\n", " for item in value:\n", " _subsets = map(frozenset, [x for x in subsets(item)])\n", " for element in _subsets:\n", " remain = item.difference(element)\n", " if len(remain) > 0:\n", " confidence = getSupport(item) / getSupport(element)\n", " if confidence >= minConfidence:\n", " toRetRules.append(((tuple(element), tuple(remain)), confidence))\n", "print(\"------ITEMSET--------------\")\n", "print(itemSet)\n", "print(\"---------------TRANSACTION LIST----------------\")\n", "print(transactionList)\n", "\n", "print(\"MINIMUM SUPPORT\",minsup)\n", " \n", "print(\"\\n------------------------ FREQUENT ITEMSET:\")\n", "\"\"\"prints the generated itemsets sorted by support and the confidence rules sorted by confidence\"\"\"\n", "for item, support in sorted(toRetItems, key=lambda x: x[1]):\n", " print(\"item: %s , %.3f\" % (str(item), support))\n", "\n", "print(len(toRetItems))\n", "\n", "from operator import itemgetter\n", "res = sorted(toRetRules, key = itemgetter(1),reverse=True)\n", "# print(str(res))\n", "print(\"\\n------------------------ RULES:\")\n", "for rule, confidence in (res):\n", " pre, post = rule\n", " print(\"Rule: %s ==> %s , %.3f\" % (str(pre), str(post), confidence))\n", "print(len(res))\n", "\n", "# for rule, confidence in sorted(toRetRules, key=lambda x: x[1]):\n", "# pre, post = rule\n", "# print(\"Rule: %s ==> %s , %.3f\" % (str(pre), str(post), confidence))\n", "\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" } }, "nbformat": 4, "nbformat_minor": 4 }