数据挖掘入门系列教程(一)之亲和性分析

教程系列简介

该教程为入门教程,为博主学习数据挖掘的学习路径步骤。教程为入门教程,从最简单的开始。使用的编程语言为Python3.8.1,使用JupyterNotebook作为开发环境(使不使用JupyterNotebook都没有关系)。

在学习本教程之前,你需要:

有一点python编程基础

会用百度 or 谷歌

数学知识还是要一点的(但是要多少呢?我也不知道,我也是刚开始学)

什么是数据挖掘, 相信点击进入这篇博客的人都应该知道了吧。通俗的说就是挖掘数据所蕴含的含义,寻找数据之间的关系。

下面将以最简单的亲和性分析来开始吧。

亲和性分析

相信大家都听说过一个例子:

在美国的零售业有着这样一个传奇故事,沃尔玛百货将他们的纸尿裤和啤酒并排摆在一起销售,结果纸尿裤和啤酒的销量双双增长!

什么是亲和性分析呢?亲和性分析根据样本个体之间的关系,确定它们关系的亲疏。举一个简单的应用:顾客去超市买了一个苹果,那么他会不会很大的可能性去买香蕉呢?

首先,我们得有一个数据集:

这个是一个很简单的商品交易数据集,简单到它只有100条数据,尽管数据比较少,but我们用来学习一下还是可以的。

数据集的含义:

如果看一行的话,每一行如(0,1,0,0,1)可以代表每一条交易包含的商品,0代表没有购买,1代表购买。每一列代表一种商品。

那么我们需要找出他的什么数据含义规则呢?“如果一个顾客购买了商品A,则他很可能购买商品B”。找到这种规则很简单,找出交易数据中同时购买A商品和B商品的记录,然后与总的交易数量相比较即可。

规则有优劣,这里有两种衡量标准,支持度和置信度。(如果商品交易数据)

支持度:支持度指的是数据集中规则应验的次数。(商品交易中同时买A商品和B商品的交易数量【支持度也可以为次数/交易总量】)

置信度:置信度代表的是规则的准确性如何。(以例子来说,就是如果既买A商品又买B商品的数量除以买A商品的数量)

代码实现

使用的库如下:

numpy

collections

数据集在这里:data

首先我们需要加载数据集,数据的文件名为affinity_dataset.txt:

import numpy as np

data_filename = "affinity_dataset.txt"

datas = np.loadtxt(data_filename)

# 列的属性

features = ["面包", "牛奶", "黄油", "苹果", "香蕉蕉"]

数据集我们已经加载完毕,为了得到商品A和商品B的数据,在python中也就是(商品A,商品B)元组,我们需要进行遍历,然后将数据保存下来。

现在让我们来计算置信度。我们使用valid_rules字典来保存商品A和商品B同时存在的记录,使用invalid_rules来保存当商品A存在时,但是商品B不存在的记录。

valid_rules = defaultdict(int)

invalid_rules = defaultdict(int)

我们使用defaultdict来创建字典而不是使用常用的方式是因为:

这样的好处是即使在没有这个key的时候,它也会返回默认的值0。

我们定义一个方法,目的是为了统计A,B之间的关系。

# A 和 B之间的联系,返回购买A商品的数量

def connect(indexA, indexB):

buy_A_num = 0

for sample in datas:

if sample[indexA] == 0:

continue

buy_A_num += 1

if(sample[indexB] == 1):

valid_rules[(indexA, indexB)] += 1

else:

invalid_rules[(indexA, indexB)] += 1

return buy_A_num

方法,我们就可以获得需要的数据,现在我们可以计算置信度了。

def get_confidence():

confidence = defaultdict(float)

for premise, feature in valid_rules.keys():

rule = (premise, feature)

confidence[rule] = valid_rules[rule] / (valid_rules[rule]+invalid_rules[rule])

print("购买{0}后同时{1}的置信度为:{2:0.3f}".format(features[rule[0]],features[rule[1]],confidence[rule]))

return confidence

当然支持度怎么算,这个就太简单了,就是valid_rules里面的value除以数据总量即可,就不展示了。

运行代码,使用for循环将所有的关系都找出来,然后计算置信度:

if __name__ == "__main__":

for i in range(len(features)):

for j in range(len(features)):

if(i == j):

continue

connect(i,j)

confidence = get_confidence()

最后结果如下所示:

同样我们可以对置信度进行排序,字典的items()函数返回包含字典所有元素的列表。itemgetter(1)表示以字典各元素的值(这里为置信度)作为排序依据,reverse=True表示降序排列。

from operator import itemgetter

sort_dict = sorted(confidence.items(),key=itemgetter(1),reverse=True)

for index in range(5):

rule = sort_dict[index][0]

print("购买{0}后同时{1}的置信度为:{2:0.3f}".format(features[rule[0]],features[rule[1]],confidence[rule]))

结果如下图所示:

参考书籍:Python数据挖掘入门与实践

python亲和性分析_数据挖掘入门系列教程(一)之亲和性分析相关推荐

  1. graphviz 画决策树_数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iris

    数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iris 加载数据集 数据特征 训练 随机森林 调参工程师 结尾 数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iri ...

  2. 决策树 prepruning_数据挖掘入门系列教程(三点五)之决策树

    本来还是想像以前一样,继续学习< Python数据挖掘入门与实践 >的第三章"决策树",但是这本书上来就直接给我怼了一大串代码,对于决策树基本上没有什么介绍,可直接把我 ...

  3. python alpha策略_量化策略系列教程:04阿尔法策略

    Alpha.Alpha,天天就知道Alpha,今天就给你们上阿尔法喽~ 此处,添加一个掘金的论坛证经社量化社区 - 证经社地址,貌似更新的还蛮快的~ 1. 策略原理: 阿尔法策略:投资者在市场交易中面 ...

  4. 零基础数据挖掘入门系列(二) - 数据的探索性(EDA)分析

    思维导图:零基础入门数据挖掘的学习路径 1. 写在前面 零基础入门数据挖掘是记录自己在Datawhale举办的数据挖掘专题学习中的所学和所想, 该系列笔记使用理论结合实践的方式,整理数据挖掘相关知识, ...

  5. Linux pwn入门教程,pwn堆入门系列教程1

    pwn堆入门系列教程1 因为自己学堆的时候,找不到一个系统的教程,我将会按照ctf-wiki的目录一步步学下去,尽量做到每周有更新,方便跟我一样刚入门堆的人学习,第一篇教程研究了4天吧,途中没人指导. ...

  6. 零基础数据挖掘入门系列(三) - 数据清洗和转换技巧

    思维导图:零基础入门数据挖掘的学习路径 1. 写在前面 零基础入门数据挖掘是记录自己在Datawhale举办的数据挖掘专题学习中的所学和所想, 该系列笔记使用理论结合实践的方式,整理数据挖掘相关知识, ...

  7. PWN入门系列教程~(1)

    PWN入门系列教程~(1) 先来说下学习路线 大致分为以下几个部分 那么什么是PWN呢? 栈 函数调用栈 寄存器 函数调用栈的经典内存布局 先来说下学习路线 大致分为以下几个部分 学习基础:去学习一些 ...

  8. Power BI入门系列教程

    欢迎使用Power BI入门系列教程. 在接下来的4周里,我会向您介绍Excel和Power BI中最新和最强大功能的基本用法.如果您有着下面这些疑问: 想学习数据分析,不知道从什么工具入手? 从没有 ...

  9. 零基础数据挖掘入门系列(一) - 赛题理解

    思维导图:零基础入门数据挖掘的学习路径 1. 写在前面 零基础入门数据挖掘系列是记录自己在Datawhale举办的数据挖掘专题学习中的所学和所想, 该系列笔记使用理论结合实践的方式,整理数据挖掘相关知 ...

最新文章

  1. 非常全面的AutoML资源,看这个就够了!
  2. 用perl 实现 svn 差异备份
  3. 骁龙660是32位还是64位_都是搭载骁龙660处理器 这三款国产手机如何选
  4. Consul入门05 - 健康检测
  5. BZOJ 2716 [Violet 3]天使玩偶 (CDQ分治、树状数组)
  6. 在哪里编写写php,php扩展编写
  7. 023、JVM实战总结:一步一图:那JVM老年代垃圾回收器CMS工作时,内部又干了些啥?
  8. 用 Python 爬取了 14 年的福彩 3D 信息!彩民们,只能帮你们到这了
  9. fopen()函数的文件模式
  10. Nginx源码分析 - 核心模块初始化顺序,根据ctx创建上下文
  11. 中间人攻击 - 攻防
  12. SolidWorks机箱机柜钣金3D模型图档
  13. Android 配置SUPL
  14. java利用复循环洗牌算法_实现不重复取数两种算法(洗牌算法)
  15. java.lang.IllegalStateException: Fragment already added
  16. 华为p4支持鸿蒙功能吗_华为鸿蒙系统支持机型介绍
  17. python批量下载兰科植物网站的图片,并重命名文件
  18. python如何爬取网站所有目录_python 爬取网站的博客目录
  19. 10月18日~23日 产品
  20. 电脑硬盘如何分区 硬盘分区方法 电脑分区

热门文章

  1. HTML CSS JS实现网页聊天窗口,js实现聊天对话框
  2. 智能点餐小程序有哪些基本功能
  3. 文件拷贝命令至服务器,远程服务器拷贝文件命令
  4. 均值方差模型python_Python机器学习之“选择最优模型”
  5. 【DSP教程】第35章 FIR有限冲击响应滤波器设计
  6. 民间秘术——各类求仙方法
  7. python debugger extension_Pykd——Python extension for WinDbg
  8. 积分换元法中换元单调性问题的讨论
  9. 虚拟机启动时,提示找不到ISO映像文件
  10. 用引导对象生成图像描述(Intention Oriented Image Captions with Guiding Objects 翻译)