关联规则-购物篮分析(basket analysis)

数据集:网上下载的公共数据
环境:Python3.5
实现:找到了C1 L1 C2 L2
存在的不足:只能找到指定长度候选K项级和频繁K项级,没有实现找到存在的所有K项级,但实现原理相同

数据格式如下:

9900000988  07004   水晶梨 1                                       
9900000989  03001   300g壶瓶枣 1                                       
9900000989  03002   484g壶瓶枣 1                                       
9900000989  03004   2000g壶瓶枣礼盒一 1
...                                     
9900000989  06002   夹子  2                                       
9900000989  06003   蜻蜓扑克    1                                       
9900000989  04002   800g沁州黄 1                                       
9900000989  04004   5斤布袋沁州黄 1  

上代码:

Created on 2018年4月12日

@author: yqm
'''
import os

'''data文件路径'''
file_dir = "./data/data.txt"

'''判断文件是否存在'''
if(os.path.exists(file_dir)):
    pass
else:
    raise FileNotFoundError("找不到文件" + file_dir)

'''读数据文件 存为列表list'''
data_list = [] # 保存所有订单所有商品
with open(file_dir, encoding="utf-8") as f:
    lines = f.readlines()
    for line in lines:
        list = line.split()
        data_list.append(list)
        
# print(data_list)

'''统计每笔订单购买商品和商品数,每笔订单存为一个词典[{},{}...{}]'''
All_Data_List = [] # 存储每笔订单统计
data_one = "9900000984" #第一个小票号 此号用来唯一标示一笔订单
item = {}
for i, data in enumerate(data_list):
    if(data[0]==data_one):
        item[data[2]] = int(data[3])
    else:
        All_Data_List.append(item)
        data_one = data[0]
        item = {}
        item[data[2]] = int(data[3]) 

# print(All_Data_List)

'''统计每个商品的数量''' 
goods_num_Statistics = {}
for list in data_list:
    if list[2] in goods_num_Statistics:
        goods_num_Statistics[list[2]] += 1
    else:
        goods_num_Statistics[list[2]] = 1
        
print("C1 = " + str(goods_num_Statistics)) 
        
'''根据C1结果删除数量小于2的商品,输出L1'''
keys_list = []
for key in goods_num_Statistics.keys():
    keys_list.append(key)
for key in keys_list:
    if goods_num_Statistics[key] < 2:
        del goods_num_Statistics[key]

print("L1 = " + str(goods_num_Statistics))

'''根据L1结果计算C2'''
C2_item = [] # 存放组合结果,不包含数量
C2_keys = [] # goods_num_Statistics字典所有的key值
for key in goods_num_Statistics.keys():
    C2_keys.append(key)
    
for name1 in C2_keys:
    for name2 in C2_keys:
        C2_item.append([name1, name2])

# print(C2_item)
# print(len(C2_item))
# 去重
for item in C2_item:
    a = [item[0], item[1]]
    b = [item[1], item[0]]
    if a in C2_item and b in C2_item:
        aa = C2_item.index(a)
        del C2_item[aa]
for item1 in C2_item:
    for item2 in C2_item:
        if item1 == item2:
            bb = C2_item.index(item1)
            del C2_item[bb]

# print("C2_item" + str(C2_item))
# print(len(C2_item))

'''根据去重后的组合C2_item计算C2结果'''
C2_result = {} # 存放C2结果
C2_item_key = []
for keys in All_Data_List:
    list_key = []
    for key in keys.keys():
        list_key.append(key)
    C2_item_key.append(list_key)
    
# print("C2_item_key" + str(C2_item_key)) 
   
for item1 in C2_item:
    num = 0
    for item2 in C2_item_key:
        if set(item1).issubset(item2):
            num += 1
    item1.append(num)

print("C2 = " + str(C2_item))
 
'''根据C2筛选出数量大于2的所有集合'''
L2_result = []
for item in C2_item:
    if item[2] >= 2:
        L2_result.append(item)

print("L2 = " + str(L2_result))

运行结果部分展示:

C1 = {'宁化府十二珍醋': 2, '软中华': 4, '中南海0.8': 5, '大豆': 1, '800g*2壶瓶醉枣礼盒(桶)': 2,...}  
L1 = {'宁化府十二珍醋': 2, '软中华': 4, '中南海0.8': 5, '800g*2壶瓶醉枣礼盒(桶)': 2, '牛肉258g': 2,...}  
C2 = [['宁化府十二珍醋', '800g*2壶瓶醉枣礼盒(桶)', 0], ['宁化府十二珍醋', '散核桃仁', 0],...]  
L2 = [['中南海0.8', '散大核桃', 2], ['牛肉258g', '牛肉258g', 2], ['牛肉258g', '软云', 2], ...]  
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • 定义   关联分析是一种简单、实用的分析技术,就是发现存在于大量数据集中的关联性或相关性,从而描述了一个事物中某些...
    老羊_肖恩阅读 3,316评论 0 1
  • 101.深度学习(CNN RNN Attention)解决大规模文本分类问题。 用深度学习(CNN RNN Att...
    大黄大黄大黄阅读 13,743评论 2 42
  • 随风香瑞梦,入夜俏烛红。 对镜梳云鬓,抽纱绣女工。 霜寒欺素帐,飞雪静三更。 暗泣离愁泪,无眠倦瘦容。
    不惑而歌阅读 301评论 38 37
  • 听吴伯凡老师的专栏,谈到本能相关的话题。基因赋予我们的本能,就像预装在计算机里面的操作系统,这个系统经过亿万年与大...
    小猫藏鱼阅读 202评论 0 1
  • 过临平,一时起兴,从旁换心情。木桥铺水中,残荷观人行,山净晨清涤魂灵。夏景阑珊,秋意满,免却俗事牵。 步吟廊,诗满...
    玖玲阅读 386评论 0 5