购物篮分析是一个很经典的数据挖掘案例,运用到了Apriori算法。下面从网上下载的一超市某月份的数据库,利用Apriori算法进行管理分析。例子使用Python+MongoDB

  处理过程1 数据建模(将Excel中的数据写入到MongoDB数据库), 2 从数据库中读取数据进行分析。

  Excel文件http://download.csdn.net/detail/artscrafts/6805689

  案例配置文件 setting.py

 data_source = 'supermarket.xls'
host = 'localhost'
port = 27017
db_name = 'shopping_basket'
items_name = 'goods_items'
record_name = 'transaction_record'

  读取Excel数据到MongoDB中 load_basket.py

 from xlrd import open_workbook
from pymongo import MongoClient
import setting wb = open_workbook(setting.data_source, encoding_override='utf-8')
client = MongoClient(setting.host, setting.port)
db = client[setting.db_name]
items = [] #read xls
def read_one_line(workbook, sheet_index=0, row_index=0, start_col_index=0):
sheet = workbook.sheets()[0]
max_row = sheet.nrows
max_col = sheet.ncols
start_col_index = (start_col_index if (start_col_index > 0 and start_col_index <= max_col) else max_col)
if row_index < 0 or row_index >= max_row:
raise IndexError()
for col_index in xrange(start_col_index, max_col):
yield sheet.cell(row_index, col_index).value #read xls
def readlines(workbook, sheet_index=0, start_row_index=0, end_row_index=None, start_col_index=0, end_col_index=None):
sheet = workbook.sheets()[sheet_index]
max_row = sheet.nrows
max_col = sheet.ncols
end_row_index = (end_row_index if end_row_index else max_row)
end_col_index = (end_col_index if end_col_index else max_col)
for row_index in xrange(start_row_index, end_row_index):
yield [sheet.cell(row_index, col_index).value for col_index in xrange(start_col_index, end_col_index)] #from xls to mongodb
def load_items():
collection = db[setting.items_name]
items_line = read_one_line(wb, row_index=1, start_col_index=1)
id = 1
tmp = []
for item in items_line:
if id % 100 == 0:
collection.insert(tmp)
tmp = []
tmp.append({'id':id, 'name':item})
items.append(item)
id += 1 # from xls to mongodb
def load_record():
collection = db[setting.record_name]
lines = readlines(wb,start_row_index=2, start_col_index = 1)
tmp = []
id = 1
for line in lines:
if id % 100 == 0:
collection.insert(tmp)
tmp = []
tmp.append({'id':id, 'items':[items[i] for i in xrange(len(line)) if line[i] == 'T']})
id += 1 def main():
print '........start loading........'
load_items()
load_record()
client.close()
print '.........end loading.........' if __name__ == '__main__':
main()

  进行数据分析 analysis_basket.py

 #Apriori
from pymongo import MongoClient
import setting client = MongoClient(setting.host, setting.port)
db = client[setting.db_name]
data = [] #from mongodb to items
def filldata():
collection = db[setting.record_name]
cur = collection.find()
for row in cur:
data.append(row['items']) def connect(items):
result = {}
keys = items.keys()
length = len(keys)
for i in range(length):
prev = keys[i][:len(keys[i]) - 1]
for j in range(i + 1, length):
tmp = keys[j][:len(keys[j]) - 1]
if prev == tmp:
key = keys[i] + (keys[j][len(keys[i]) - 1],)
result[key] = getsupp(key)
else:
break
return result def pruning(items, minsupp):
result = {}
for key in items.keys():
if items[key] >= minsupp:
result[key] = items[key]
return result def contain(par, sub):
for v in sub:
if not v in par:
return False
return True def getsupp(item):
supp = 0
for row in data:
if contain(row, item):
supp+=1
return supp def apriori(data, minsupp, k):
candidate_set = {}
for row in data:
for i in row:
key = (i,)
candidate_set[key] = candidate_set.get(key, 0) + 1
frequently_set = pruning(candidate_set, minsupp)
result = {}
result['k=1'] = frequently_set
for n in range(2, k):
candidate_set = connect(frequently_set)
frequently_set = pruning(candidate_set, minsupp)
if len(frequently_set) <= 1:
return result
result['K=' + str(n)] = frequently_set
return result def main():
filldata()
client.close()
res = apriori(data, 30, 8) if __name__ == '__main__':
main()

  

  

Apriori算法在购物篮分析中的运用的更多相关文章

  1. 数据挖掘算法之-关联规则挖掘(Association Rule)(购物篮分析)

    在各种数据挖掘算法中,关联规则挖掘算是比較重要的一种,尤其是受购物篮分析的影响,关联规则被应用到非常多实际业务中,本文对关联规则挖掘做一个小的总结. 首先,和聚类算法一样,关联规则挖掘属于无监督学习方 ...

  2. 数据算法 --hadoop/spark数据处理技巧 --(5.移动平均 6. 数据挖掘之购物篮分析MBA)

    五.移动平均 多个连续周期的时间序列数据平均值(按相同时间间隔得到的观察值,如每小时一次或每天一次)称为移动平均.之所以称之为移动,是因为随着新的时间序列数据的到来,要不断重新计算这个平均值,由于会删 ...

  3. R语言和数据分析十大:购物篮分析

    提到数据挖掘,我们的第一个反应是之前的啤酒和尿布的故事听说过,这个故事是一个典型的数据挖掘关联规则.篮分析的传统线性回归之间的主要差别的差别,对于离散数据的相关性分析: 常见的关联规则: 关联规则:牛 ...

  4. 108_Power Pivot购物篮分析分组GENERATE之笛卡尔积、排列、组合

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 1.背景 昨天在看论坛帖子时候(帖子),看到一个关于SKU组合的问题,有很多M大佬都给出了处理方案,于是想用dax也写一个 ...

  5. 关联规则之Aprior算法(购物篮分析)

    0.支持度与置信度 <mahout实战>与<机器学习实战>一起该买的记录数占所有商品记录总数的比例——支持度(整体) 买了<mahout实战>与<机器学习实战 ...

  6. Apriori算法第二篇----详细分析和代码实现

    1 Apriori介绍 Apriori算法使用频繁项集的先验知识,使用一种称作逐层搜索的迭代方法,k项集用于探索(k+1)项集.首先,通过扫描事务(交易)记录,找出所有的频繁1项集,该集合记做L1,然 ...

  7. 016 Spark中关于购物篮的设计,以及优化(两个点)

    一:介绍 1.购物篮的定义 2.适用场景 3.相关概念 4.步骤 5.编程实现 6.步骤 二:程序 1.程序 package com.ibeifeng.senior.mba.association i ...

  8. Apriori算法第一篇

    摘要: Apriori算法是产生k项高频项目组的一般手段.算法概要:首先产生k项高频项目集合Lk,自身链接形成k+1项的项目结合C(k+1),然后剪枝(去掉以前去掉的不满足支持度的高频),生成K=1项 ...

  9. Apriori算法的C++实现

    Apriori是经典的购物篮分析算法.该算法用SQL实现难度较大,所以考虑用C++实现. 花了两天,代码例如以下.原创转载请注明出处 //Apriori.c #include<iostream& ...

随机推荐

  1. 支持“***Context”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。

    在用VS进行MVC开发的过程中遇到如下问题: 支持“***Context”上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库(http://go.microsoft ...

  2. linux ptrace II

    第一篇 linux ptrace I 在之前的文章中我们用ptrace函数实现了查看系统调用参数的功能.在这篇文章中,我们会用ptrace函数实现设置断点,跟代码注入功能. 参考资料 Playing ...

  3. 关于weight属性使用的一些细节

    之前被这个属性困扰过好久,今天一个偶然的机会,终于把这个搞清楚了,现在与大家分享一下. 假设我们要在一个LinearLayout布局中显示两个按钮,button1和button2,button2的宽度 ...

  4. System Operations on AWS - Lab 1W - Creating EC2 (Windows)

    1. 创建CommandHost实例,登录到CommandHost,通过AWS CLI创建WebServer实例. 1.1 为CommandHost实例创建一个IAM角色 1.2 创建CommandH ...

  5. C# 事件的理解

    说实话,事件弄得还是很晕,有待于以后的强化吧,下面是我对事件的一点理解 首先,参见大牛的帖子:网上大牛事件讲解 下面我来说一说事件的大致流程: 事件委托事件概述事件就是当对象或类状态发生改变时,对象或 ...

  6. UML图基本类型

    use case model用例模型 analysiss model分析模型 design model设计模型 implementation model实现模型 deployment model部署模 ...

  7. 页面跳转 url地址的写法

    跳转地址:分两类,wikipage和aspx页面: wikipage:当新建webpart,在网站里新建一个wikipage,然后将webpart添加进wikipage,这种情况下跳转页面需要添加si ...

  8. EventBus3 简单使用及注意点

    博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 # EventBus3 简介 EventBus Android 发布/订阅事件总线,可简化 Activities, Fr ...

  9. 初学时的shell

    学习期间写过一些shell脚本, 测试过程:vi test.sh 后把程序写入其中,保存退出.然后改变文件属性:chmod +x test.sh 最后执行:./test.shfor语句测试:1)#!/ ...

  10. js EasyUI前台 价格=数量*单价联动的实现

    废话,不多说,,效果图如下: