返回介绍

9.2 Apriori 在 Python 中的实现

发布于 2024-01-21 22:13:25 字数 2832 浏览 0 评论 0 收藏 0

下面通过餐饮企业中的例子演示Apriori在Python中的实现。客户在餐厅点餐时,面对菜单中大量的菜品信息,往往无法迅速找到满意的菜品,既增加了点菜的时间,也降低了客户的就餐体验。实际上,菜品的合理搭配是有规律可循的:顾客的饮食习惯、菜品的荤素和口味,有些菜品之间是相互关联的,而有些菜品之间是对立或竞争关系(负关联),这些规律都隐藏在大量的历史菜单数据中,如果能够通过数据挖掘发现客户点餐的规则,就可以快速识别客户的口味,当他下了某个菜品的订单时推荐相关联的菜品,引导客户消费,提高顾客的就餐体验和餐饮企业的业绩水平。

数据库中部分点餐数据如表9-2所示:

首先将表9-2中的事务数据(一种特殊类型的记录数据)整理成关联规则模型所需的数据结构,从中抽取10个点餐订单作为事务数据集,为方便起见将菜品{18491,8842,8693,7794,8705}分别简记为{a,b,c,d,e})如表9-3所示。

表9-2 数据库中部分点餐数据

表9-3 某餐厅事务数据集

在Python中实现运用Apriori算法做关联规则分析的代码如代码清单9-1所示。其中,我们自行编写了Apriori算法的函数apriori.py,读者有需要的时候可以直接使用。

使用Apriori函数前需要将原始数据转换为0-1矩阵,之后设置参数,data为转换好的0-1矩阵,support为最小支持度,confidence为最小置信度,ms为连接符。

代码清单9-1 Apriori算法调用代码

#-*- coding: utf-8 -*-
#使用
Apriori算法挖掘菜品订单的关联规则
from __future__ import print_function
import pandas as pd
from apriori import * #导入自行编写的
apriori函数
inputfile = '../data/menu_orders.xls'
outputfile = '../tmp/apriori_rules.xls' #结果文件
data = pd.read_excel(inputfile, header = None)
print(u'\n转换原始数据至
0-1矩阵
...')
ct = lambda x : pd.Series(1, index = x[pd.notnull(x)]) #转换
0-1矩阵的过渡函数
b = map(ct, data.as_matrix()) #用
map方式执行
data = pd.DataFrame(list(b)).fillna(0) #实现矩阵转换,空值用
0填充
print(u'\n转换完毕。
')
del b #删除中间变量
b,节省内存
support = 0.2 #最小支持度
confidence = 0.5 #最小置信度
ms = '---' #连接符,默认
"--",用来区分不同元素,如
A--B。需要保证原始表格中不含有该字符
find_rule(data, support, confidence, ms).to_excel(outputfile) #保存结果

*代码详见:示例程序/code/9-1.py

其中,转换出的矩阵为:

   a    b    c    d    e
0  1.0  0.0  1.0  0.0  1.0
1  0.0  1.0  0.0  1.0  0.0
2  0.0  1.0  1.0  0.0  0.0
3  1.0  1.0  1.0  1.0  0.0
4  1.0  1.0  0.0  0.0  0.0
5  0.0  1.0  1.0  0.0  0.0
6  1.0  1.0  0.0  0.0  0.0
7  1.0  1.0  1.0  0.0  1.0
8  1.0  1.0  1.0  0.0  0.0
9  1.0  0.0  1.0  0.0  1.0

将原始的事务性数据转换为0-1矩阵后,Apriori算法才可以运行。

Python程序输出的结果如下:

正在进行第
1次搜索
...数目:
6...正在进行第
2次搜索
...数目:
3...正在进行第
3次搜索
...数目:
0...结果为:
            support  confidence
e---a           0.3    1.000000
e---c           0.3    1.000000
c---e---a       0.3    1.000000
a---e---c       0.3    1.000000
a---b           0.5    0.714286
c---a           0.5    0.714286
a---c           0.5    0.714286
c---b           0.5    0.714286
b---a           0.5    0.625000
b---c           0.5    0.625000
b---c---a       0.3    0.600000
a---c---b       0.3    0.600000
a---b---c       0.3    0.600000
a---c---e       0.3    0.600000

对输出结果进行解释:如关联规则“a---b 0.50.714286”这条,关联规则a---b的支持度support=0.5,置信度confidence=0.714286。对于餐饮业来说,这条规则意味着客户同时点菜品a和b的概率是50%,点了菜品a,再点菜品b的概率是71.4286%。知道了这些,就可以对顾客进行智能推荐,增加销量同时满足客户需求。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文