如何利用Python进行商品的亲和性分析
这篇文章将为大家详细讲解有关如何利用Python进行商品的亲和性分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
从策划到设计制作,每一步都追求做到细腻,制作可持续发展的企业网站。为客户提供成都网站制作、网站建设、网站策划、网页设计、域名申请、网站空间、网络营销、VI设计、 网站改版、漏洞修补等服务。为客户提供更好的一站式互联网解决方案,以客户的口碑塑造优易品牌,携手广大客户,共同发展进步。
01数据挖掘简介
数据挖掘旨在让计算机根据已有数据做出决策。决策可以是预测明年的销量,人口的数目,拦截垃圾邮件,检测网站的语言。到目前为止,数据挖掘已经有很多的应用,即使这样很多新的应用领域也在不断出现。
数据挖掘涉及到算法,最优策略,统计学,工程学和计算机科学相关领域的知识。除此之外我们还会用到语言学,神经科学,城市规划等其他领域的概念或知识。想要充分发挥数据挖掘的威力,算法肯定是必备的。(在这里推荐读者去刷一刷LeetCode)
一般来说数据挖掘有这三个基本步骤:1、创建数据集。数据集能直接反应一些真实事件;2、选择算法。选择一个合适的算法才能更好的对数据进行处理;3、优化算法。每种数据挖掘算法都有参数,它们或是算法自身包含的,或是使用者添加的,这些参数会影响算法的具体决策。
02亲和性分析案例
现在让我们用一个例子说明。不知道你逛超市的时候,是否发现超市里面基本上都是按照商品的种类来分区域的,然而有些东西是存在例外的,一件商品的旁边摆放着不一样种类的商品。不知道你是否有发现这个现象,有没有对此感到不解。这边我想跟你说的是,这种摆放也是有道理的,这个道理是商品之间的亲和性!
前置知识:
(1)defaultdict(int):初始化为 0 (2)defaultdict(float):初始化为 0.0 (3)defaultdict(str):初始化为 ''
这里的defaultdict(function_factory)构建的是一个类似dictionary的对象其中keys的值,自行确定赋值,但是values的类型,是function_factory的类实例而且具有默认值。比如default(int)则创建一个类似dictionary对象里面任何的values都是int的实例,而且就算是一个不存在的key, d[key] 也有一个默认值,这个默认值是int()的默认值0。
03代码实现
现在进行代码部分:
import numpy as np from collections import defaultdict dataset_filename = "affinity_dataset.txt" features = ["bread","milk","cheese","apple","banana"] #猜一下这个是干嘛用的 X = np.loadtxt(dataset_filename) print(X[:5]) #打印前五行的购物信息
统计一下购买苹果和香蕉的人数:
num_apple_purchases = 0 # 初始化一个购买苹果人数的变量 for sample in X: if sample[3] == 1: num_apple_purchases+=1 print("{0} people bought Apples ".format(num_apple_purchases)) num_banana_purchases = 0 for sample in X: if sample[4] == 1: num_banana_purchases += 1 print("{0} people bought banana".format(num_banana_purchases))
现在为了计算规则的置信度还有支持度,我们可以用字典的形式来存放计算结果:
valid_rules = defaultdict(int) invalid_rules = defaultdict(int) num_occurances = defaultdict(int) for sample in X: for premise in range(4): if sample[premise] ==0 : continue num_occurances[premise] +=1 #当顾客有购买物品时key对应的时value变为1 for conclusion in range(4): if premise == conclusion: #访问同一个key 的时候是没有意义的直接跳过 continue if sample[conclusion] == 1: valid_rules[(premise,conclusion)] +=1 else: invalid_rules[(premise,conclusion)] +=1
得到所有必要的统计量后,我们再来计算每条规则的支持度和置信度。如前所述,支持度就是规则应验的次数:
support = valid_rules #置信度的计算方法类似,遍历每条规则进行计算 confidence = defaultdict(float) for premise,conclusion in valid_rules.keys(): rule = (premise,conclusion) confidence[rule] = valid_rules[rule]/num_occurances[premise]
声明一个函数,接收的参数有:分别作为前提条件和结论的特征索引值、支持度字典、置信度字典以及特征列表。
def print_rule(premise, conclusion,support , confidence,features): premise_name = features[premise] conclusion_name = features[conclusion] print("Rule:if a person buys {0} they will also buy {1} ".format(premise_name,conclusion_name)) print(" - Support : {0}".format(support[(premise,conclusion)])) print(" - Confidence : {0:.3f}".format(confidence[(premise,conclusion)])) premise = 1 conclusion = 3 features = ["bread","milk","cheese","apple","banana"] print_rule(premise,conclusion,support,confidence,features) from operator import itemgetter sorted_support = sorted(support.items(),key=itemgetter(1),reverse=True)
排序完成后,就可以输出支持度最高的前5条规则:
for index in range(5): print("Rule #{0}".format(index+1)) premise,conclusion = sorted_support[index][0] print_rule(premise,conclusion,support,confidence,features)
关于“如何利用Python进行商品的亲和性分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
本文标题:如何利用Python进行商品的亲和性分析
本文链接:http://myzitong.com/article/ipicph.html