专栏首页CDA数据分析师数据挖掘 | 利用Python进行商品的亲和性分析

数据挖掘 | 利用Python进行商品的亲和性分析

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

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

数据挖掘简介

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

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

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

亲和性分析案例

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

前置知识:

(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。

代码实现

现在进行代码部分:

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)

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

本文分享自微信公众号 - CDA数据分析师(cdacdacda)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-05-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Day3.数据挖掘初探:亲和性分析-商品推荐

    学了一段时间的数据可视化和NumPy库的使用,是不是很想伸手施展一下,但是用Python进行数据分析和挖掘还是要有一定的基础储备才可以的,其中涉及到算法、统计学...

    DataScience
  • 学习数据分析,有哪些好书值得读?都在这里了

    导读:这个年代里,“用数据说话”已经像是一种过气的口号。各行各业不同角色和身份的人们都已懂得“用数据说话”的重要性,甚至日常生活中也需要用数据看清事实,科学吃瓜...

    华章科技
  • 论买奶粉的正确姿势,文本数据挖掘有话要说

    面对市场上玲琅满目的奶粉,消费者时常不知如何选择。作为一个擅长用数据解决消费问题的网红,DT君一向推崇用户评论文本数据的挖掘。来自KPMG大数据挖掘团队的数据侠...

    DT数据侠
  • 【干货】1000位产品经理推荐的数据分析书籍

    世界如此喧嚣,知识何其稀少。这是一个信息爆炸的时代,被资讯洪流裹挟的我们,都养成了非常不好的思维习惯:把信息当作知识,把收藏当作学习,把阅读当作思考,把储存当作...

    钱塘数据
  • 干货 | 从定义到应用,数据挖掘的一次权威定义之旅

    什么是数据挖掘 前两天看到群里有人问,什么是数据挖掘,现在就数据挖掘的概念做一下分析,并且尽量用大白话说一下数据挖掘到底是个啥东西,为啥大数据来了数据挖掘也火了...

    小莹莹
  • 干货 | 从定义到应用,数据挖掘的一次权威定义之旅

    用户1756920
  • 干货 | 19款最好用的免费数据挖掘工具大汇总

    数据在当今世界意味着金钱。随着向基于app的世界的过渡,数据呈指数增长。然而,大多数数据是非结构化的,因此需要一个过程和方法从数据中提取有用的信息,并将其转换为...

    Python数据科学
  • 「首席架构师推荐」文本挖掘软件列表

    文本挖掘,也称为文本数据挖掘,大致相当于文本分析,是指从文本中获取高质量信息的过程。高质量的信息通常是通过设计模式和趋势通过统计模式学习等手段获得的。

    首席架构师智库
  • 深入浅出:怎么从0开始学习大数据挖掘分析,才能成为合格的数据挖掘分析师及数据科学家

    最近有很多人咨询,想学习大数据,但不知道怎么入手,从哪里开始学习,需要学习哪些东西?对于一个初学者,学习大数据挖掘分析的思路逻辑是什么?本文就梳理了如何从0开始...

    CDA数据分析师

扫码关注云+社区

领取腾讯云代金券