参考:利用mlxtend进行数据关联分析
#!/usr/bin/python
# coding=utf-8
import numpy as np
import pandas as pd
import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules
# 画图支持中文显示
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
# 负号
plt.rcParams['axes.unicode_minus'] = False
# 显示所有列
pd.set_option('display.max_columns', None)
# 显示所有行
pd.set_option('display.max_rows', None)
# 设置value的显示长度为10000,默认为50
pd.set_option('display.width',10000)
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
#
np.set_printoptions(linewidth=1000)
#测试数据
records = [['牛奶', '洋葱', '猪肉', '鸡蛋', '洋葱', '酸奶'],
['洋葱', '豆角', '酸奶', '鸡蛋', '苹果'],
['牛奶', '苹果', '豆角', '鸡蛋'],
['牛奶', '玉米', '胡萝卜', '豆角', '酸奶'],
['玉米', '洋葱', '豆角', '冰激凌', '鸡蛋']]
Encoder = TransactionEncoder()
encoded_data = Encoder.fit_transform(records)
df = pd.DataFrame(encoded_data, columns=Encoder.columns_)
print(df)
# 频繁项集
frequent_items = apriori(df, min_support=0.05, use_colnames=True, max_len=4).sort_values(by='support', ascending=False)
# min_support:给定的最小支持度
# use_colnames:默认False,则返回的物品组会用编号显示,为True的话直接显示物品名称。
# max_len=None:最大物品组合数,默认是None,不做限制。
print('frequent_itemsets 为频繁项集:(Support列为支持度,即 项集发生频率/总订单量)\n', frequent_items)
# 关联规则
rules = association_rules(frequent_items, metric='lift', min_threshold=0.8) # metric:默认是confidence
print('rules为最终关联规则结果表:(antecedants前项集,consequents后项集,support支持度,confidence置信度,lift提升度。)\n', rules)
print('-----------------------------------------------------------------------------------------------------------------------')
# 结果检视
# ass_rule = rules.sort_values(by='leverage', ascending=False, inplace=True)
# print(ass_rule)
# 选取(置信度confidence≥0.8)&(提升度lift≥2)的规则,按lift降序排序
ass_rule = rules[ (rules['lift'] >= 2) & (rules['confidence'] >= 0.8) ].sort_values("lift",ascending = False)
print(ass_rule)
# 数据编码
冰激凌 洋葱 牛奶 猪肉 玉米 胡萝卜 苹果 豆角 酸奶 鸡蛋
0 False True True True False False False False True True
1 False True False False False False True True True True
2 False False True False False False True True False True
3 False False True False True True False True True False
4 True True False False True False False True False True
frequent_itemsets 为频繁项集:(Support列为支持度,即 项集发生频率/总订单量)
support itemsets
7 0.8 (豆角)
9 0.8 (鸡蛋)
1 0.6 (洋葱)
2 0.6 (牛奶)
40 0.6 (豆角, 鸡蛋)
8 0.6 (酸奶)
20 0.6 (洋葱, 鸡蛋)
31 0.4 (豆角, 玉米)
39 0.4 (豆角, 酸奶)
41 0.4 (酸奶, 鸡蛋)
80 0.4 (豆角, 鸡蛋, 苹果)
27 0.4 (鸡蛋, 牛奶)
26 0.4 (酸奶, 牛奶)
25 0.4 (豆角, 牛奶)
19 0.4 (洋葱, 酸奶)
38 0.4 (鸡蛋, 苹果)
18 0.4 (洋葱, 豆角)
36 0.4 (豆角, 苹果)
60 0.4 (洋葱, 酸奶, 鸡蛋)
4 0.4 (玉米)
59 0.4 (洋葱, 鸡蛋, 豆角)
6 0.4 (苹果)
70 0.2 (豆角, 酸奶, 牛奶)
79 0.2 (豆角, 酸奶, 苹果)
78 0.2 (胡萝卜, 酸奶, 豆角)
77 0.2 (豆角, 鸡蛋, 玉米)
76 0.2 (豆角, 酸奶, 玉米)
71 0.2 (豆角, 鸡蛋, 牛奶)
66 0.2 (胡萝卜, 豆角, 牛奶)
67 0.2 (胡萝卜, 酸奶, 牛奶)
75 0.2 (胡萝卜, 酸奶, 玉米)
74 0.2 (胡萝卜, 豆角, 玉米)
73 0.2 (猪肉, 酸奶, 鸡蛋)
72 0.2 (酸奶, 牛奶, 鸡蛋)
68 0.2 (豆角, 苹果, 牛奶)
69 0.2 (鸡蛋, 牛奶, 苹果)
65 0.2 (玉米, 酸奶, 牛奶)
0 0.2 (冰激凌)
81 0.2 (苹果, 酸奶, 鸡蛋)
82 0.2 (豆角, 酸奶, 鸡蛋)
102 0.2 (胡萝卜, 酸奶, 豆角, 玉米)
101 0.2 (豆角, 鸡蛋, 牛奶, 苹果)
100 0.2 (胡萝卜, 酸奶, 豆角, 牛奶)
99 0.2 (玉米, 豆角, 酸奶, 牛奶)
98 0.2 (玉米, 胡萝卜, 酸奶, 牛奶)
97 0.2 (玉米, 胡萝卜, 豆角, 牛奶)
96 0.2 (猪肉, 酸奶, 牛奶, 鸡蛋)
95 0.2 (洋葱, 酸奶, 豆角, 鸡蛋)
94 0.2 (洋葱, 酸奶, 鸡蛋, 苹果)
93 0.2 (洋葱, 鸡蛋, 豆角, 苹果)
92 0.2 (洋葱, 酸奶, 豆角, 苹果)
91 0.2 (洋葱, 鸡蛋, 豆角, 玉米)
90 0.2 (洋葱, 酸奶, 猪肉, 鸡蛋)
89 0.2 (洋葱, 酸奶, 牛奶, 鸡蛋)
88 0.2 (洋葱, 鸡蛋, 猪肉, 牛奶)
87 0.2 (洋葱, 酸奶, 猪肉, 牛奶)
86 0.2 (豆角, 鸡蛋, 玉米, 冰激凌)
63 0.2 (玉米, 胡萝卜, 牛奶)
85 0.2 (洋葱, 鸡蛋, 豆角, 冰激凌)
84 0.2 (洋葱, 鸡蛋, 玉米, 冰激凌)
83 0.2 (洋葱, 豆角, 玉米, 冰激凌)
64 0.2 (玉米, 豆角, 牛奶)
52 0.2 (洋葱, 鸡蛋, 猪肉)
62 0.2 (猪肉, 鸡蛋, 牛奶)
33 0.2 (鸡蛋, 玉米)
30 0.2 (胡萝卜, 玉米)
29 0.2 (猪肉, 鸡蛋)
28 0.2 (猪肉, 酸奶)
24 0.2 (苹果, 牛奶)
23 0.2 (胡萝卜, 牛奶)
22 0.2 (玉米, 牛奶)
21 0.2 (猪肉, 牛奶)
17 0.2 (洋葱, 苹果)
16 0.2 (洋葱, 玉米)
15 0.2 (洋葱, 猪肉)
14 0.2 (洋葱, 牛奶)
13 0.2 (鸡蛋, 冰激凌)
12 0.2 (豆角, 冰激凌)
11 0.2 (玉米, 冰激凌)
10 0.2 (洋葱, 冰激凌)
5 0.2 (胡萝卜)
3 0.2 (猪肉)
32 0.2 (酸奶, 玉米)
34 0.2 (胡萝卜, 豆角)
61 0.2 (猪肉, 酸奶, 牛奶)
35 0.2 (胡萝卜, 酸奶)
58 0.2 (洋葱, 酸奶, 豆角)
57 0.2 (洋葱, 苹果, 鸡蛋)
56 0.2 (洋葱, 酸奶, 苹果)
55 0.2 (洋葱, 苹果, 豆角)
54 0.2 (洋葱, 鸡蛋, 玉米)
53 0.2 (洋葱, 豆角, 玉米)
51 0.2 (洋葱, 酸奶, 猪肉)
50 0.2 (洋葱, 鸡蛋, 牛奶)
49 0.2 (洋葱, 酸奶, 牛奶)
48 0.2 (洋葱, 猪肉, 牛奶)
47 0.2 (豆角, 鸡蛋, 冰激凌)
46 0.2 (鸡蛋, 玉米, 冰激凌)
45 0.2 (豆角, 玉米, 冰激凌)
44 0.2 (洋葱, 鸡蛋, 冰激凌)
43 0.2 (洋葱, 豆角, 冰激凌)
42 0.2 (洋葱, 玉米, 冰激凌)
37 0.2 (酸奶, 苹果)
103 0.2 (苹果, 豆角, 酸奶, 鸡蛋)