文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

利用Python进行商品的亲和性分析

2024-12-03 06:13

关注

本文转载自微信公众号「菜J学Python」,作者J哥、小屁孩i 。转载本文请联系菜J学Python公众号。 

大家好,我是J哥。

如今这个社会是一个数字社会,在各大领域里面最为显著的应该是数据吧。就目前而言,大数据已经越来越流行了,我们不管在什么领域上都能接触到数据的,并且现在很多企业已经累计了大量的数据。很多人开始朝向大数据开发以及大数据分析这两个方向发展了。

那么也许你会问,哪这两个方向更加值得转行呢?很多人也在这两个方向纠结,在这里我想告诉你们的是,没有什么是最优选择,你感兴趣的才是最好的选择。这边,我选择的是大数据分析!现在让我们进入数据分析的一个环节——数据挖掘。

01数据挖掘简介

数据挖掘旨在让计算机根据已有数据做出决策。决策可以是预测明年的销量,人口的数目,拦截垃圾邮件,检测网站的语言。到目前为止,数据挖掘已经有很多的应用,即使这样很多新的应用领域也在不断出现。

数据挖掘涉及到算法,最优策略,统计学,工程学和计算机科学相关领域的知识。除此之外我们还会用到语言学,神经科学,城市规划等其他领域的概念或知识。想要充分发挥数据挖掘的威力,算法肯定是必备的。(在这里推荐读者去刷一刷LeetCode)

一般来说数据挖掘有这三个基本步骤:1、创建数据集。数据集能直接反应一些真实事件;2、选择算法。选择一个合适的算法才能更好的对数据进行处理;3、优化算法。每种数据挖掘算法都有参数,它们或是算法自身包含的,或是使用者添加的,这些参数会影响算法的具体决策。

02亲和性分析案例

现在让我们用一个例子说明。不知道你逛超市的时候,是否发现超市里面基本上都是按照商品的种类来分区域的,然而有些东西是存在例外的,一件商品的旁边摆放着不一样种类的商品。不知道你是否有发现这个现象,有没有对此感到不解。这边我想跟你说的是,这种摆放也是有道理的,这个道理是商品之间的亲和性!

前置知识:

  1. (1)defaultdict(int):初始化为 0     
  2. (2)defaultdict(float):初始化为 0.0    
  3. (3)defaultdict(str):初始化为 '' 

这里的defaultdict(function_factory)构建的是一个类似dictionary的对象其中keys的值,自行确定赋值,但是values的类型,是function_factory的类实例而且具有默认值。比如default(int)则创建一个类似dictionary对象里面任何的values都是int的实例,而且就算是一个不存在的key, d[key] 也有一个默认值,这个默认值是int()的默认值0。

03代码实现

现在进行代码部分:

  1. import  numpy as np 
  2. from collections import defaultdict 
  3. dataset_filename = "affinity_dataset.txt" 
  4. features = ["bread","milk","cheese","apple","banana"]  #猜一下这个是干嘛用的 
  5. X = np.loadtxt(dataset_filename) 
  6. print(X[:5])   #打印前五行的购物信息 

统计一下购买苹果和香蕉的人数:

  1. num_apple_purchases = 0 # 初始化一个购买苹果人数的变量 
  2. for sample in X: 
  3.     if sample[3] == 1: 
  4.         num_apple_purchases+=1 
  5. print("{0} people bought Apples ".format(num_apple_purchases)) 
  6. num_banana_purchases = 0 
  7. for sample in X: 
  8.     if sample[4] == 1: 
  9.         num_banana_purchases += 1 
  10. print("{0} people bought banana".format(num_banana_purchases)) 

现在为了计算规则的置信度还有支持度,我们可以用字典的形式来存放计算结果:

  1. valid_rules = defaultdict(int
  2. invalid_rules = defaultdict(int
  3. num_occurances = defaultdict(int
  4. for sample in X: 
  5.     for premise in range(4): 
  6.         if sample[premise] ==0 : 
  7.             continue 
  8.         num_occurances[premise] +=1  #当顾客有购买物品时key对应的时value变为1 
  9.         for conclusion in range(4): 
  10.             if premise == conclusion:  #访问同一个key 的时候是没有意义的直接跳过 
  11.                 continue 
  12.             if sample[conclusion] == 1: 
  13.                 valid_rules[(premise,conclusion)] +=1 
  14.             else
  15.                 invalid_rules[(premise,conclusion)] +=1 

得到所有必要的统计量后,我们再来计算每条规则的支持度和置信度。如前所述,支持度就是规则应验的次数:

  1. support = valid_rules 
  2. #置信度的计算方法类似,遍历每条规则进行计算 
  3. confidence = defaultdict(float
  4. for premise,conclusion in valid_rules.keys(): 
  5.     rule = (premise,conclusion) 
  6.     confidence[rule] = valid_rules[rule]/num_occurances[premise] 

声明一个函数,接收的参数有:分别作为前提条件和结论的特征索引值、支持度字典、置信度字典以及特征列表。

  1. def print_rule(premise, conclusion,support , confidence,features): 
  2.     premise_name = features[premise] 
  3.     conclusion_name = features[conclusion] 
  4.     print("Rule:if a person buys {0} they will also buy {1} ".format(premise_name,conclusion_name)) 
  5.     print(" - Support : {0}".format(support[(premise,conclusion)])) 
  6.     print(" - Confidence : {0:.3f}".format(confidence[(premise,conclusion)])) 
  7. premise = 1 
  8. conclusion = 3 
  9. features = ["bread","milk","cheese","apple","banana"
  10. print_rule(premise,conclusion,support,confidence,features) 
  11.  
  12. from  operator import itemgetter 
  13. sorted_support = sorted(support.items(),key=itemgetter(1),reverse=True

排序完成后,就可以输出支持度最高的前5条规则:

  1. for index in range(5): 
  2.     print("Rule #{0}".format(index+1)) 
  3.     premise,conclusion = sorted_support[index][0] 
  4.     print_rule(premise,conclusion,support,confidence,features) 

以上就是我们这次所学的数据挖掘之商品亲和性分析了。

 

来源:菜J学Python内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯