在本案例中,我们结合商场的购物记录,实现经典的关联规则挖掘算法APRIORI算法和FPGrowth算法。具体来看,我们将实现频繁K项集的查找,条件模式基的查找,FP树的构建。最后,我们将从购物记录中寻找关系密切的商品,从而能给商场的商品销售提供建议支持。

In [1]:
import pandas as pd
import numpy as np

数据预处理

由于数据集文件以txt文件存储,我们选择Pandas中的read_table()函数读入数据。

In [2]:
data = pd.read_table('./input/shopping-record.txt', header=None)
data.head()
Out[2]:
0
0 citrus fruit,semi-finished bread,margarine,rea...
1 tropical fruit,yogurt,coffee
2 whole milk
3 pip fruit,yogurt,cream cheese,meat spreads
4 other vegetables,whole milk,condensed milk,lon...

从结果上来看,虽然每行数据记录的项之间以逗号隔开,但是数据集并没有严格的格式规范,各行数据记录所包含的项数量并不相同,无法在读入函数中指定统一的分隔符。因此,我们选择使用Python的标准函数,直接读入,将数据集以嵌套列表的形式存储。

In [4]:
# 数据转换
data = []
with open('./input/shopping-record.txt') as f:
    for line in f.readlines():
        # 去除各种符号
        line = line.strip()
        #去除空行
        if line:
            row_list = line.split(',')
            data.append(row_list)
In [6]:
## 输出数据集的前10条记录
data[:10]
Out[6]:
[['citrus fruit', 'semi-finished bread', 'margarine', 'ready soups'],
 ['tropical fruit', 'yogurt', 'coffee'],
 ['whole milk'],
 ['pip fruit', 'yogurt', 'cream cheese', 'meat spreads'],
 ['other vegetables',
  'whole milk',
  'condensed milk',
  'long life bakery product'],
 ['whole milk', 'butter', 'yogurt', 'rice', 'abrasive cleaner'],
 ['rolls/buns'],
 ['other vegetables',
  'UHT-milk',
  'rolls/buns',
  'bottled beer',
  'liquor (appetizer)'],
 ['potted plants'],
 ['whole milk', 'cereals']]

数据集一共有9835条数据记录。

In [7]:
len(data)
Out[7]:
9835

APRIOR 算法

生成频繁1项集

In [8]:
from collections import defaultdict
In [9]:
min_support = 100
frequent_1 = defaultdict(int)

for item in data:

    for record in item:
        
           frequent_1[frozenset([record])] += 1

frequent_1 = {v:frequent_1[v] for v in frequent_1 if frequent_1[v] >= min_support}
In [12]:
print u'频繁1项集的个数:', len(frequent_1)
## 输出前10个元素
frequent_1_list = frequent_1.items()
for index in range(10):
    print frequent_1_list[index]
频繁1项集的个数: 88
(frozenset(['beef']), 516)
(frozenset(['rolls/buns']), 1809)
(frozenset(['cling film/bags']), 112)
(frozenset(['spread cheese']), 110)
(frozenset(['liquor']), 109)
(frozenset(['flower (seeds)']), 102)
(frozenset(['white bread']), 414)
(frozenset(['dessert']), 365)
(frozenset(['pork']), 567)
(frozenset(['whipped/sour cream']), 705)

生成频繁k项集

我们使用getFrequentItemSetWithSupport()函数完成APRIORI算法中的连接步和剪枝步。

In [13]:
def getSubset(item, k):
    
    import itertools as its
    return [frozenset(item) for item in its.combinations(item, k)]

# k >= 2时
def getFrequentItemSetWithSupport(frequent_k, min_support, k, item_list):
    
    from collections import defaultdict
    items = frequent_k.keys()
    
    #k项候选集
    candidate_items = []
    
    current_k = defaultdict(int)

    ### 连接步,生成候选集
    candidate_items = set([m.union(n) for m in items for n in items if m != n and len(m.union(n)) == k])
    
    ### 剪枝步,剔除含有非频繁项子集的项集
    final_candidate = set()
    for candidate in candidate_items:
        
        sub_items = getSubset(candidate, (k - 1))
    
        if any([item < candidate for item in sub_items]):  
            
            final_candidate.add(candidate)
            
        else:
            continue
         
    # 遍历数据集data,对final_candidate中的元素进行统计,保留支持度大于最小阈值的频繁项
    for item in final_candidate:
        
        for record in item_list:
        
            #数据记录record中含有频繁项item
            if item.issubset(record):     
                           
                current_k[item] += 1
            else:
                continue
    #print 'current_candidate: ', current_k
    return {v: current_k[v] for v in current_k if current_k[v] >= min_support}  

在本案例中,我们选择k值的上限为5, 反复调用上述函数,来生成频繁k项集。

In [14]:
upper_bound = 5
final_itemsets= []
final_itemsets.append(frequent_1)
min_conf = 0.4

frequent_k_minus_1 = frequent_1

k = 2
while k <= upper_bound:
    #print frequent_k_minus_1
    #print ""
    frequent_k = getFrequentItemSetWithSupport(frequent_k_minus_1, min_support, k, data)
    final_itemsets.append(frequent_k)
    frequent_k_minus_1 = frequent_k
    k += 1
In [17]:
## 输出频繁2项集中的前10个元素
final_itemsets_2_list = final_itemsets[1].items()

for index in range(10):
    print final_itemsets_2_list[index]
(frozenset(['yogurt', 'whipped/sour cream']), 204)
(frozenset(['tropical fruit', 'sausage']), 137)
(frozenset(['pork', 'other vegetables']), 213)
(frozenset(['other vegetables', 'frankfurter']), 162)
(frozenset(['whole milk', 'whipped/sour cream']), 317)
(frozenset(['other vegetables', 'napkins']), 142)
(frozenset(['whole milk', 'frozen vegetables']), 201)
(frozenset(['shopping bags', 'bottled water']), 108)
(frozenset(['brown bread', 'soda']), 124)
(frozenset(['yogurt', 'frankfurter']), 110)

k=4开始,频繁项集集合为空,也就是说,在给定的最小支持度水平下,数据集至多存在频繁3项集。

生成关联规则

生成频繁项集之后,我们可以直接得到同时满足最小支持度和最小置信度的强关联规则。例如,对于频繁项集{'A','B'}来说,关联规则 $A \rightarrow B$的置信度如下所示: \begin{equation} \text{conf}(A \rightarrow B) = \dfrac{\text{support}(\{A,B\})}{\text{support}(\{A\})} \end{equation}

In [18]:
def getAllSubsets(item):
    
    subsets = []
    
    for i in xrange(len(item) - 1):
    
        subsets.extend(getSubset(item, i + 1))
                       
    return subsets
In [19]:
association_rules = []

for item_set in final_itemsets[1:]:
    if len(item_set) == 0:
        continue
    for value in item_set:
        print 'frequent item set: ', value
        #形如 if condition, then conclusion
        for condition in getAllSubsets(value):
            print '    condition: ', condition,
            conclusion_items = frozenset(x for x in value if x not in condition)
            print '    conclusion: ', conclusion_items,
            
            if len(conclusion_items) > 0:
                    
                confidence = float(final_itemsets[len(value) - 1][value])/final_itemsets[len(condition) - 1][condition]
                print confidence
                if confidence > min_conf:
                        
                    association_rules.append([[condition, conclusion_items],
                                           confidence])
                print ''
frequent item set:  frozenset(['yogurt', 'whipped/sour cream'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['whipped/sour cream']) 0.148688046647

    condition:  frozenset(['whipped/sour cream'])     conclusion:  frozenset(['yogurt']) 0.289361702128

frequent item set:  frozenset(['tropical fruit', 'sausage'])
    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['sausage']) 0.132751937984

    condition:  frozenset(['sausage'])     conclusion:  frozenset(['tropical fruit']) 0.148268398268

frequent item set:  frozenset(['pork', 'other vegetables'])
    condition:  frozenset(['pork'])     conclusion:  frozenset(['other vegetables']) 0.375661375661

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['pork']) 0.111928533894

frequent item set:  frozenset(['other vegetables', 'frankfurter'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['frankfurter']) 0.0851287440883

    condition:  frozenset(['frankfurter'])     conclusion:  frozenset(['other vegetables']) 0.279310344828

frequent item set:  frozenset(['whole milk', 'whipped/sour cream'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['whipped/sour cream']) 0.126144050935

    condition:  frozenset(['whipped/sour cream'])     conclusion:  frozenset(['whole milk']) 0.449645390071

frequent item set:  frozenset(['other vegetables', 'napkins'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['napkins']) 0.0746190225959

    condition:  frozenset(['napkins'])     conclusion:  frozenset(['other vegetables']) 0.27572815534

frequent item set:  frozenset(['whole milk', 'frozen vegetables'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['frozen vegetables']) 0.0799840827696

    condition:  frozenset(['frozen vegetables'])     conclusion:  frozenset(['whole milk']) 0.424947145877

frequent item set:  frozenset(['shopping bags', 'bottled water'])
    condition:  frozenset(['shopping bags'])     conclusion:  frozenset(['bottled water']) 0.111455108359

    condition:  frozenset(['bottled water'])     conclusion:  frozenset(['shopping bags']) 0.099356025759

frequent item set:  frozenset(['brown bread', 'soda'])
    condition:  frozenset(['brown bread'])     conclusion:  frozenset(['soda']) 0.194357366771

    condition:  frozenset(['soda'])     conclusion:  frozenset(['brown bread']) 0.0723032069971

frequent item set:  frozenset(['yogurt', 'frankfurter'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['frankfurter']) 0.0801749271137

    condition:  frozenset(['frankfurter'])     conclusion:  frozenset(['yogurt']) 0.189655172414

frequent item set:  frozenset(['rolls/buns', 'soda'])
    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['soda']) 0.208402432283

    condition:  frozenset(['soda'])     conclusion:  frozenset(['rolls/buns']) 0.219825072886

frequent item set:  frozenset(['yogurt', 'frozen vegetables'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['frozen vegetables']) 0.0889212827988

    condition:  frozenset(['frozen vegetables'])     conclusion:  frozenset(['yogurt']) 0.257928118393

frequent item set:  frozenset(['whole milk', 'dessert'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['dessert']) 0.0537206526064

    condition:  frozenset(['dessert'])     conclusion:  frozenset(['whole milk']) 0.369863013699

frequent item set:  frozenset(['whole milk', 'bottled beer'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['bottled beer']) 0.0799840827696

    condition:  frozenset(['bottled beer'])     conclusion:  frozenset(['whole milk']) 0.253787878788

frequent item set:  frozenset(['rolls/buns', 'pastry'])
    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['pastry']) 0.113875069099

    condition:  frozenset(['pastry'])     conclusion:  frozenset(['rolls/buns']) 0.235428571429

frequent item set:  frozenset(['margarine', 'rolls/buns'])
    condition:  frozenset(['margarine'])     conclusion:  frozenset(['rolls/buns']) 0.251736111111

    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['margarine']) 0.0801547816473

frequent item set:  frozenset(['tropical fruit', 'domestic eggs'])
    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['domestic eggs']) 0.108527131783

    condition:  frozenset(['domestic eggs'])     conclusion:  frozenset(['tropical fruit']) 0.179487179487

frequent item set:  frozenset(['whole milk', 'curd'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['curd']) 0.102268205332

    condition:  frozenset(['curd'])     conclusion:  frozenset(['whole milk']) 0.490458015267

frequent item set:  frozenset(['sausage', 'pastry'])
    condition:  frozenset(['sausage'])     conclusion:  frozenset(['pastry']) 0.133116883117

    condition:  frozenset(['pastry'])     conclusion:  frozenset(['sausage']) 0.140571428571

frequent item set:  frozenset(['rolls/buns', 'shopping bags'])
    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['shopping bags']) 0.106135986733

    condition:  frozenset(['shopping bags'])     conclusion:  frozenset(['rolls/buns']) 0.198142414861

frequent item set:  frozenset(['other vegetables', 'root vegetables'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['root vegetables']) 0.244876510772

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['other vegetables']) 0.434701492537

frequent item set:  frozenset(['yogurt', 'curd'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['curd']) 0.123906705539

    condition:  frozenset(['curd'])     conclusion:  frozenset(['yogurt']) 0.324427480916

frequent item set:  frozenset(['whole milk', 'onions'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['onions']) 0.0473537604457

    condition:  frozenset(['onions'])     conclusion:  frozenset(['whole milk']) 0.390163934426

frequent item set:  frozenset(['whole milk', 'coffee'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['coffee']) 0.0732192598488

    condition:  frozenset(['coffee'])     conclusion:  frozenset(['whole milk']) 0.322241681261

frequent item set:  frozenset(['whole milk', 'hamburger meat'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['hamburger meat']) 0.0576999602069

    condition:  frozenset(['hamburger meat'])     conclusion:  frozenset(['whole milk']) 0.443425076453

frequent item set:  frozenset(['tropical fruit', 'whipped/sour cream'])
    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['whipped/sour cream']) 0.131782945736

    condition:  frozenset(['whipped/sour cream'])     conclusion:  frozenset(['tropical fruit']) 0.192907801418

frequent item set:  frozenset(['canned beer', 'rolls/buns'])
    condition:  frozenset(['canned beer'])     conclusion:  frozenset(['rolls/buns']) 0.145287958115

    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['canned beer']) 0.06135986733

frequent item set:  frozenset(['root vegetables', 'soda'])
    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['soda']) 0.170708955224

    condition:  frozenset(['soda'])     conclusion:  frozenset(['root vegetables']) 0.106705539359

frequent item set:  frozenset(['whole milk', 'beef'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['beef']) 0.08316752885

    condition:  frozenset(['beef'])     conclusion:  frozenset(['whole milk']) 0.40503875969

frequent item set:  frozenset(['hamburger meat', 'other vegetables'])
    condition:  frozenset(['hamburger meat'])     conclusion:  frozenset(['other vegetables']) 0.415902140673

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['hamburger meat']) 0.0714661061482

frequent item set:  frozenset(['coffee', 'other vegetables'])
    condition:  frozenset(['coffee'])     conclusion:  frozenset(['other vegetables']) 0.231173380035

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['coffee']) 0.0693641618497

frequent item set:  frozenset(['white bread', 'soda'])
    condition:  frozenset(['white bread'])     conclusion:  frozenset(['soda']) 0.243961352657

    condition:  frozenset(['soda'])     conclusion:  frozenset(['white bread']) 0.0588921282799

frequent item set:  frozenset(['yogurt', 'beef'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['beef']) 0.0838192419825

    condition:  frozenset(['beef'])     conclusion:  frozenset(['yogurt']) 0.222868217054

frequent item set:  frozenset(['whole milk', 'butter milk'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['butter milk']) 0.0453641066454

    condition:  frozenset(['butter milk'])     conclusion:  frozenset(['whole milk']) 0.414545454545

frequent item set:  frozenset(['yogurt', 'margarine'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['margarine']) 0.102040816327

    condition:  frozenset(['margarine'])     conclusion:  frozenset(['yogurt']) 0.243055555556

frequent item set:  frozenset(['other vegetables', 'shopping bags'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['shopping bags']) 0.119810825013

    condition:  frozenset(['shopping bags'])     conclusion:  frozenset(['other vegetables']) 0.235294117647

frequent item set:  frozenset(['whole milk', 'domestic eggs'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['domestic eggs']) 0.117389574214

    condition:  frozenset(['domestic eggs'])     conclusion:  frozenset(['whole milk']) 0.472756410256

frequent item set:  frozenset(['yogurt', 'pastry'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['pastry']) 0.126822157434

    condition:  frozenset(['pastry'])     conclusion:  frozenset(['yogurt']) 0.198857142857

frequent item set:  frozenset(['newspapers', 'soda'])
    condition:  frozenset(['newspapers'])     conclusion:  frozenset(['soda']) 0.183439490446

    condition:  frozenset(['soda'])     conclusion:  frozenset(['newspapers']) 0.0839650145773

frequent item set:  frozenset(['margarine', 'other vegetables'])
    condition:  frozenset(['margarine'])     conclusion:  frozenset(['other vegetables']) 0.336805555556

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['margarine']) 0.101944298476

frequent item set:  frozenset(['tropical fruit', 'newspapers'])
    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['newspapers']) 0.112403100775

    condition:  frozenset(['newspapers'])     conclusion:  frozenset(['tropical fruit']) 0.147770700637

frequent item set:  frozenset(['other vegetables', 'pastry'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['pastry']) 0.116657908565

    condition:  frozenset(['pastry'])     conclusion:  frozenset(['other vegetables']) 0.253714285714

frequent item set:  frozenset(['chicken', 'other vegetables'])
    condition:  frozenset(['chicken'])     conclusion:  frozenset(['other vegetables']) 0.417061611374

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['chicken']) 0.0924855491329

frequent item set:  frozenset(['whole milk', 'waffles'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['waffles']) 0.049741345006

    condition:  frozenset(['waffles'])     conclusion:  frozenset(['whole milk']) 0.330687830688

frequent item set:  frozenset(['canned beer', 'shopping bags'])
    condition:  frozenset(['canned beer'])     conclusion:  frozenset(['shopping bags']) 0.146596858639

    condition:  frozenset(['shopping bags'])     conclusion:  frozenset(['canned beer']) 0.115583075335

frequent item set:  frozenset(['yogurt', 'root vegetables'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['root vegetables']) 0.185131195335

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['yogurt']) 0.236940298507

frequent item set:  frozenset(['margarine', 'soda'])
    condition:  frozenset(['margarine'])     conclusion:  frozenset(['soda']) 0.173611111111

    condition:  frozenset(['soda'])     conclusion:  frozenset(['margarine']) 0.0583090379009

frequent item set:  frozenset(['whole milk', 'oil'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['oil']) 0.0441703143653

    condition:  frozenset(['oil'])     conclusion:  frozenset(['whole milk']) 0.402173913043

frequent item set:  frozenset(['other vegetables', 'frozen vegetables'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['frozen vegetables']) 0.0919600630583

    condition:  frozenset(['frozen vegetables'])     conclusion:  frozenset(['other vegetables']) 0.369978858351

frequent item set:  frozenset(['whole milk', 'napkins'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['napkins']) 0.0771985674493

    condition:  frozenset(['napkins'])     conclusion:  frozenset(['whole milk']) 0.376699029126

frequent item set:  frozenset(['sausage', 'soda'])
    condition:  frozenset(['sausage'])     conclusion:  frozenset(['soda']) 0.258658008658

    condition:  frozenset(['soda'])     conclusion:  frozenset(['sausage']) 0.139358600583

frequent item set:  frozenset(['whole milk', 'pork'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['pork']) 0.0867489056904

    condition:  frozenset(['pork'])     conclusion:  frozenset(['whole milk']) 0.384479717813

frequent item set:  frozenset(['citrus fruit', 'fruit/vegetable juice'])
    condition:  frozenset(['citrus fruit'])     conclusion:  frozenset(['fruit/vegetable juice']) 0.125307125307

    condition:  frozenset(['fruit/vegetable juice'])     conclusion:  frozenset(['citrus fruit']) 0.143459915612

frequent item set:  frozenset(['tropical fruit', 'brown bread'])
    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['brown bread']) 0.101744186047

    condition:  frozenset(['brown bread'])     conclusion:  frozenset(['tropical fruit']) 0.164576802508

frequent item set:  frozenset(['whole milk', 'white bread'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['white bread']) 0.066852367688

    condition:  frozenset(['white bread'])     conclusion:  frozenset(['whole milk']) 0.405797101449

frequent item set:  frozenset(['whole milk', 'sausage'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['sausage']) 0.116991643454

    condition:  frozenset(['sausage'])     conclusion:  frozenset(['whole milk']) 0.318181818182

frequent item set:  frozenset(['pastry', 'soda'])
    condition:  frozenset(['pastry'])     conclusion:  frozenset(['soda']) 0.236571428571

    condition:  frozenset(['soda'])     conclusion:  frozenset(['pastry']) 0.120699708455

frequent item set:  frozenset(['domestic eggs', 'soda'])
    condition:  frozenset(['domestic eggs'])     conclusion:  frozenset(['soda']) 0.195512820513

    condition:  frozenset(['soda'])     conclusion:  frozenset(['domestic eggs']) 0.0711370262391

frequent item set:  frozenset(['other vegetables', 'fruit/vegetable juice'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['fruit/vegetable juice']) 0.108775617446

    condition:  frozenset(['fruit/vegetable juice'])     conclusion:  frozenset(['other vegetables']) 0.291139240506

frequent item set:  frozenset(['sausage', 'bottled water'])
    condition:  frozenset(['sausage'])     conclusion:  frozenset(['bottled water']) 0.127705627706

    condition:  frozenset(['bottled water'])     conclusion:  frozenset(['sausage']) 0.108555657774

frequent item set:  frozenset(['whole milk', 'cream cheese'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['cream cheese']) 0.0644647831277

    condition:  frozenset(['cream cheese'])     conclusion:  frozenset(['whole milk']) 0.415384615385

frequent item set:  frozenset(['citrus fruit', 'other vegetables'])
    condition:  frozenset(['citrus fruit'])     conclusion:  frozenset(['other vegetables']) 0.348894348894

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['citrus fruit']) 0.149238045192

frequent item set:  frozenset(['shopping bags', 'soda'])
    condition:  frozenset(['shopping bags'])     conclusion:  frozenset(['soda']) 0.249742002064

    condition:  frozenset(['soda'])     conclusion:  frozenset(['shopping bags']) 0.14110787172

frequent item set:  frozenset(['tropical fruit', 'pip fruit'])
    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['pip fruit']) 0.19476744186

    condition:  frozenset(['pip fruit'])     conclusion:  frozenset(['tropical fruit']) 0.270161290323

frequent item set:  frozenset(['yogurt', 'fruit/vegetable juice'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['fruit/vegetable juice']) 0.134110787172

    condition:  frozenset(['fruit/vegetable juice'])     conclusion:  frozenset(['yogurt']) 0.258790436006

frequent item set:  frozenset(['soda', 'whipped/sour cream'])
    condition:  frozenset(['soda'])     conclusion:  frozenset(['whipped/sour cream']) 0.066472303207

    condition:  frozenset(['whipped/sour cream'])     conclusion:  frozenset(['soda']) 0.16170212766

frequent item set:  frozenset(['other vegetables', 'rolls/buns'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['rolls/buns']) 0.220178665265

    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['other vegetables']) 0.231619679381

frequent item set:  frozenset(['yogurt', 'sausage'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['sausage']) 0.140670553936

    condition:  frozenset(['sausage'])     conclusion:  frozenset(['yogurt']) 0.208874458874

frequent item set:  frozenset(['yogurt', 'berries'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['berries']) 0.0758017492711

    condition:  frozenset(['berries'])     conclusion:  frozenset(['yogurt']) 0.318042813456

frequent item set:  frozenset(['citrus fruit', 'bottled water'])
    condition:  frozenset(['citrus fruit'])     conclusion:  frozenset(['bottled water']) 0.163390663391

    condition:  frozenset(['bottled water'])     conclusion:  frozenset(['citrus fruit']) 0.122355105796

frequent item set:  frozenset(['rolls/buns', 'whipped/sour cream'])
    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['whipped/sour cream']) 0.0796019900498

    condition:  frozenset(['whipped/sour cream'])     conclusion:  frozenset(['rolls/buns']) 0.204255319149

frequent item set:  frozenset(['whole milk', 'pastry'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['pastry']) 0.130123358536

    condition:  frozenset(['pastry'])     conclusion:  frozenset(['whole milk']) 0.373714285714

frequent item set:  frozenset(['yogurt', 'rolls/buns'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['rolls/buns']) 0.246355685131

    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['yogurt']) 0.186843559978

frequent item set:  frozenset(['sausage', 'other vegetables'])
    condition:  frozenset(['sausage'])     conclusion:  frozenset(['other vegetables']) 0.286796536797

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['sausage']) 0.139253809774

frequent item set:  frozenset(['long life bakery product', 'other vegetables'])
    condition:  frozenset(['long life bakery product'])     conclusion:  frozenset(['other vegetables']) 0.285326086957

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['long life bakery product']) 0.055176037835

frequent item set:  frozenset(['tropical fruit', 'root vegetables'])
    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['root vegetables']) 0.200581395349

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['tropical fruit']) 0.193097014925

frequent item set:  frozenset(['whole milk', 'brown bread'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['brown bread']) 0.0986868284918

    condition:  frozenset(['brown bread'])     conclusion:  frozenset(['whole milk']) 0.388714733542

frequent item set:  frozenset(['shopping bags', 'fruit/vegetable juice'])
    condition:  frozenset(['shopping bags'])     conclusion:  frozenset(['fruit/vegetable juice']) 0.108359133127

    condition:  frozenset(['fruit/vegetable juice'])     conclusion:  frozenset(['shopping bags']) 0.147679324895

frequent item set:  frozenset(['whole milk', 'tropical fruit'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['tropical fruit']) 0.16553919618

    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['whole milk']) 0.403100775194

frequent item set:  frozenset(['whole milk', 'hygiene articles'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['hygiene articles']) 0.050139275766

    condition:  frozenset(['hygiene articles'])     conclusion:  frozenset(['whole milk']) 0.388888888889

frequent item set:  frozenset(['sausage', 'shopping bags'])
    condition:  frozenset(['sausage'])     conclusion:  frozenset(['shopping bags']) 0.166666666667

    condition:  frozenset(['shopping bags'])     conclusion:  frozenset(['sausage']) 0.158926728586

frequent item set:  frozenset(['yogurt', 'cream cheese'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['cream cheese']) 0.0889212827988

    condition:  frozenset(['cream cheese'])     conclusion:  frozenset(['yogurt']) 0.312820512821

frequent item set:  frozenset(['butter', 'rolls/buns'])
    condition:  frozenset(['butter'])     conclusion:  frozenset(['rolls/buns']) 0.242201834862

    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['butter']) 0.0729684908789

frequent item set:  frozenset(['soda', 'fruit/vegetable juice'])
    condition:  frozenset(['soda'])     conclusion:  frozenset(['fruit/vegetable juice']) 0.105539358601

    condition:  frozenset(['fruit/vegetable juice'])     conclusion:  frozenset(['soda']) 0.254571026723

frequent item set:  frozenset(['whole milk', 'chocolate'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['chocolate']) 0.0652606446478

    condition:  frozenset(['chocolate'])     conclusion:  frozenset(['whole milk']) 0.33606557377

frequent item set:  frozenset(['bottled water', 'root vegetables'])
    condition:  frozenset(['bottled water'])     conclusion:  frozenset(['root vegetables']) 0.141674333027

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['bottled water']) 0.143656716418

frequent item set:  frozenset(['citrus fruit', 'sausage'])
    condition:  frozenset(['citrus fruit'])     conclusion:  frozenset(['sausage']) 0.136363636364

    condition:  frozenset(['sausage'])     conclusion:  frozenset(['citrus fruit']) 0.12012987013

frequent item set:  frozenset(['whole milk', 'chicken'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['chicken']) 0.0688420214883

    condition:  frozenset(['chicken'])     conclusion:  frozenset(['whole milk']) 0.409952606635

frequent item set:  frozenset(['cream cheese', 'other vegetables'])
    condition:  frozenset(['cream cheese'])     conclusion:  frozenset(['other vegetables']) 0.346153846154

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['cream cheese']) 0.0709406200736

frequent item set:  frozenset(['root vegetables', 'whipped/sour cream'])
    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['whipped/sour cream']) 0.15671641791

    condition:  frozenset(['whipped/sour cream'])     conclusion:  frozenset(['root vegetables']) 0.23829787234

frequent item set:  frozenset(['other vegetables', 'brown bread'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['brown bread']) 0.0966894377299

    condition:  frozenset(['brown bread'])     conclusion:  frozenset(['other vegetables']) 0.288401253918

frequent item set:  frozenset(['sausage', 'rolls/buns'])
    condition:  frozenset(['sausage'])     conclusion:  frozenset(['rolls/buns']) 0.325757575758

    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['sausage']) 0.166390270868

frequent item set:  frozenset(['yogurt', 'other vegetables'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['other vegetables']) 0.311224489796

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['yogurt']) 0.224382553862

frequent item set:  frozenset(['sausage', 'brown bread'])
    condition:  frozenset(['sausage'])     conclusion:  frozenset(['brown bread']) 0.113636363636

    condition:  frozenset(['brown bread'])     conclusion:  frozenset(['sausage']) 0.164576802508

frequent item set:  frozenset(['other vegetables', 'whipped/sour cream'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['whipped/sour cream']) 0.149238045192

    condition:  frozenset(['whipped/sour cream'])     conclusion:  frozenset(['other vegetables']) 0.402836879433

frequent item set:  frozenset(['whole milk', 'root vegetables'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['root vegetables']) 0.191404695583

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['whole milk']) 0.448694029851

frequent item set:  frozenset(['salty snack', 'other vegetables'])
    condition:  frozenset(['salty snack'])     conclusion:  frozenset(['other vegetables']) 0.284946236559

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['salty snack']) 0.0557015239096

frequent item set:  frozenset(['whole milk', 'pip fruit'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['pip fruit']) 0.117787504974

    condition:  frozenset(['pip fruit'])     conclusion:  frozenset(['whole milk']) 0.397849462366

frequent item set:  frozenset(['frozen vegetables', 'root vegetables'])
    condition:  frozenset(['frozen vegetables'])     conclusion:  frozenset(['root vegetables']) 0.241014799154

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['frozen vegetables']) 0.106343283582

frequent item set:  frozenset(['butter', 'whipped/sour cream'])
    condition:  frozenset(['butter'])     conclusion:  frozenset(['whipped/sour cream']) 0.183486238532

    condition:  frozenset(['whipped/sour cream'])     conclusion:  frozenset(['butter']) 0.141843971631

frequent item set:  frozenset(['rolls/buns', 'domestic eggs'])
    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['domestic eggs']) 0.0851299060254

    condition:  frozenset(['domestic eggs'])     conclusion:  frozenset(['rolls/buns']) 0.246794871795

frequent item set:  frozenset(['pip fruit', 'citrus fruit'])
    condition:  frozenset(['pip fruit'])     conclusion:  frozenset(['citrus fruit']) 0.182795698925

    condition:  frozenset(['citrus fruit'])     conclusion:  frozenset(['pip fruit']) 0.167076167076

frequent item set:  frozenset(['tropical fruit', 'shopping bags'])
    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['shopping bags']) 0.128875968992

    condition:  frozenset(['shopping bags'])     conclusion:  frozenset(['tropical fruit']) 0.137254901961

frequent item set:  frozenset(['soda', 'chocolate'])
    condition:  frozenset(['soda'])     conclusion:  frozenset(['chocolate']) 0.0775510204082

    condition:  frozenset(['chocolate'])     conclusion:  frozenset(['soda']) 0.272540983607

frequent item set:  frozenset(['newspapers', 'root vegetables'])
    condition:  frozenset(['newspapers'])     conclusion:  frozenset(['root vegetables']) 0.143949044586

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['newspapers']) 0.105410447761

frequent item set:  frozenset(['butter', 'root vegetables'])
    condition:  frozenset(['butter'])     conclusion:  frozenset(['root vegetables']) 0.233027522936

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['butter']) 0.118470149254

frequent item set:  frozenset(['other vegetables', 'bottled beer'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['bottled beer']) 0.0835522858644

    condition:  frozenset(['bottled beer'])     conclusion:  frozenset(['other vegetables']) 0.200757575758

frequent item set:  frozenset(['rolls/buns', 'bottled water'])
    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['bottled water']) 0.131564400221

    condition:  frozenset(['bottled water'])     conclusion:  frozenset(['rolls/buns']) 0.21895124195

frequent item set:  frozenset(['other vegetables', 'sugar'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['sugar']) 0.0557015239096

    condition:  frozenset(['sugar'])     conclusion:  frozenset(['other vegetables']) 0.318318318318

frequent item set:  frozenset(['whole milk', 'sliced cheese'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['sliced cheese']) 0.0421806605651

    condition:  frozenset(['sliced cheese'])     conclusion:  frozenset(['whole milk']) 0.439834024896

frequent item set:  frozenset(['frozen vegetables', 'rolls/buns'])
    condition:  frozenset(['frozen vegetables'])     conclusion:  frozenset(['rolls/buns']) 0.211416490486

    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['frozen vegetables']) 0.0552791597568

frequent item set:  frozenset(['pork', 'soda'])
    condition:  frozenset(['pork'])     conclusion:  frozenset(['soda']) 0.206349206349

    condition:  frozenset(['soda'])     conclusion:  frozenset(['pork']) 0.068221574344

frequent item set:  frozenset(['other vegetables', 'berries'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['berries']) 0.0530740935365

    condition:  frozenset(['berries'])     conclusion:  frozenset(['other vegetables']) 0.308868501529

frequent item set:  frozenset(['pip fruit', 'root vegetables'])
    condition:  frozenset(['pip fruit'])     conclusion:  frozenset(['root vegetables']) 0.20564516129

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['pip fruit']) 0.142723880597

frequent item set:  frozenset(['yogurt', 'domestic eggs'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['domestic eggs']) 0.1027696793

    condition:  frozenset(['domestic eggs'])     conclusion:  frozenset(['yogurt']) 0.225961538462

frequent item set:  frozenset(['whole milk', 'frankfurter'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['frankfurter']) 0.0803820135296

    condition:  frozenset(['frankfurter'])     conclusion:  frozenset(['whole milk']) 0.348275862069

frequent item set:  frozenset(['pip fruit', 'pastry'])
    condition:  frozenset(['pip fruit'])     conclusion:  frozenset(['pastry']) 0.141129032258

    condition:  frozenset(['pastry'])     conclusion:  frozenset(['pip fruit']) 0.12

frequent item set:  frozenset(['margarine', 'root vegetables'])
    condition:  frozenset(['margarine'])     conclusion:  frozenset(['root vegetables']) 0.189236111111

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['margarine']) 0.101679104478

frequent item set:  frozenset(['tropical fruit', 'citrus fruit'])
    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['citrus fruit']) 0.18992248062

    condition:  frozenset(['citrus fruit'])     conclusion:  frozenset(['tropical fruit']) 0.240786240786

frequent item set:  frozenset(['other vegetables', 'chocolate'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['chocolate']) 0.0656857593274

    condition:  frozenset(['chocolate'])     conclusion:  frozenset(['other vegetables']) 0.256147540984

frequent item set:  frozenset(['pastry', 'root vegetables'])
    condition:  frozenset(['pastry'])     conclusion:  frozenset(['root vegetables']) 0.123428571429

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['pastry']) 0.100746268657

frequent item set:  frozenset(['tropical fruit', 'fruit/vegetable juice'])
    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['fruit/vegetable juice']) 0.130813953488

    condition:  frozenset(['fruit/vegetable juice'])     conclusion:  frozenset(['tropical fruit']) 0.189873417722

frequent item set:  frozenset(['chicken', 'root vegetables'])
    condition:  frozenset(['chicken'])     conclusion:  frozenset(['root vegetables']) 0.25355450237

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['chicken']) 0.0998134328358

frequent item set:  frozenset(['shopping bags', 'root vegetables'])
    condition:  frozenset(['shopping bags'])     conclusion:  frozenset(['root vegetables']) 0.130030959752

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['shopping bags']) 0.117537313433

frequent item set:  frozenset(['whole milk', 'rolls/buns'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['rolls/buns']) 0.221647433347

    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['whole milk']) 0.307904919845

frequent item set:  frozenset(['coffee', 'rolls/buns'])
    condition:  frozenset(['coffee'])     conclusion:  frozenset(['rolls/buns']) 0.189141856392

    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['coffee']) 0.0597014925373

frequent item set:  frozenset(['root vegetables', 'frankfurter'])
    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['frankfurter']) 0.0932835820896

    condition:  frozenset(['frankfurter'])     conclusion:  frozenset(['root vegetables']) 0.172413793103

frequent item set:  frozenset(['shopping bags', 'pastry'])
    condition:  frozenset(['shopping bags'])     conclusion:  frozenset(['pastry']) 0.120743034056

    condition:  frozenset(['pastry'])     conclusion:  frozenset(['shopping bags']) 0.133714285714

frequent item set:  frozenset(['margarine', 'bottled water'])
    condition:  frozenset(['margarine'])     conclusion:  frozenset(['bottled water']) 0.175347222222

    condition:  frozenset(['bottled water'])     conclusion:  frozenset(['margarine']) 0.0929162833487

frequent item set:  frozenset(['yogurt', 'napkins'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['napkins']) 0.0881924198251

    condition:  frozenset(['napkins'])     conclusion:  frozenset(['yogurt']) 0.234951456311

frequent item set:  frozenset(['newspapers', 'rolls/buns'])
    condition:  frozenset(['newspapers'])     conclusion:  frozenset(['rolls/buns']) 0.247133757962

    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['newspapers']) 0.107241569928

frequent item set:  frozenset(['citrus fruit', 'domestic eggs'])
    condition:  frozenset(['citrus fruit'])     conclusion:  frozenset(['domestic eggs']) 0.125307125307

    condition:  frozenset(['domestic eggs'])     conclusion:  frozenset(['citrus fruit']) 0.163461538462

frequent item set:  frozenset(['whole milk', 'newspapers'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['newspapers']) 0.107043374453

    condition:  frozenset(['newspapers'])     conclusion:  frozenset(['whole milk']) 0.342675159236

frequent item set:  frozenset(['tropical fruit', 'pastry'])
    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['pastry']) 0.125968992248

    condition:  frozenset(['pastry'])     conclusion:  frozenset(['tropical fruit']) 0.148571428571

frequent item set:  frozenset(['rolls/buns', 'frankfurter'])
    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['frankfurter']) 0.10447761194

    condition:  frozenset(['frankfurter'])     conclusion:  frozenset(['rolls/buns']) 0.325862068966

frequent item set:  frozenset(['curd', 'whipped/sour cream'])
    condition:  frozenset(['curd'])     conclusion:  frozenset(['whipped/sour cream']) 0.196564885496

    condition:  frozenset(['whipped/sour cream'])     conclusion:  frozenset(['curd']) 0.14609929078

frequent item set:  frozenset(['other vegetables', 'curd'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['curd']) 0.0888071466106

    condition:  frozenset(['curd'])     conclusion:  frozenset(['other vegetables']) 0.322519083969

frequent item set:  frozenset(['whole milk', 'fruit/vegetable juice'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['fruit/vegetable juice']) 0.104257859133

    condition:  frozenset(['fruit/vegetable juice'])     conclusion:  frozenset(['whole milk']) 0.368495077356

frequent item set:  frozenset(['rolls/buns', 'chocolate'])
    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['chocolate']) 0.0641238253179

    condition:  frozenset(['chocolate'])     conclusion:  frozenset(['rolls/buns']) 0.237704918033

frequent item set:  frozenset(['bottled water', 'soda'])
    condition:  frozenset(['bottled water'])     conclusion:  frozenset(['soda']) 0.26218951242

    condition:  frozenset(['soda'])     conclusion:  frozenset(['bottled water']) 0.166180758017

frequent item set:  frozenset(['root vegetables', 'fruit/vegetable juice'])
    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['fruit/vegetable juice']) 0.110074626866

    condition:  frozenset(['fruit/vegetable juice'])     conclusion:  frozenset(['root vegetables']) 0.165963431786

frequent item set:  frozenset(['curd', 'root vegetables'])
    condition:  frozenset(['curd'])     conclusion:  frozenset(['root vegetables']) 0.204198473282

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['curd']) 0.0998134328358

frequent item set:  frozenset(['tropical fruit', 'bottled water'])
    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['bottled water']) 0.176356589147

    condition:  frozenset(['bottled water'])     conclusion:  frozenset(['tropical fruit']) 0.167433302668

frequent item set:  frozenset(['bottled water', 'bottled beer'])
    condition:  frozenset(['bottled water'])     conclusion:  frozenset(['bottled beer']) 0.142594296228

    condition:  frozenset(['bottled beer'])     conclusion:  frozenset(['bottled water']) 0.195707070707

frequent item set:  frozenset(['whole milk', 'berries'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['berries']) 0.0461599681655

    condition:  frozenset(['berries'])     conclusion:  frozenset(['whole milk']) 0.354740061162

frequent item set:  frozenset(['other vegetables', 'soda'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['soda']) 0.169206516027

    condition:  frozenset(['soda'])     conclusion:  frozenset(['other vegetables']) 0.187755102041

frequent item set:  frozenset(['whole milk', 'bottled water'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['bottled water']) 0.134500596896

    condition:  frozenset(['bottled water'])     conclusion:  frozenset(['whole milk']) 0.310947562098

frequent item set:  frozenset(['rolls/buns', 'napkins'])
    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['napkins']) 0.0635710337203

    condition:  frozenset(['napkins'])     conclusion:  frozenset(['rolls/buns']) 0.223300970874

frequent item set:  frozenset(['whole milk', 'long life bakery product'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['long life bakery product']) 0.0529247910864

    condition:  frozenset(['long life bakery product'])     conclusion:  frozenset(['whole milk']) 0.361413043478

frequent item set:  frozenset(['brown bread', 'root vegetables'])
    condition:  frozenset(['brown bread'])     conclusion:  frozenset(['root vegetables']) 0.156739811912

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['brown bread']) 0.0932835820896

frequent item set:  frozenset(['yogurt', 'soda'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['soda']) 0.196064139942

    condition:  frozenset(['soda'])     conclusion:  frozenset(['yogurt']) 0.156851311953

frequent item set:  frozenset(['rolls/buns', 'root vegetables'])
    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['root vegetables']) 0.132117191819

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['rolls/buns']) 0.222947761194

frequent item set:  frozenset(['pork', 'rolls/buns'])
    condition:  frozenset(['pork'])     conclusion:  frozenset(['rolls/buns']) 0.195767195767

    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['pork']) 0.06135986733

frequent item set:  frozenset(['soda', 'frankfurter'])
    condition:  frozenset(['soda'])     conclusion:  frozenset(['frankfurter']) 0.06472303207

    condition:  frozenset(['frankfurter'])     conclusion:  frozenset(['soda']) 0.191379310345

frequent item set:  frozenset(['yogurt', 'tropical fruit'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['tropical fruit']) 0.209912536443

    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['yogurt']) 0.279069767442

frequent item set:  frozenset(['citrus fruit', 'root vegetables'])
    condition:  frozenset(['citrus fruit'])     conclusion:  frozenset(['root vegetables']) 0.213759213759

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['citrus fruit']) 0.162313432836

frequent item set:  frozenset(['whole milk', 'soda'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['soda']) 0.156784719459

    condition:  frozenset(['soda'])     conclusion:  frozenset(['whole milk']) 0.229737609329

frequent item set:  frozenset(['beef', 'root vegetables'])
    condition:  frozenset(['beef'])     conclusion:  frozenset(['root vegetables']) 0.331395348837

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['beef']) 0.159514925373

frequent item set:  frozenset(['bottled water', 'fruit/vegetable juice'])
    condition:  frozenset(['bottled water'])     conclusion:  frozenset(['fruit/vegetable juice']) 0.128794848206

    condition:  frozenset(['fruit/vegetable juice'])     conclusion:  frozenset(['bottled water']) 0.196905766526

frequent item set:  frozenset(['rolls/buns', 'bottled beer'])
    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['bottled beer']) 0.0740740740741

    condition:  frozenset(['bottled beer'])     conclusion:  frozenset(['rolls/buns']) 0.169191919192

frequent item set:  frozenset(['other vegetables', 'bottled water'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['bottled water']) 0.128218602207

    condition:  frozenset(['bottled water'])     conclusion:  frozenset(['other vegetables']) 0.224471021159

frequent item set:  frozenset(['pip fruit', 'soda'])
    condition:  frozenset(['pip fruit'])     conclusion:  frozenset(['soda']) 0.176075268817

    condition:  frozenset(['soda'])     conclusion:  frozenset(['pip fruit']) 0.0763848396501

frequent item set:  frozenset(['whole milk', 'margarine'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['margarine']) 0.0947075208914

    condition:  frozenset(['margarine'])     conclusion:  frozenset(['whole milk']) 0.413194444444

frequent item set:  frozenset(['citrus fruit', 'soda'])
    condition:  frozenset(['citrus fruit'])     conclusion:  frozenset(['soda']) 0.154791154791

    condition:  frozenset(['soda'])     conclusion:  frozenset(['citrus fruit']) 0.0734693877551

frequent item set:  frozenset(['yogurt', 'bottled water'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['bottled water']) 0.16472303207

    condition:  frozenset(['bottled water'])     conclusion:  frozenset(['yogurt']) 0.207911683533

frequent item set:  frozenset(['newspapers', 'bottled water'])
    condition:  frozenset(['newspapers'])     conclusion:  frozenset(['bottled water']) 0.141401273885

    condition:  frozenset(['bottled water'])     conclusion:  frozenset(['newspapers']) 0.102115915363

frequent item set:  frozenset(['other vegetables', 'domestic eggs'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['domestic eggs']) 0.115081450342

    condition:  frozenset(['domestic eggs'])     conclusion:  frozenset(['other vegetables']) 0.350961538462

frequent item set:  frozenset(['other vegetables', 'newspapers'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['newspapers']) 0.0998423541776

    condition:  frozenset(['newspapers'])     conclusion:  frozenset(['other vegetables']) 0.242038216561

frequent item set:  frozenset(['pip fruit', 'bottled water'])
    condition:  frozenset(['pip fruit'])     conclusion:  frozenset(['bottled water']) 0.139784946237

    condition:  frozenset(['bottled water'])     conclusion:  frozenset(['pip fruit']) 0.0956761729531

frequent item set:  frozenset(['whole milk', 'citrus fruit'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['citrus fruit']) 0.119379228014

    condition:  frozenset(['citrus fruit'])     conclusion:  frozenset(['whole milk']) 0.36855036855

frequent item set:  frozenset(['whole milk', 'shopping bags'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['shopping bags']) 0.0959013131715

    condition:  frozenset(['shopping bags'])     conclusion:  frozenset(['whole milk']) 0.24871001032

frequent item set:  frozenset(['whole milk', 'other vegetables'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['other vegetables']) 0.292877039395

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['whole milk']) 0.38675775092

frequent item set:  frozenset(['yogurt', 'whole milk'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['whole milk']) 0.401603498542

    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['yogurt']) 0.219259848786

frequent item set:  frozenset(['rolls/buns', 'beef'])
    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['beef']) 0.0740740740741

    condition:  frozenset(['beef'])     conclusion:  frozenset(['rolls/buns']) 0.259689922481

frequent item set:  frozenset(['pip fruit', 'other vegetables'])
    condition:  frozenset(['pip fruit'])     conclusion:  frozenset(['other vegetables']) 0.345430107527

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['pip fruit']) 0.135049921177

frequent item set:  frozenset(['rolls/buns', 'brown bread'])
    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['brown bread']) 0.0685461580984

    condition:  frozenset(['brown bread'])     conclusion:  frozenset(['rolls/buns']) 0.194357366771

frequent item set:  frozenset(['tropical fruit', 'rolls/buns'])
    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['rolls/buns']) 0.234496124031

    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['tropical fruit']) 0.133775566611

frequent item set:  frozenset(['pork', 'root vegetables'])
    condition:  frozenset(['pork'])     conclusion:  frozenset(['root vegetables']) 0.236331569665

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['pork']) 0.125

frequent item set:  frozenset(['other vegetables', 'butter milk'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['butter milk']) 0.0535995796111

    condition:  frozenset(['butter milk'])     conclusion:  frozenset(['other vegetables']) 0.370909090909

frequent item set:  frozenset(['yogurt', 'citrus fruit'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['citrus fruit']) 0.155247813411

    condition:  frozenset(['citrus fruit'])     conclusion:  frozenset(['yogurt']) 0.261670761671

frequent item set:  frozenset(['tropical fruit', 'soda'])
    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['soda']) 0.198643410853

    condition:  frozenset(['soda'])     conclusion:  frozenset(['tropical fruit']) 0.119533527697

frequent item set:  frozenset(['butter', 'other vegetables'])
    condition:  frozenset(['butter'])     conclusion:  frozenset(['other vegetables']) 0.361467889908

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['butter']) 0.1035207567

frequent item set:  frozenset(['whole milk', 'butter'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['butter']) 0.107839235973

    condition:  frozenset(['butter'])     conclusion:  frozenset(['whole milk']) 0.497247706422

frequent item set:  frozenset(['whole milk', 'ham'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['ham']) 0.0449661758854

    condition:  frozenset(['ham'])     conclusion:  frozenset(['whole milk']) 0.44140625

frequent item set:  frozenset(['yogurt', 'newspapers'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['newspapers']) 0.110058309038

    condition:  frozenset(['newspapers'])     conclusion:  frozenset(['yogurt']) 0.192356687898

frequent item set:  frozenset(['yogurt', 'butter'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['butter']) 0.104956268222

    condition:  frozenset(['butter'])     conclusion:  frozenset(['yogurt']) 0.264220183486

frequent item set:  frozenset(['dessert', 'other vegetables'])
    condition:  frozenset(['dessert'])     conclusion:  frozenset(['other vegetables']) 0.312328767123

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['dessert']) 0.0599054125066

frequent item set:  frozenset(['tropical fruit', 'other vegetables'])
    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['other vegetables']) 0.342054263566

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['tropical fruit']) 0.185496584341

frequent item set:  frozenset(['napkins', 'soda'])
    condition:  frozenset(['napkins'])     conclusion:  frozenset(['soda']) 0.229126213592

    condition:  frozenset(['soda'])     conclusion:  frozenset(['napkins']) 0.068804664723

frequent item set:  frozenset(['sausage', 'root vegetables'])
    condition:  frozenset(['sausage'])     conclusion:  frozenset(['root vegetables']) 0.159090909091

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['sausage']) 0.137126865672

frequent item set:  frozenset(['other vegetables', 'beef'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['beef']) 0.101944298476

    condition:  frozenset(['beef'])     conclusion:  frozenset(['other vegetables']) 0.375968992248

frequent item set:  frozenset(['yogurt', 'brown bread'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['brown bread']) 0.104227405248

    condition:  frozenset(['brown bread'])     conclusion:  frozenset(['yogurt']) 0.224137931034

frequent item set:  frozenset(['pip fruit', 'sausage'])
    condition:  frozenset(['pip fruit'])     conclusion:  frozenset(['sausage']) 0.14247311828

    condition:  frozenset(['sausage'])     conclusion:  frozenset(['pip fruit']) 0.114718614719

frequent item set:  frozenset(['citrus fruit', 'whipped/sour cream'])
    condition:  frozenset(['citrus fruit'])     conclusion:  frozenset(['whipped/sour cream']) 0.13144963145

    condition:  frozenset(['whipped/sour cream'])     conclusion:  frozenset(['citrus fruit']) 0.151773049645

frequent item set:  frozenset(['canned beer', 'soda'])
    condition:  frozenset(['canned beer'])     conclusion:  frozenset(['soda']) 0.178010471204

    condition:  frozenset(['soda'])     conclusion:  frozenset(['canned beer']) 0.0793002915452

frequent item set:  frozenset(['pip fruit', 'rolls/buns'])
    condition:  frozenset(['pip fruit'])     conclusion:  frozenset(['rolls/buns']) 0.184139784946

    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['pip fruit']) 0.0757324488668

frequent item set:  frozenset(['other vegetables', 'onions'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['onions']) 0.0735680504467

    condition:  frozenset(['onions'])     conclusion:  frozenset(['other vegetables']) 0.459016393443

frequent item set:  frozenset(['whole milk', 'sugar'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['sugar']) 0.0588937524871

    condition:  frozenset(['sugar'])     conclusion:  frozenset(['whole milk']) 0.444444444444

frequent item set:  frozenset(['bottled beer', 'soda'])
    condition:  frozenset(['bottled beer'])     conclusion:  frozenset(['soda']) 0.210858585859

    condition:  frozenset(['soda'])     conclusion:  frozenset(['bottled beer']) 0.0973760932945

frequent item set:  frozenset(['yogurt', 'pip fruit'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['pip fruit']) 0.129008746356

    condition:  frozenset(['pip fruit'])     conclusion:  frozenset(['yogurt']) 0.237903225806

frequent item set:  frozenset(['root vegetables', 'domestic eggs'])
    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['domestic eggs']) 0.131529850746

    condition:  frozenset(['domestic eggs'])     conclusion:  frozenset(['root vegetables']) 0.225961538462

frequent item set:  frozenset(['citrus fruit', 'rolls/buns'])
    condition:  frozenset(['citrus fruit'])     conclusion:  frozenset(['rolls/buns']) 0.202702702703

    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['citrus fruit']) 0.0912106135987

frequent item set:  frozenset(['rolls/buns', 'fruit/vegetable juice'])
    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['fruit/vegetable juice']) 0.0790491984522

    condition:  frozenset(['fruit/vegetable juice'])     conclusion:  frozenset(['rolls/buns']) 0.201125175809

frequent item set:  frozenset(['tropical fruit', 'curd'])
    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['curd']) 0.0978682170543

    condition:  frozenset(['curd'])     conclusion:  frozenset(['tropical fruit']) 0.192748091603

frequent item set:  frozenset(['yogurt', 'shopping bags'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['shopping bags']) 0.109329446064

    condition:  frozenset(['shopping bags'])     conclusion:  frozenset(['yogurt']) 0.15479876161

frequent item set:  frozenset(['white bread', 'other vegetables'])
    condition:  frozenset(['white bread'])     conclusion:  frozenset(['other vegetables']) 0.326086956522

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['white bread']) 0.0709406200736

frequent item set:  frozenset(['whole milk', 'salty snack'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['salty snack']) 0.0437723836053

    condition:  frozenset(['salty snack'])     conclusion:  frozenset(['whole milk']) 0.295698924731

frequent item set:  frozenset(['yogurt', 'whole milk', 'root vegetables'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['whole milk', 'root vegetables']) 0.104227405248

    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['yogurt', 'root vegetables']) 0.0569040986868

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['yogurt', 'whole milk']) 0.133395522388

    condition:  frozenset(['yogurt', 'whole milk'])     conclusion:  frozenset(['root vegetables']) 0.259528130672

    condition:  frozenset(['yogurt', 'root vegetables'])     conclusion:  frozenset(['whole milk']) 0.562992125984

    condition:  frozenset(['whole milk', 'root vegetables'])     conclusion:  frozenset(['yogurt']) 0.297297297297

frequent item set:  frozenset(['yogurt', 'other vegetables', 'whipped/sour cream'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['other vegetables', 'whipped/sour cream']) 0.0728862973761

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['yogurt', 'whipped/sour cream']) 0.0525486074619

    condition:  frozenset(['whipped/sour cream'])     conclusion:  frozenset(['yogurt', 'other vegetables']) 0.141843971631

    condition:  frozenset(['yogurt', 'other vegetables'])     conclusion:  frozenset(['whipped/sour cream']) 0.234192037471

    condition:  frozenset(['yogurt', 'whipped/sour cream'])     conclusion:  frozenset(['other vegetables']) 0.490196078431

    condition:  frozenset(['other vegetables', 'whipped/sour cream'])     conclusion:  frozenset(['yogurt']) 0.352112676056

frequent item set:  frozenset(['whole milk', 'tropical fruit', 'rolls/buns'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['tropical fruit', 'rolls/buns']) 0.0429765220852

    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['whole milk', 'rolls/buns']) 0.104651162791

    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['whole milk', 'tropical fruit']) 0.0597014925373

    condition:  frozenset(['whole milk', 'tropical fruit'])     conclusion:  frozenset(['rolls/buns']) 0.259615384615

    condition:  frozenset(['whole milk', 'rolls/buns'])     conclusion:  frozenset(['tropical fruit']) 0.193895870736

    condition:  frozenset(['tropical fruit', 'rolls/buns'])     conclusion:  frozenset(['whole milk']) 0.446280991736

frequent item set:  frozenset(['whole milk', 'other vegetables', 'soda'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['other vegetables', 'soda']) 0.0545165141265

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['whole milk', 'soda']) 0.0719915922228

    condition:  frozenset(['soda'])     conclusion:  frozenset(['whole milk', 'other vegetables']) 0.0798833819242

    condition:  frozenset(['whole milk', 'other vegetables'])     conclusion:  frozenset(['soda']) 0.186141304348

    condition:  frozenset(['whole milk', 'soda'])     conclusion:  frozenset(['other vegetables']) 0.347715736041

    condition:  frozenset(['other vegetables', 'soda'])     conclusion:  frozenset(['whole milk']) 0.425465838509

frequent item set:  frozenset(['whole milk', 'other vegetables', 'bottled water'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['other vegetables', 'bottled water']) 0.0421806605651

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['whole milk', 'bottled water']) 0.0557015239096

    condition:  frozenset(['bottled water'])     conclusion:  frozenset(['whole milk', 'other vegetables']) 0.097516099356

    condition:  frozenset(['whole milk', 'other vegetables'])     conclusion:  frozenset(['bottled water']) 0.14402173913

    condition:  frozenset(['whole milk', 'bottled water'])     conclusion:  frozenset(['other vegetables']) 0.313609467456

    condition:  frozenset(['other vegetables', 'bottled water'])     conclusion:  frozenset(['whole milk']) 0.434426229508

frequent item set:  frozenset(['whole milk', 'other vegetables', 'fruit/vegetable juice'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['other vegetables', 'fruit/vegetable juice']) 0.0409868682849

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['whole milk', 'fruit/vegetable juice']) 0.0541250656858

    condition:  frozenset(['fruit/vegetable juice'])     conclusion:  frozenset(['whole milk', 'other vegetables']) 0.144866385373

    condition:  frozenset(['whole milk', 'other vegetables'])     conclusion:  frozenset(['fruit/vegetable juice']) 0.139945652174

    condition:  frozenset(['whole milk', 'fruit/vegetable juice'])     conclusion:  frozenset(['other vegetables']) 0.393129770992

    condition:  frozenset(['other vegetables', 'fruit/vegetable juice'])     conclusion:  frozenset(['whole milk']) 0.497584541063

frequent item set:  frozenset(['whole milk', 'sausage', 'other vegetables'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['sausage', 'other vegetables']) 0.0397930760048

    condition:  frozenset(['sausage'])     conclusion:  frozenset(['whole milk', 'other vegetables']) 0.108225108225

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['whole milk', 'sausage']) 0.0525486074619

    condition:  frozenset(['whole milk', 'sausage'])     conclusion:  frozenset(['other vegetables']) 0.340136054422

    condition:  frozenset(['whole milk', 'other vegetables'])     conclusion:  frozenset(['sausage']) 0.135869565217

    condition:  frozenset(['sausage', 'other vegetables'])     conclusion:  frozenset(['whole milk']) 0.377358490566

frequent item set:  frozenset(['tropical fruit', 'whole milk', 'root vegetables'])
    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['whole milk', 'root vegetables']) 0.114341085271

    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['tropical fruit', 'root vegetables']) 0.0469558296856

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['tropical fruit', 'whole milk']) 0.110074626866

    condition:  frozenset(['tropical fruit', 'whole milk'])     conclusion:  frozenset(['root vegetables']) 0.283653846154

    condition:  frozenset(['tropical fruit', 'root vegetables'])     conclusion:  frozenset(['whole milk']) 0.570048309179

    condition:  frozenset(['whole milk', 'root vegetables'])     conclusion:  frozenset(['tropical fruit']) 0.245322245322

frequent item set:  frozenset(['citrus fruit', 'other vegetables', 'root vegetables'])
    condition:  frozenset(['citrus fruit'])     conclusion:  frozenset(['other vegetables', 'root vegetables']) 0.125307125307

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['citrus fruit', 'root vegetables']) 0.0535995796111

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['citrus fruit', 'other vegetables']) 0.0951492537313

    condition:  frozenset(['citrus fruit', 'other vegetables'])     conclusion:  frozenset(['root vegetables']) 0.359154929577

    condition:  frozenset(['citrus fruit', 'root vegetables'])     conclusion:  frozenset(['other vegetables']) 0.586206896552

    condition:  frozenset(['other vegetables', 'root vegetables'])     conclusion:  frozenset(['citrus fruit']) 0.218884120172

frequent item set:  frozenset(['whole milk', 'citrus fruit', 'yogurt'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['citrus fruit', 'yogurt']) 0.0401910067648

    condition:  frozenset(['citrus fruit'])     conclusion:  frozenset(['whole milk', 'yogurt']) 0.124078624079

    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['whole milk', 'citrus fruit']) 0.0736151603499

    condition:  frozenset(['whole milk', 'citrus fruit'])     conclusion:  frozenset(['yogurt']) 0.336666666667

    condition:  frozenset(['whole milk', 'yogurt'])     conclusion:  frozenset(['citrus fruit']) 0.183303085299

    condition:  frozenset(['citrus fruit', 'yogurt'])     conclusion:  frozenset(['whole milk']) 0.474178403756

frequent item set:  frozenset(['whole milk', 'other vegetables', 'rolls/buns'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['other vegetables', 'rolls/buns']) 0.0700358137684

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['whole milk', 'rolls/buns']) 0.0924855491329

    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['whole milk', 'other vegetables']) 0.0972913211719

    condition:  frozenset(['whole milk', 'other vegetables'])     conclusion:  frozenset(['rolls/buns']) 0.239130434783

    condition:  frozenset(['whole milk', 'rolls/buns'])     conclusion:  frozenset(['other vegetables']) 0.315978456014

    condition:  frozenset(['other vegetables', 'rolls/buns'])     conclusion:  frozenset(['whole milk']) 0.420047732697

frequent item set:  frozenset(['yogurt', 'tropical fruit', 'other vegetables'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['tropical fruit', 'other vegetables']) 0.0881924198251

    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['yogurt', 'other vegetables']) 0.117248062016

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['yogurt', 'tropical fruit']) 0.0635838150289

    condition:  frozenset(['yogurt', 'tropical fruit'])     conclusion:  frozenset(['other vegetables']) 0.420138888889

    condition:  frozenset(['yogurt', 'other vegetables'])     conclusion:  frozenset(['tropical fruit']) 0.28337236534

    condition:  frozenset(['tropical fruit', 'other vegetables'])     conclusion:  frozenset(['yogurt']) 0.342776203966

frequent item set:  frozenset(['whole milk', 'other vegetables', 'root vegetables'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['other vegetables', 'root vegetables']) 0.0907282132909

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['whole milk', 'root vegetables']) 0.119810825013

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['whole milk', 'other vegetables']) 0.212686567164

    condition:  frozenset(['whole milk', 'other vegetables'])     conclusion:  frozenset(['root vegetables']) 0.309782608696

    condition:  frozenset(['whole milk', 'root vegetables'])     conclusion:  frozenset(['other vegetables']) 0.474012474012

    condition:  frozenset(['other vegetables', 'root vegetables'])     conclusion:  frozenset(['whole milk']) 0.489270386266

frequent item set:  frozenset(['other vegetables', 'rolls/buns', 'root vegetables'])
    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['rolls/buns', 'root vegetables']) 0.0630583289543

    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['other vegetables', 'root vegetables']) 0.0663349917081

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['other vegetables', 'rolls/buns']) 0.111940298507

    condition:  frozenset(['other vegetables', 'rolls/buns'])     conclusion:  frozenset(['root vegetables']) 0.286396181384

    condition:  frozenset(['other vegetables', 'root vegetables'])     conclusion:  frozenset(['rolls/buns']) 0.257510729614

    condition:  frozenset(['rolls/buns', 'root vegetables'])     conclusion:  frozenset(['other vegetables']) 0.502092050209

frequent item set:  frozenset(['citrus fruit', 'whole milk', 'other vegetables'])
    condition:  frozenset(['citrus fruit'])     conclusion:  frozenset(['whole milk', 'other vegetables']) 0.157248157248

    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['citrus fruit', 'other vegetables']) 0.0509351372861

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['citrus fruit', 'whole milk']) 0.0672622175512

    condition:  frozenset(['citrus fruit', 'whole milk'])     conclusion:  frozenset(['other vegetables']) 0.426666666667

    condition:  frozenset(['citrus fruit', 'other vegetables'])     conclusion:  frozenset(['whole milk']) 0.450704225352

    condition:  frozenset(['whole milk', 'other vegetables'])     conclusion:  frozenset(['citrus fruit']) 0.173913043478

frequent item set:  frozenset(['whole milk', 'other vegetables', 'domestic eggs'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['other vegetables', 'domestic eggs']) 0.0481496219658

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['whole milk', 'domestic eggs']) 0.0635838150289

    condition:  frozenset(['domestic eggs'])     conclusion:  frozenset(['whole milk', 'other vegetables']) 0.19391025641

    condition:  frozenset(['whole milk', 'other vegetables'])     conclusion:  frozenset(['domestic eggs']) 0.164402173913

    condition:  frozenset(['whole milk', 'domestic eggs'])     conclusion:  frozenset(['other vegetables']) 0.410169491525

    condition:  frozenset(['other vegetables', 'domestic eggs'])     conclusion:  frozenset(['whole milk']) 0.552511415525

frequent item set:  frozenset(['whole milk', 'other vegetables', 'pastry'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['other vegetables', 'pastry']) 0.041384799045

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['whole milk', 'pastry']) 0.0546505517604

    condition:  frozenset(['pastry'])     conclusion:  frozenset(['whole milk', 'other vegetables']) 0.118857142857

    condition:  frozenset(['whole milk', 'other vegetables'])     conclusion:  frozenset(['pastry']) 0.141304347826

    condition:  frozenset(['whole milk', 'pastry'])     conclusion:  frozenset(['other vegetables']) 0.318042813456

    condition:  frozenset(['other vegetables', 'pastry'])     conclusion:  frozenset(['whole milk']) 0.468468468468

frequent item set:  frozenset(['whole milk', 'pip fruit', 'other vegetables'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['pip fruit', 'other vegetables']) 0.0529247910864

    condition:  frozenset(['pip fruit'])     conclusion:  frozenset(['whole milk', 'other vegetables']) 0.17876344086

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['whole milk', 'pip fruit']) 0.0698896479243

    condition:  frozenset(['whole milk', 'pip fruit'])     conclusion:  frozenset(['other vegetables']) 0.449324324324

    condition:  frozenset(['whole milk', 'other vegetables'])     conclusion:  frozenset(['pip fruit']) 0.180706521739

    condition:  frozenset(['pip fruit', 'other vegetables'])     conclusion:  frozenset(['whole milk']) 0.517509727626

frequent item set:  frozenset(['whole milk', 'rolls/buns', 'root vegetables'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['rolls/buns', 'root vegetables']) 0.049741345006

    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['whole milk', 'root vegetables']) 0.069098949696

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['whole milk', 'rolls/buns']) 0.116604477612

    condition:  frozenset(['whole milk', 'rolls/buns'])     conclusion:  frozenset(['root vegetables']) 0.224416517056

    condition:  frozenset(['whole milk', 'root vegetables'])     conclusion:  frozenset(['rolls/buns']) 0.259875259875

    condition:  frozenset(['rolls/buns', 'root vegetables'])     conclusion:  frozenset(['whole milk']) 0.523012552301

frequent item set:  frozenset(['tropical fruit', 'other vegetables', 'root vegetables'])
    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['other vegetables', 'root vegetables']) 0.117248062016

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['tropical fruit', 'root vegetables']) 0.0635838150289

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['tropical fruit', 'other vegetables']) 0.112873134328

    condition:  frozenset(['tropical fruit', 'other vegetables'])     conclusion:  frozenset(['root vegetables']) 0.342776203966

    condition:  frozenset(['tropical fruit', 'root vegetables'])     conclusion:  frozenset(['other vegetables']) 0.584541062802

    condition:  frozenset(['other vegetables', 'root vegetables'])     conclusion:  frozenset(['tropical fruit']) 0.259656652361

frequent item set:  frozenset(['yogurt', 'other vegetables', 'rolls/buns'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['other vegetables', 'rolls/buns']) 0.082361516035

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['yogurt', 'rolls/buns']) 0.0593799264319

    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['yogurt', 'other vegetables']) 0.0624654505252

    condition:  frozenset(['yogurt', 'other vegetables'])     conclusion:  frozenset(['rolls/buns']) 0.264637002342

    condition:  frozenset(['yogurt', 'rolls/buns'])     conclusion:  frozenset(['other vegetables']) 0.334319526627

    condition:  frozenset(['other vegetables', 'rolls/buns'])     conclusion:  frozenset(['yogurt']) 0.26968973747

frequent item set:  frozenset(['whole milk', 'butter', 'other vegetables'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['butter', 'other vegetables']) 0.0449661758854

    condition:  frozenset(['butter'])     conclusion:  frozenset(['whole milk', 'other vegetables']) 0.207339449541

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['whole milk', 'butter']) 0.0593799264319

    condition:  frozenset(['whole milk', 'butter'])     conclusion:  frozenset(['other vegetables']) 0.416974169742

    condition:  frozenset(['whole milk', 'other vegetables'])     conclusion:  frozenset(['butter']) 0.153532608696

    condition:  frozenset(['butter', 'other vegetables'])     conclusion:  frozenset(['whole milk']) 0.573604060914

frequent item set:  frozenset(['yogurt', 'whole milk', 'soda'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['whole milk', 'soda']) 0.0750728862974

    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['yogurt', 'soda']) 0.0409868682849

    condition:  frozenset(['soda'])     conclusion:  frozenset(['yogurt', 'whole milk']) 0.0600583090379

    condition:  frozenset(['yogurt', 'whole milk'])     conclusion:  frozenset(['soda']) 0.186932849365

    condition:  frozenset(['yogurt', 'soda'])     conclusion:  frozenset(['whole milk']) 0.382899628253

    condition:  frozenset(['whole milk', 'soda'])     conclusion:  frozenset(['yogurt']) 0.261421319797

frequent item set:  frozenset(['whole milk', 'tropical fruit', 'yogurt'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['tropical fruit', 'yogurt']) 0.0592916832471

    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['whole milk', 'yogurt']) 0.144379844961

    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['whole milk', 'tropical fruit']) 0.10860058309

    condition:  frozenset(['whole milk', 'tropical fruit'])     conclusion:  frozenset(['yogurt']) 0.358173076923

    condition:  frozenset(['whole milk', 'yogurt'])     conclusion:  frozenset(['tropical fruit']) 0.270417422868

    condition:  frozenset(['tropical fruit', 'yogurt'])     conclusion:  frozenset(['whole milk']) 0.517361111111

frequent item set:  frozenset(['whole milk', 'tropical fruit', 'other vegetables'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['tropical fruit', 'other vegetables']) 0.066852367688

    condition:  frozenset(['tropical fruit'])     conclusion:  frozenset(['whole milk', 'other vegetables']) 0.162790697674

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['whole milk', 'tropical fruit']) 0.088281660536

    condition:  frozenset(['whole milk', 'tropical fruit'])     conclusion:  frozenset(['other vegetables']) 0.403846153846

    condition:  frozenset(['whole milk', 'other vegetables'])     conclusion:  frozenset(['tropical fruit']) 0.228260869565

    condition:  frozenset(['tropical fruit', 'other vegetables'])     conclusion:  frozenset(['whole milk']) 0.475920679887

frequent item set:  frozenset(['yogurt', 'whole milk', 'whipped/sour cream'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['whole milk', 'whipped/sour cream']) 0.0779883381924

    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['yogurt', 'whipped/sour cream']) 0.0425785913251

    condition:  frozenset(['whipped/sour cream'])     conclusion:  frozenset(['yogurt', 'whole milk']) 0.151773049645

    condition:  frozenset(['yogurt', 'whole milk'])     conclusion:  frozenset(['whipped/sour cream']) 0.194192377495

    condition:  frozenset(['yogurt', 'whipped/sour cream'])     conclusion:  frozenset(['whole milk']) 0.524509803922

    condition:  frozenset(['whole milk', 'whipped/sour cream'])     conclusion:  frozenset(['yogurt']) 0.337539432177

frequent item set:  frozenset(['yogurt', 'other vegetables', 'root vegetables'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['other vegetables', 'root vegetables']) 0.0925655976676

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['yogurt', 'root vegetables']) 0.0667367314766

    condition:  frozenset(['root vegetables'])     conclusion:  frozenset(['yogurt', 'other vegetables']) 0.118470149254

    condition:  frozenset(['yogurt', 'other vegetables'])     conclusion:  frozenset(['root vegetables']) 0.297423887588

    condition:  frozenset(['yogurt', 'root vegetables'])     conclusion:  frozenset(['other vegetables']) 0.5

    condition:  frozenset(['other vegetables', 'root vegetables'])     conclusion:  frozenset(['yogurt']) 0.272532188841

frequent item set:  frozenset(['whole milk', 'pork', 'other vegetables'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['pork', 'other vegetables']) 0.0397930760048

    condition:  frozenset(['pork'])     conclusion:  frozenset(['whole milk', 'other vegetables']) 0.176366843034

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['whole milk', 'pork']) 0.0525486074619

    condition:  frozenset(['whole milk', 'pork'])     conclusion:  frozenset(['other vegetables']) 0.45871559633

    condition:  frozenset(['whole milk', 'other vegetables'])     conclusion:  frozenset(['pork']) 0.135869565217

    condition:  frozenset(['pork', 'other vegetables'])     conclusion:  frozenset(['whole milk']) 0.469483568075

frequent item set:  frozenset(['yogurt', 'whole milk', 'other vegetables'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['whole milk', 'other vegetables']) 0.159620991254

    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['yogurt', 'other vegetables']) 0.0871468364505

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['yogurt', 'whole milk']) 0.115081450342

    condition:  frozenset(['yogurt', 'whole milk'])     conclusion:  frozenset(['other vegetables']) 0.397459165154

    condition:  frozenset(['yogurt', 'other vegetables'])     conclusion:  frozenset(['whole milk']) 0.512880562061

    condition:  frozenset(['whole milk', 'other vegetables'])     conclusion:  frozenset(['yogurt']) 0.297554347826

frequent item set:  frozenset(['whole milk', 'other vegetables', 'whipped/sour cream'])
    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['other vegetables', 'whipped/sour cream']) 0.0573020294469

    condition:  frozenset(['other vegetables'])     conclusion:  frozenset(['whole milk', 'whipped/sour cream']) 0.0756699947451

    condition:  frozenset(['whipped/sour cream'])     conclusion:  frozenset(['whole milk', 'other vegetables']) 0.204255319149

    condition:  frozenset(['whole milk', 'other vegetables'])     conclusion:  frozenset(['whipped/sour cream']) 0.195652173913

    condition:  frozenset(['whole milk', 'whipped/sour cream'])     conclusion:  frozenset(['other vegetables']) 0.454258675079

    condition:  frozenset(['other vegetables', 'whipped/sour cream'])     conclusion:  frozenset(['whole milk']) 0.507042253521

frequent item set:  frozenset(['yogurt', 'whole milk', 'rolls/buns'])
    condition:  frozenset(['yogurt'])     conclusion:  frozenset(['whole milk', 'rolls/buns']) 0.111516034985

    condition:  frozenset(['whole milk'])     conclusion:  frozenset(['yogurt', 'rolls/buns']) 0.0608834062873

    condition:  frozenset(['rolls/buns'])     conclusion:  frozenset(['yogurt', 'whole milk']) 0.0845771144279

    condition:  frozenset(['yogurt', 'whole milk'])     conclusion:  frozenset(['rolls/buns']) 0.277676950998

    condition:  frozenset(['yogurt', 'rolls/buns'])     conclusion:  frozenset(['whole milk']) 0.452662721893

    condition:  frozenset(['whole milk', 'rolls/buns'])     conclusion:  frozenset(['yogurt']) 0.274685816876

In [20]:
## 输出前10条关联规则
for index in range(10):
    print association_rules[index]
[[frozenset(['whipped/sour cream']), frozenset(['whole milk'])], 0.44964539007092197]
[[frozenset(['frozen vegetables']), frozenset(['whole milk'])], 0.4249471458773784]
[[frozenset(['curd']), frozenset(['whole milk'])], 0.4904580152671756]
[[frozenset(['root vegetables']), frozenset(['other vegetables'])], 0.43470149253731344]
[[frozenset(['hamburger meat']), frozenset(['whole milk'])], 0.4434250764525994]
[[frozenset(['beef']), frozenset(['whole milk'])], 0.4050387596899225]
[[frozenset(['hamburger meat']), frozenset(['other vegetables'])], 0.41590214067278286]
[[frozenset(['butter milk']), frozenset(['whole milk'])], 0.41454545454545455]
[[frozenset(['domestic eggs']), frozenset(['whole milk'])], 0.47275641025641024]
[[frozenset(['chicken']), frozenset(['other vegetables'])], 0.41706161137440756]

频繁模式树增长算法

首先,我们构造创建FP树所需的类:NodeFPTree

In [21]:
'''
Node类,包含以下变量:

name: 当前节点代表的频繁项
count:当前节点出现的频数
link:FP树的其他路径中代表相同频繁项的节点
parent:当前节点的父节点
children:当前节点的子节点

包含以下方法:

__init__(): 构造方法
increment():增加当前节点代表的频繁项的支持度
display():可视化节点,以及对应的频繁项支持度

'''

class Node:
    
    '''
    输入参数:name:节点代表的频繁项
            count:频繁项的支持度
            parent:节点的父节点
    '''
    
    def __init__(self, name, count, parent):
        self.name = name
        self.count = count
        self.link = None
        self.parent = parent
        self.children = {}
    '''
    输入参数: num:整数,代表频繁项支持度增加的数值
    '''
    def increment(self, num):
        self.count += num
    '''
    输入参数:lens:节点的初始支持度
    '''
    def display(self, lens = 1):
        print '   '*lens, self.name, ' ', self.count
        for child in self.children.values():
            child.display(lens + 1)
In [22]:
'''
FPTree类,包含以下变量:
flag:表示构建FPTree还是条件FPTree,取决于输入数据
root: FP树的根节点
data:FP树代表的数据集
data_type:数据集存储的原始类型(字典或者嵌套列表)
min_support:最小支持度(绝对)
frequent:频繁1项集集合
headerTable:FP树对应的频繁项表

包含以下方法:

__init__(): 构造方法
find_frequent_items():根据数据集生成频繁1项集集合
build_tree():将数据集中的每条数据记录插入FP树种,也就是建树过程
get_tree():返回树的根节点
get_frequent_items():返回频繁1项集集合
get_headertable():返回频繁项表
get_data():返回数据集
show():可视化FP树的结构

'''

class FPTree:
       
    '''
    输入参数:transactions:数据集
            min_support:最小支持度
            root_value:根节点代表的频繁项
            count:根节点代表的频繁项的支持度
    '''
    def __init__(self, transactions, min_support, root_value, count, flag):
        
        self.flag = flag
        self.root = Node(root_value, count, None)   
        self.data = transactions
        self.data_type = type(self.data) 
        self.min_support = min_support      
       
        self.frequent = self.find_frequent_items()
            
        self.headerTable = {v:[self.frequent[v], None] for v in self.frequent}
      
     
    '''
    返回参数:以字典格式存储的频繁1项集集合
    '''
    
    def find_frequent_items(self):
    
        from collections import defaultdict
        freq1 = defaultdict(int)

        #统计列表中各个元素的出现频次
        if self.data_type == list and self.flag == 'fptree':
            
            flatten_list = [element for item in self.data for element in item]
            for value in flatten_list:
                freq1[frozenset([value])] += 1
        # 条件FP树
        elif self.data_type == dict and self.flag == 'cfptree':
            for item in self.data:
                for element in item:
                    
                    if type(element) == frozenset:
                        freq1[element] += self.data[item]
                    else:
                        freq1[frozenset([element])] += self.data[item]
    
        # 过滤掉非频繁项
        return {v:freq1[v] for v in freq1 if freq1[v] >= self.min_support}
    
    def build_tree(self):
    
        root = Node('null', 1, None)
        sorted_headertable = [v[0] for v in sorted(self.frequent.items(), key=lambda kv: (-kv[1], list(kv[0])[0]))]
        # 将业务数据库中的每条记录插入树中,更新频繁项表
        for record in self.data:
            
            # 找到业务数据纪录中的频繁项
            
            sorted_items = [item for item in sorted_headertable if list(item)[0] in record]
            #print u'将排序后的频繁项集放入FP树中: '
            #print sorted_items
            #print ''
            node = self.root        
            while len(sorted_items) > 0:
            
                first_value = sorted_items[0]
                
                #print u' 开始插入节点 ', first_value 
                if  first_value in node.children:
                    #print u'    当前节点的子节点中包含节点 ', first_value
                    if self.data_type == list:             
                        node.children[first_value].increment(1)
                    elif self.data_type == dict:
                        node.children[first_value].increment(self.data[record])
    
                else:
                    # 创建新的子节点 
                    #print u'    创建新节点 ', first_value
                    if self.data_type == list:             
                        node.children[first_value] = Node(list(first_value)[0], 1, node)
                    elif self.data_type == dict:
                        node.children[first_value] = Node(first_value, self.data[record], node)
            
                    # 更新频繁项表
                    if self.headerTable[first_value][1] == None:
                        #print u'    在频繁项表中,添加对应链表的第一个节点', first_value
                        self.headerTable[first_value][1] = node.children[first_value]
                        
                    else:
                        #print u'    添加到频繁项表对应链表的末尾'
                        currentNode = self.headerTable[first_value][1]
               
                        # 遍历连表,确保在表的尾部插入新的节点指针
                        while currentNode.link != None:
                            
                            currentNode = currentNode.link
                        currentNode.link = node.children[first_value]
                #print '***********'
                sorted_items.pop(0)
                node = node.children[first_value]
            #print ''

    def get_tree(self):
        return self.root
    def get_frequent_items(self):
        return self.frequent
    def get_headertable(self):
        return self.headerTable
    def get_data(self):
        return self.data
    
    def show(self, depth = 1):
        print ' '*depth, self.root.name, ' ', self.root.count
        for node in self.root.children.values():
            node.display(depth + 1)     
In [23]:
#最小支持度
min_support = 100

#创建实例
fptree = FPTree(data, min_support, 'null', 1, 'fptree')

然后,我们可以返回数据集的频繁1项集集合。

In [25]:
freq1 = fptree.get_frequent_items()

## 输出频繁1项集的前10个元素
freq1_list = freq1.items()
for index in range(10):
    print freq1_list[index]
(frozenset(['beef']), 516)
(frozenset(['rolls/buns']), 1809)
(frozenset(['cling film/bags']), 112)
(frozenset(['spread cheese']), 110)
(frozenset(['liquor']), 109)
(frozenset(['flower (seeds)']), 102)
(frozenset(['white bread']), 414)
(frozenset(['dessert']), 365)
(frozenset(['pork']), 567)
(frozenset(['whipped/sour cream']), 705)
In [26]:
fptree.build_tree()

FP树创建好之后,我们构造mine_tree()函数,来实现FP树的挖掘过程。

  • find_prefix()函数返回在FP书中以当前节点为后缀的所有路径,构造条件模式库
  • mine_tree()函数递归挖掘以条件模式库为基础构造的条件FP树
In [27]:
'''
输入参数:Node节点
返回参数:以输入节点为后缀的条件模式库
'''

def find_prefix(node):
  
    #条件模式库
    cpb = {}
    suffix_list = []

    # 判断条件,是否已经达到链表的尾部
    while node != None:
        suffix_list.append(node)
        node = node.link
   
    for item in suffix_list:

        path = []
        num = item.count
        # 判断条件,是否已经回溯到树的顶点
        while item.parent != None:
            path.append(item.name)
            item = item.parent
      
        # 除去当前节点的部分作为条件模式基,并以当前节点的支持度作为条件模式库的支持度
        cpb[frozenset(path[1:])] = num
        
    return cpb     
In [28]:
'''
输入参数:frequent_items:数据集的频繁1项集集合
        headerTable:数据集的频繁项表
        frequent:每次迭代过程生成的频繁项
        item_list:存储所有迭代过程生成的的频繁项集
        
'''
def mine_tree(frequent_items, headerTable, min_support, frequent, item_list):
    
    # 频繁项表中的元素降序排列
    candidates = [v[0] for v in sorted(frequent_items.items(), key=lambda kv: (-kv[1], list(kv[0])[0]))]
    #print candidates
    for item in candidates[::-1]:
        
        #从以下的元素开始
        #print 'from the node: ', item
        # 针对每个条件模式库,生成频繁项集
        freq_set = frequent.copy() 
        freq_set.add(item)
        item_list.append(freq_set)
        
        # 生成条件模式库
        cpbs = find_prefix(headerTable[item][1])
       
        #print 'its cpbs: ', cpbs
        #创建条件FP树
        cTree = FPTree(cpbs, min_support, 'root', 1, 'cfptree')
        
        cTree.build_tree()
       
        #print '-----headerTable: ', cTree.get_headertable()
        #判断条件:频繁项表为空
        if len(cTree.get_headertable()) != 0:
            #print 'condtional tree for: ', freq_set
            #cTree.show(1)    
            mine_tree(cTree.get_frequent_items(), cTree.get_headertable(), min_support, freq_set, item_list)

根据原始数据集构建FP树之后,可以得到FP树的节点root_node,频繁项表headertable,以及频繁1项集集合freq_items

将这些变量作为输入参数,带入到函数mine_tree()函数中,生成的频繁项集翻入到列表变量frequent_item中。

In [30]:
frequent_item = []
frequent = set()

root_node = fptree.get_tree()
headertable = fptree.get_headertable()
freq_items = fptree.get_frequent_items()
mine_tree(freq_items, headertable, min_support, frequent, frequent_item)

打印requent_item的内容。从中我们可以发现,商场售卖的受客户欢迎的商品,比如yorgurt,soda等;当然,我们还发现顾客通常会一起购买whole milk和yourgurt等。更多的信息,可以继续分析frequent_item的内容。

In [117]:
frequent_item 
Out[117]:
[{frozenset({'roll products'})},
 {frozenset({'condensed milk'})},
 {frozenset({'flower (seeds)'})},
 {frozenset({'dish cleaner'})},
 {frozenset({'salt'})},
 {frozenset({'frozen dessert'})},
 {frozenset({'canned vegetables'})},
 {frozenset({'liquor'})},
 {frozenset({'spread cheese'})},
 {frozenset({'cling film/bags'})},
 {frozenset({'frozen fish'})},
 {frozenset({'mustard'})},
 {frozenset({'packaged fruit/vegetables'})},
 {frozenset({'cake bar'})},
 {frozenset({'seasonal products'})},
 {frozenset({'pasta'})},
 {frozenset({'canned fish'})},
 {frozenset({'herbs'})},
 {frozenset({'processed cheese'})},
 {frozenset({'soft cheese'})},
 {frozenset({'potted plants'})},
 {frozenset({'flour'})},
 {frozenset({'dishes'})},
 {frozenset({'semi-finished bread'})},
 {frozenset({'baking powder'})},
 {frozenset({'pickled vegetables'})},
 {frozenset({'white wine'})},
 {frozenset({'red/blush wine'})},
 {frozenset({'detergent'})},
 {frozenset({'chewing gum'})},
 {frozenset({'grapes'})},
 {frozenset({'cat food'})},
 {frozenset({'sliced cheese'})},
 {frozenset({'sliced cheese'}), frozenset({'whole milk'})},
 {frozenset({'hard cheese'})},
 {frozenset({'ice cream'})},
 {frozenset({'meat'})},
 {frozenset({'ham'})},
 {frozenset({'ham'}), frozenset({'whole milk'})},
 {frozenset({'beverages'})},
 {frozenset({'specialty bar'})},
 {frozenset({'butter milk'})},
 {frozenset({'butter milk'}), frozenset({'other vegetables'})},
 {frozenset({'butter milk'}), frozenset({'whole milk'})},
 {frozenset({'oil'})},
 {frozenset({'oil'}), frozenset({'whole milk'})},
 {frozenset({'misc. beverages'})},
 {frozenset({'frozen meals'})},
 {frozenset({'candy'})},
 {frozenset({'specialty chocolate'})},
 {frozenset({'onions'})},
 {frozenset({'onions'}), frozenset({'whole milk'})},
 {frozenset({'onions'}), frozenset({'other vegetables'})},
 {frozenset({'hygiene articles'})},
 {frozenset({'hygiene articles'}), frozenset({'whole milk'})},
 {frozenset({'hamburger meat'})},
 {frozenset({'other vegetables'}), frozenset({'hamburger meat'})},
 {frozenset({'whole milk'}), frozenset({'hamburger meat'})},
 {frozenset({'berries'})},
 {frozenset({'other vegetables'}), frozenset({'berries'})},
 {frozenset({'berries'}), frozenset({'yogurt'})},
 {frozenset({'berries'}), frozenset({'whole milk'})},
 {frozenset({'UHT-milk'})},
 {frozenset({'sugar'})},
 {frozenset({'sugar'}), frozenset({'other vegetables'})},
 {frozenset({'sugar'}), frozenset({'whole milk'})},
 {frozenset({'dessert'})},
 {frozenset({'other vegetables'}), frozenset({'dessert'})},
 {frozenset({'whole milk'}), frozenset({'dessert'})},
 {frozenset({'long life bakery product'})},
 {frozenset({'other vegetables'}), frozenset({'long life bakery product'})},
 {frozenset({'whole milk'}), frozenset({'long life bakery product'})},
 {frozenset({'salty snack'})},
 {frozenset({'other vegetables'}), frozenset({'salty snack'})},
 {frozenset({'whole milk'}), frozenset({'salty snack'})},
 {frozenset({'waffles'})},
 {frozenset({'waffles'}), frozenset({'whole milk'})},
 {frozenset({'cream cheese'})},
 {frozenset({'yogurt'}), frozenset({'cream cheese'})},
 {frozenset({'other vegetables'}), frozenset({'cream cheese'})},
 {frozenset({'whole milk'}), frozenset({'cream cheese'})},
 {frozenset({'white bread'})},
 {frozenset({'soda'}), frozenset({'white bread'})},
 {frozenset({'other vegetables'}), frozenset({'white bread'})},
 {frozenset({'white bread'}), frozenset({'whole milk'})},
 {frozenset({'chicken'})},
 {frozenset({'root vegetables'}), frozenset({'chicken'})},
 {frozenset({'chicken'}), frozenset({'whole milk'})},
 {frozenset({'other vegetables'}), frozenset({'chicken'})},
 {frozenset({'frozen vegetables'})},
 {frozenset({'frozen vegetables'}), frozenset({'rolls/buns'})},
 {frozenset({'root vegetables'}), frozenset({'frozen vegetables'})},
 {frozenset({'frozen vegetables'}), frozenset({'yogurt'})},
 {frozenset({'other vegetables'}), frozenset({'frozen vegetables'})},
 {frozenset({'frozen vegetables'}), frozenset({'whole milk'})},
 {frozenset({'chocolate'})},
 {frozenset({'chocolate'}), frozenset({'rolls/buns'})},
 {frozenset({'chocolate'}), frozenset({'other vegetables'})},
 {frozenset({'chocolate'}), frozenset({'soda'})},
 {frozenset({'chocolate'}), frozenset({'whole milk'})},
 {frozenset({'napkins'})},
 {frozenset({'napkins'}), frozenset({'rolls/buns'})},
 {frozenset({'soda'}), frozenset({'napkins'})},
 {frozenset({'napkins'}), frozenset({'yogurt'})},
 {frozenset({'other vegetables'}), frozenset({'napkins'})},
 {frozenset({'napkins'}), frozenset({'whole milk'})},
 {frozenset({'beef'})},
 {frozenset({'beef'}), frozenset({'yogurt'})},
 {frozenset({'beef'}), frozenset({'rolls/buns'})},
 {frozenset({'beef'}), frozenset({'root vegetables'})},
 {frozenset({'beef'}), frozenset({'other vegetables'})},
 {frozenset({'beef'}), frozenset({'whole milk'})},
 {frozenset({'curd'})},
 {frozenset({'curd'}), frozenset({'tropical fruit'})},
 {frozenset({'whipped/sour cream'}), frozenset({'curd'})},
 {frozenset({'root vegetables'}), frozenset({'curd'})},
 {frozenset({'other vegetables'}), frozenset({'curd'})},
 {frozenset({'curd'}), frozenset({'yogurt'})},
 {frozenset({'curd'}), frozenset({'whole milk'})},
 {frozenset({'butter'})},
 {frozenset({'whipped/sour cream'}), frozenset({'butter'})},
 {frozenset({'root vegetables'}), frozenset({'butter'})},
 {frozenset({'rolls/buns'}), frozenset({'butter'})},
 {frozenset({'yogurt'}), frozenset({'butter'})},
 {frozenset({'other vegetables'}), frozenset({'butter'})},
 {frozenset({'other vegetables'}),
  frozenset({'whole milk'}),
  frozenset({'butter'})},
 {frozenset({'whole milk'}), frozenset({'butter'})},
 {frozenset({'pork'})},
 {frozenset({'pork'}), frozenset({'rolls/buns'})},
 {frozenset({'soda'}), frozenset({'pork'})},
 {frozenset({'root vegetables'}), frozenset({'pork'})},
 {frozenset({'other vegetables'}), frozenset({'pork'})},
 {frozenset({'pork'}),
  frozenset({'other vegetables'}),
  frozenset({'whole milk'})},
 {frozenset({'pork'}), frozenset({'whole milk'})},
 {frozenset({'coffee'})},
 {frozenset({'coffee'}), frozenset({'rolls/buns'})},
 {frozenset({'other vegetables'}), frozenset({'coffee'})},
 {frozenset({'coffee'}), frozenset({'whole milk'})},
 {frozenset({'margarine'})},
 {frozenset({'soda'}), frozenset({'margarine'})},
 {frozenset({'bottled water'}), frozenset({'margarine'})},
 {frozenset({'root vegetables'}), frozenset({'margarine'})},
 {frozenset({'yogurt'}), frozenset({'margarine'})},
 {frozenset({'rolls/buns'}), frozenset({'margarine'})},
 {frozenset({'other vegetables'}), frozenset({'margarine'})},
 {frozenset({'whole milk'}), frozenset({'margarine'})},
 {frozenset({'frankfurter'})},
 {frozenset({'frankfurter'}), frozenset({'root vegetables'})},
 {frozenset({'frankfurter'}), frozenset({'yogurt'})},
 {frozenset({'frankfurter'}), frozenset({'soda'})},
 {frozenset({'frankfurter'}), frozenset({'other vegetables'})},
 {frozenset({'frankfurter'}), frozenset({'rolls/buns'})},
 {frozenset({'frankfurter'}), frozenset({'whole milk'})},
 {frozenset({'domestic eggs'})},
 {frozenset({'domestic eggs'}), frozenset({'citrus fruit'})},
 {frozenset({'domestic eggs'}), frozenset({'tropical fruit'})},
 {frozenset({'domestic eggs'}), frozenset({'soda'})},
 {frozenset({'domestic eggs'}), frozenset({'yogurt'})},
 {frozenset({'domestic eggs'}), frozenset({'root vegetables'})},
 {frozenset({'domestic eggs'}), frozenset({'rolls/buns'})},
 {frozenset({'domestic eggs'}), frozenset({'other vegetables'})},
 {frozenset({'domestic eggs'}),
  frozenset({'other vegetables'}),
  frozenset({'whole milk'})},
 {frozenset({'domestic eggs'}), frozenset({'whole milk'})},
 {frozenset({'brown bread'})},
 {frozenset({'root vegetables'}), frozenset({'brown bread'})},
 {frozenset({'brown bread'}), frozenset({'tropical fruit'})},
 {frozenset({'brown bread'}), frozenset({'sausage'})},
 {frozenset({'soda'}), frozenset({'brown bread'})},
 {frozenset({'brown bread'}), frozenset({'rolls/buns'})},
 {frozenset({'brown bread'}), frozenset({'yogurt'})},
 {frozenset({'brown bread'}), frozenset({'other vegetables'})},
 {frozenset({'brown bread'}), frozenset({'whole milk'})},
 {frozenset({'whipped/sour cream'})},
 {frozenset({'whipped/sour cream'}), frozenset({'citrus fruit'})},
 {frozenset({'whipped/sour cream'}), frozenset({'soda'})},
 {frozenset({'whipped/sour cream'}), frozenset({'tropical fruit'})},
 {frozenset({'whipped/sour cream'}), frozenset({'rolls/buns'})},
 {frozenset({'whipped/sour cream'}), frozenset({'root vegetables'})},
 {frozenset({'whipped/sour cream'}), frozenset({'yogurt'})},
 {frozenset({'whipped/sour cream'}),
  frozenset({'other vegetables'}),
  frozenset({'yogurt'})},
 {frozenset({'whipped/sour cream'}),
  frozenset({'whole milk'}),
  frozenset({'yogurt'})},
 {frozenset({'whipped/sour cream'}), frozenset({'other vegetables'})},
 {frozenset({'whipped/sour cream'}),
  frozenset({'other vegetables'}),
  frozenset({'whole milk'})},
 {frozenset({'whipped/sour cream'}), frozenset({'whole milk'})},
 {frozenset({'fruit/vegetable juice'})},
 {frozenset({'fruit/vegetable juice'}), frozenset({'citrus fruit'})},
 {frozenset({'fruit/vegetable juice'}), frozenset({'shopping bags'})},
 {frozenset({'fruit/vegetable juice'}), frozenset({'root vegetables'})},
 {frozenset({'fruit/vegetable juice'}), frozenset({'tropical fruit'})},
 {frozenset({'fruit/vegetable juice'}), frozenset({'bottled water'})},
 {frozenset({'fruit/vegetable juice'}), frozenset({'rolls/buns'})},
 {frozenset({'fruit/vegetable juice'}), frozenset({'soda'})},
 {frozenset({'fruit/vegetable juice'}), frozenset({'yogurt'})},
 {frozenset({'fruit/vegetable juice'}), frozenset({'other vegetables'})},
 {frozenset({'fruit/vegetable juice'}),
  frozenset({'other vegetables'}),
  frozenset({'whole milk'})},
 {frozenset({'fruit/vegetable juice'}), frozenset({'whole milk'})},
 {frozenset({'pip fruit'})},
 {frozenset({'bottled water'}), frozenset({'pip fruit'})},
 {frozenset({'pastry'}), frozenset({'pip fruit'})},
 {frozenset({'sausage'}), frozenset({'pip fruit'})},
 {frozenset({'soda'}), frozenset({'pip fruit'})},
 {frozenset({'citrus fruit'}), frozenset({'pip fruit'})},
 {frozenset({'rolls/buns'}), frozenset({'pip fruit'})},
 {frozenset({'root vegetables'}), frozenset({'pip fruit'})},
 {frozenset({'yogurt'}), frozenset({'pip fruit'})},
 {frozenset({'tropical fruit'}), frozenset({'pip fruit'})},
 {frozenset({'other vegetables'}), frozenset({'pip fruit'})},
 {frozenset({'other vegetables'}),
  frozenset({'whole milk'}),
  frozenset({'pip fruit'})},
 {frozenset({'whole milk'}), frozenset({'pip fruit'})},
 {frozenset({'canned beer'})},
 {frozenset({'rolls/buns'}), frozenset({'canned beer'})},
 {frozenset({'shopping bags'}), frozenset({'canned beer'})},
 {frozenset({'soda'}), frozenset({'canned beer'})},
 {frozenset({'newspapers'})},
 {frozenset({'bottled water'}), frozenset({'newspapers'})},
 {frozenset({'root vegetables'}), frozenset({'newspapers'})},
 {frozenset({'newspapers'}), frozenset({'tropical fruit'})},
 {frozenset({'soda'}), frozenset({'newspapers'})},
 {frozenset({'newspapers'}), frozenset({'yogurt'})},
 {frozenset({'other vegetables'}), frozenset({'newspapers'})},
 {frozenset({'newspapers'}), frozenset({'rolls/buns'})},
 {frozenset({'newspapers'}), frozenset({'whole milk'})},
 {frozenset({'bottled beer'})},
 {frozenset({'bottled beer'}), frozenset({'rolls/buns'})},
 {frozenset({'bottled beer'}), frozenset({'bottled water'})},
 {frozenset({'bottled beer'}), frozenset({'other vegetables'})},
 {frozenset({'bottled beer'}), frozenset({'soda'})},
 {frozenset({'bottled beer'}), frozenset({'whole milk'})},
 {frozenset({'citrus fruit'})},
 {frozenset({'sausage'}), frozenset({'citrus fruit'})},
 {frozenset({'soda'}), frozenset({'citrus fruit'})},
 {frozenset({'bottled water'}), frozenset({'citrus fruit'})},
 {frozenset({'rolls/buns'}), frozenset({'citrus fruit'})},
 {frozenset({'root vegetables'}), frozenset({'citrus fruit'})},
 {frozenset({'root vegetables'}),
  frozenset({'other vegetables'}),
  frozenset({'citrus fruit'})},
 {frozenset({'tropical fruit'}), frozenset({'citrus fruit'})},
 {frozenset({'yogurt'}), frozenset({'citrus fruit'})},
 {frozenset({'whole milk'}),
  frozenset({'citrus fruit'}),
  frozenset({'yogurt'})},
 {frozenset({'other vegetables'}), frozenset({'citrus fruit'})},
 {frozenset({'other vegetables'}),
  frozenset({'whole milk'}),
  frozenset({'citrus fruit'})},
 {frozenset({'whole milk'}), frozenset({'citrus fruit'})},
 {frozenset({'pastry'})},
 {frozenset({'root vegetables'}), frozenset({'pastry'})},
 {frozenset({'shopping bags'}), frozenset({'pastry'})},
 {frozenset({'pastry'}), frozenset({'sausage'})},
 {frozenset({'pastry'}), frozenset({'tropical fruit'})},
 {frozenset({'pastry'}), frozenset({'yogurt'})},
 {frozenset({'pastry'}), frozenset({'rolls/buns'})},
 {frozenset({'soda'}), frozenset({'pastry'})},
 {frozenset({'pastry'}), frozenset({'other vegetables'})},
 {frozenset({'pastry'}),
  frozenset({'other vegetables'}),
  frozenset({'whole milk'})},
 {frozenset({'pastry'}), frozenset({'whole milk'})},
 {frozenset({'sausage'})},
 {frozenset({'bottled water'}), frozenset({'sausage'})},
 {frozenset({'sausage'}), frozenset({'tropical fruit'})},
 {frozenset({'root vegetables'}), frozenset({'sausage'})},
 {frozenset({'shopping bags'}), frozenset({'sausage'})},
 {frozenset({'sausage'}), frozenset({'yogurt'})},
 {frozenset({'soda'}), frozenset({'sausage'})},
 {frozenset({'other vegetables'}), frozenset({'sausage'})},
 {frozenset({'sausage'}),
  frozenset({'other vegetables'}),
  frozenset({'whole milk'})},
 {frozenset({'sausage'}), frozenset({'whole milk'})},
 {frozenset({'sausage'}), frozenset({'rolls/buns'})},
 {frozenset({'shopping bags'})},
 {frozenset({'shopping bags'}), frozenset({'bottled water'})},
 {frozenset({'root vegetables'}), frozenset({'shopping bags'})},
 {frozenset({'shopping bags'}), frozenset({'tropical fruit'})},
 {frozenset({'shopping bags'}), frozenset({'yogurt'})},
 {frozenset({'shopping bags'}), frozenset({'rolls/buns'})},
 {frozenset({'shopping bags'}), frozenset({'other vegetables'})},
 {frozenset({'shopping bags'}), frozenset({'whole milk'})},
 {frozenset({'soda'}), frozenset({'shopping bags'})},
 {frozenset({'tropical fruit'})},
 {frozenset({'bottled water'}), frozenset({'tropical fruit'})},
 {frozenset({'soda'}), frozenset({'tropical fruit'})},
 {frozenset({'root vegetables'}), frozenset({'tropical fruit'})},
 {frozenset({'root vegetables'}),
  frozenset({'whole milk'}),
  frozenset({'tropical fruit'})},
 {frozenset({'root vegetables'}),
  frozenset({'other vegetables'}),
  frozenset({'tropical fruit'})},
 {frozenset({'rolls/buns'}), frozenset({'tropical fruit'})},
 {frozenset({'whole milk'}),
  frozenset({'rolls/buns'}),
  frozenset({'tropical fruit'})},
 {frozenset({'yogurt'}), frozenset({'tropical fruit'})},
 {frozenset({'other vegetables'}),
  frozenset({'tropical fruit'}),
  frozenset({'yogurt'})},
 {frozenset({'whole milk'}),
  frozenset({'tropical fruit'}),
  frozenset({'yogurt'})},
 {frozenset({'other vegetables'}), frozenset({'tropical fruit'})},
 {frozenset({'other vegetables'}),
  frozenset({'whole milk'}),
  frozenset({'tropical fruit'})},
 {frozenset({'whole milk'}), frozenset({'tropical fruit'})},
 {frozenset({'root vegetables'})},
 {frozenset({'root vegetables'}), frozenset({'bottled water'})},
 {frozenset({'root vegetables'}), frozenset({'soda'})},
 {frozenset({'root vegetables'}), frozenset({'rolls/buns'})},
 {frozenset({'root vegetables'}),
  frozenset({'other vegetables'}),
  frozenset({'rolls/buns'})},
 {frozenset({'root vegetables'}),
  frozenset({'rolls/buns'}),
  frozenset({'whole milk'})},
 {frozenset({'root vegetables'}), frozenset({'yogurt'})},
 {frozenset({'root vegetables'}),
  frozenset({'other vegetables'}),
  frozenset({'yogurt'})},
 {frozenset({'root vegetables'}),
  frozenset({'whole milk'}),
  frozenset({'yogurt'})},
 {frozenset({'root vegetables'}), frozenset({'other vegetables'})},
 {frozenset({'root vegetables'}),
  frozenset({'other vegetables'}),
  frozenset({'whole milk'})},
 {frozenset({'root vegetables'}), frozenset({'whole milk'})},
 {frozenset({'bottled water'})},
 {frozenset({'bottled water'}), frozenset({'yogurt'})},
 {frozenset({'bottled water'}), frozenset({'rolls/buns'})},
 {frozenset({'bottled water'}), frozenset({'other vegetables'})},
 {frozenset({'bottled water'}),
  frozenset({'other vegetables'}),
  frozenset({'whole milk'})},
 {frozenset({'soda'}), frozenset({'bottled water'})},
 {frozenset({'bottled water'}), frozenset({'whole milk'})},
 {frozenset({'yogurt'})},
 {frozenset({'soda'}), frozenset({'yogurt'})},
 {frozenset({'soda'}), frozenset({'whole milk'}), frozenset({'yogurt'})},
 {frozenset({'rolls/buns'}), frozenset({'yogurt'})},
 {frozenset({'other vegetables'}),
  frozenset({'rolls/buns'}),
  frozenset({'yogurt'})},
 {frozenset({'whole milk'}), frozenset({'rolls/buns'}), frozenset({'yogurt'})},
 {frozenset({'other vegetables'}), frozenset({'yogurt'})},
 {frozenset({'other vegetables'}),
  frozenset({'whole milk'}),
  frozenset({'yogurt'})},
 {frozenset({'whole milk'}), frozenset({'yogurt'})},
 {frozenset({'soda'})},
 {frozenset({'soda'}), frozenset({'other vegetables'})},
 {frozenset({'soda'}),
  frozenset({'other vegetables'}),
  frozenset({'whole milk'})},
 {frozenset({'soda'}), frozenset({'rolls/buns'})},
 {frozenset({'soda'}), frozenset({'whole milk'})},
 {frozenset({'rolls/buns'})},
 {frozenset({'other vegetables'}), frozenset({'rolls/buns'})},
 {frozenset({'other vegetables'}),
  frozenset({'rolls/buns'}),
  frozenset({'whole milk'})},
 {frozenset({'rolls/buns'}), frozenset({'whole milk'})},
 {frozenset({'other vegetables'})},
 {frozenset({'other vegetables'}), frozenset({'whole milk'})},
 {frozenset({'whole milk'})}]