前言

本实例采用python3环境,编辑器采用Jupyter Notebook,安装使用方法请参考,本实例中所用到的附件内容放在文末,如果想要自行运行一下代码,可以尝试一下。
Jupyter Notebook介绍、安装及使用教程

亲和性分析示例

终于迎来了第一个数据挖掘的例子,我们拿这个亲和性分析的示例来具体看下数据挖掘到底
是怎么回事。数据挖掘有个常见的应用场景,即顾客在购买一件商品时,商家可以趁机了解他们
还想买什么,以便把多数顾客愿意同时购买的商品放到一起销售以提升销售额。当商家收集到足
够多的数据时,就可以对其进行亲和性分析,以确定哪些商品适合放在一起出售。

实例代码和注释

import numpy as np #导入numpy库,并在下面调用时简写为np
dataset_filename = "affinity_dataset.txt"
#将txt文件内容赋值给变量dataset_filename
#使用numpy库的loadxt方法,读取txt文件,将读取后的内容赋值给变量X。此时的X存储的是一个数据集,例如
#[[1,2,3],
# [4,5,6]]
X = np.loadtxt(dataset_filename)
#每一个X都有一个shape属性,是对X向量的描述,samples指样本,features指特征
# X:shape(n_samples,n_features)
# eg:x:[[1,2,3],[4,5,6]]
#     n_samples:2
#     n_features:3
n_samples, n_features = X.shape
#输出数据集中有多少个样本多少个特征
print("这个数据集有 {0} 样本和{1} 个特征".format(n_samples, n_features))

运行结果

print(X[:5])#输出数据集中前5个数据

运行结果

features = ["bread", "milk", "cheese", "apples", "bananas"]# 定义一个由5种商品组成的数组
# 首先,这些行都有一个前提:一个人买苹果
num_apple_purchases = 0 #设置购买苹果次数的初值为0
for sample in X:        #for循环利用数据集X中的数据表示多次购买if sample[3] == 1:  # 因为在features数组中苹果的索引为3,所以sample[3]==1表示这个人买苹果num_apple_purchases += 1  #每当有人购买苹果时,购买苹果的次数加一
print("{0}个人买了苹果".format(num_apple_purchases)) #输出循环结束后购买苹果的次数

运行结果

# 一个人买苹果的案例中有多少与买香蕉的人有关?
# 记录规则有效和无效的两种情况。
rule_valid = 0    #定义变量rule_valid,记录有效的情况
rule_invalid = 0  #定义变量rule_invalid,记录无效的情况
for sample in X:  #for循环利用数据集X中的数据表示多次购买if sample[3] == 1:  # 如果这个人买苹果if sample[4] == 1:   #如果这个人还买了香蕉# 如果这个人买了苹果和香蕉,规则有效的情况加一rule_valid += 1else:# 如果这个人买了苹果,没有买香蕉,规则无效的情况加一rule_invalid += 1
# 输出规则有效出现的次数
print("{0} 次发现了该规则有效的案例".format(rule_valid))
# 输出规则无效出现的次数
print("{0} 次发现了该规则无效的情况".format(rule_invalid))

运行结果

# 现在我们有了计算支持度和置信度所需的所有信息
support = rule_valid  # Support是发现规则的次数,即置信度。
# 发现规律的次数除以购买苹果总的次数得到规律得到支持度confidence
confidence = rule_valid / num_apple_purchases
# 输出发现规则的次数和计算所得的支持度
print("支持度为 {0} 并且置信度为 {1:.3f}.".format(support, confidence))
# 支持度可以用以下公式表示为百分比:
print("按百分比算,置信度为 {0:.1f}%.".format(100 * confidence))

运行结果

from collections import defaultdict  #导入defaultdict库
# 现在计算所有可能的规则
#用defaultdict(int)设置默认类型为int,初始值为0,用于计数
valid_rules = defaultdict(int)
invalid_rules = defaultdict(int)
num_occurences = defaultdict(int)
for sample in X:for premise in range(n_features): # n_features在这里表示的是一个人买商品的个数,买了几个商品就循环几次if sample[premise] == 0: continue # 判断该行的某一列元素是否位0,即是否购买,若为0,跳出本轮循环,测试下一列# 记录有购买的一列num_occurences[premise] += 1for conclusion in range(n_features): #当读取到某一列有购买后,再次循环每一列的值if premise == conclusion:  #排除相同的一列,若循环到同一列,则跳出循环,比较下一列continueif sample[conclusion] == 1:  #当sample[conclusion] 的值为1时,满足了当顾客购买前一件商品时也买了这种商品#记录下该规则出现的次数valid_rules[(premise, conclusion)] += 1else:#当不满足时即 sample[conclusion]=0 时,记录下不满足该规则的次数invalid_rules[(premise, conclusion)] += 1
support = valid_rules #支持度=规则出现的次数
confidence = defaultdict(float) #强制将置信度转为浮点型#计算某一规则的置信度,并将其存在字典confidence中
for premise, conclusion in valid_rules.keys():confidence[(premise, conclusion)] = valid_rules[(premise, conclusion)] / num_occurences[premise]
for premise, conclusion in confidence: #根据字典的两个参数来取值premise_name = features[premise] #我们之前定义了features列表,它的每一列都对应数组的每一列,即商品名称conclusion_name = features[conclusion] #商品名称# 输出规则、支持度与置信度print("规律: 如果一个人买了 {0} 那他也会买 {1}".format(premise_name, conclusion_name))print(" - 支持度: {0:.3f}".format(confidence[(premise, conclusion)]))print(" - 置信度: {0}".format(support[(premise, conclusion)]))print("")

运行结果

def print_rule(premise, conclusion, support, confidence, features): #定义函数,用于输出规则‘支持度与置信度premise_name = features[premise] #我们之前定义了features列表,它的每一列都对应数组的每一列,即商品名称conclusion_name = features[conclusion] #商品名称# 输出规律、支持度与置信度print("规律: 如果一个人买了 {0} 那他也会买 {1}".format(premise_name, conclusion_name))print(" - 支持度: {0:.3f}".format(confidence[(premise, conclusion)]))print(" - 置信度: {0}".format(support[(premise, conclusion)]))print("")
premise = 1
conclusion = 3
# 调用函数输出规则
print_rule(premise, conclusion, support, confidence, features)

运行结果

# 按支持排序
# pprint()模块打印出来的数据结构更加完整,每行为一个数据结构,更加方便阅读打印输出结果
from pprint import pprint  #导入pprit模块
pprint(list(support.items())) #完整打印出list(support.items())

运行结果

from operator import itemgetter #导入itemgetter模块
# 对class_counts字典进行排序,找到最大值,就能找出具有给定特征值的个体在哪个类别中出现次数最多
sorted_support = sorted(support.items(), key=itemgetter(1), reverse=True)
#  对置信度字典进行排序后,输出置信度最高的前五条规则
#用for循环输出规则
for index in range(5):  print("规律 #{0}".format(index + 1))(premise, conclusion) = sorted_support[index][0]print_rule(premise, conclusion, support, confidence, features)

运行结果

# 输出置信度最高的规则。首先根据置信度进行排序
sorted_confidence = sorted(confidence.items(), key=itemgetter(1), reverse=True)
#  对置信度字典进行排序后,输出置信度最高的前五条规则
#(ps:这15和13不是一模一样的吗,什么鬼)#用for循环输出规则
for index in range(5):  print("Rule #{0}".format(index + 1))(premise, conclusion) = sorted_confidence[index][0]print_rule(premise, conclusion, support, confidence, features)

运行结果

附件:affinity_dataset.txt

将下面的数据复制粘贴到txt文件中并命名为affinity_dataset.txt即可

0 0 1 1 1
1 1 0 1 0
1 0 1 1 0
0 0 1 1 1
0 1 0 0 1
0 1 0 0 0
1 0 0 0 1
1 0 0 0 1
0 0 0 1 1
0 0 1 1 1
1 1 0 0 1
0 1 0 0 0
0 0 0 0 1
0 0 1 0 1
0 1 0 0 1
0 0 1 1 1
1 0 0 0 1
0 0 1 1 1
1 1 0 0 0
0 1 0 0 0
0 0 1 0 0
0 1 0 0 1
0 1 0 0 0
0 1 0 0 1
0 0 1 1 1
0 0 1 1 0
0 0 1 0 1
0 0 0 0 1
0 1 0 0 0
0 1 0 1 0
1 1 1 0 1
1 1 0 0 1
0 0 1 1 1
0 0 1 0 1
0 0 1 1 1
0 0 1 1 0
0 1 1 0 1
0 0 1 1 0
0 1 0 0 1
0 0 0 0 1
0 0 1 0 1
1 1 0 1 1
1 0 0 0 1
0 0 1 1 1
0 1 0 0 0
0 1 0 1 1
0 1 0 0 0
0 1 0 0 0
0 0 1 1 0
0 0 1 1 1
0 1 0 1 0
0 1 1 0 0
0 0 1 1 0
0 0 1 1 1
1 0 0 0 0
0 1 0 1 0
1 0 0 0 1
0 1 0 0 0
0 0 0 0 1
0 0 1 1 1
0 1 1 1 1
1 1 0 0 0
0 0 1 0 1
1 0 0 0 1
1 1 0 0 0
0 1 1 0 0
0 0 0 0 1
0 1 0 0 0
0 0 1 1 1
0 1 0 0 1
1 0 0 0 1
1 0 0 0 1
0 1 0 0 1
0 0 1 1 1
1 0 1 0 1
1 1 0 0 1
0 1 0 0 1
1 1 1 0 1
0 0 1 1 1
1 0 0 0 0
0 0 1 1 1
1 1 0 1 0
0 0 1 0 0
0 0 1 0 1
0 1 0 0 0
1 1 0 0 0
0 0 0 1 0
0 0 0 1 1
0 1 0 0 0
0 1 0 0 0
1 1 0 0 1
0 0 1 0 0
0 1 0 0 1
1 1 0 1 0
1 0 0 0 1
0 1 0 0 0
0 0 1 1 0
0 1 1 0 0
0 0 1 1 0
0 0 0 0 1

数据挖掘实例1:亲和性分析示例(代码、注释、运行结果)相关推荐

  1. python数据挖掘(1.亲和性分析)

    python数据挖掘(1.亲和性分析) 数据源(python数据挖掘文件下的chapter1) 亲和性分析 亲和性分析根据样本之间的相似度,确定他们关系的亲疏. 下面我们说一个非常常见的应用场景,顾客 ...

  2. linux 内存 实例,linux内存地址分配(示例代码)

    32位下的内存地址分布图如下:1g为内核空间,3g为用户空间 内核空间:内核空间表示运行在处理器最高级别的超级用户模式(supervisor mode)下的代码或数据,内核空间占用从0xC000000 ...

  3. OpenCV的视频背景/前景分割(背景建模/前景提取)类cv::bgsegm::BackgroundSubtractorGSOC的使用示例代码及运行效果

    关于类cv::bgsegm::BackgroundSubtractorCNT的大概情况,我已在博文https://blog.csdn.net/wenhao_ir/article/details/125 ...

  4. 利用机器学习分析脑电数据(原理分析+示例代码+快速上手)

    由于本人对于脑机接口以及脑电技术的极度爱好(其实目的是:是把U盘插到大脑里,然后就不用学习了哈哈哈哈),近几月看了较多这方面的内容,变打算写下博客总结分析一下. 目录 一.  机器学习分析简介 二.机 ...

  5. ARM架构处理器MT6572的LK(可以理解为UBOOT)uart串口驱动分析【代码注释】

    提示:      分析注释的部分,一般都会字体加粗或设置为红色字体. 本文包含如下代码:       mediatek/platform/mt6572/lk/platform.c       medi ...

  6. java人名识别_HanLP中人名识别分析(示例代码)

    HanLP中人名识别分析 在看源码之前,先看几遍论文<基于角色标注的中国人名自动识别研究> 关于命名识别的一些问题,可参考下列一些issue: HanLP参考博客: 分词 分词:给定一个字 ...

  7. linux socket bind 内核详解,Socket与系统调用深度分析(示例代码)

    1. 什么是系统调用 操作系统通过系统调用为运行于其上的进程提供服务.当用户态进程发起一个系统调用, CPU 将切换到 内核态 并开始执行一个 内核函数 . 内核函数负责响应应用程序的要求,例如操作文 ...

  8. vsftp日志查看_vsftp日志xferlog格式分析(示例代码)

    1.开始vsftp记录日志.修改/etc/vsftpd/vsftpd.conf 如下: xferlog_enable=YES xferlog_std_format=YES xferlog_file=/ ...

  9. cocos2dx显示html,cocos2dx-js 初探 整体流程helloworld.html分析(示例代码)

    我们下载的是cocos2dx-js的精简版本,主要是为了分析简单明了,能更清楚的看到架构流程. 下载地址: http://cocos2d-x.org/filecenter/jsbuilder/ 下载轻 ...

  10. kestrel web服务器性能对比,netcore高性能Web服务器Kestrel分析(示例代码)

    Kestrel是aspnetcore中的web服务器之一,其本身有跨平台,轻量级,高性能的特点 在 ryzen 1600 12核cpu 测试环境中,瞬间每秒处理请求数能达到2w5以上,与netty不相 ...

最新文章

  1. 移动端— position: fixed;固定定位解决方案
  2. 016 在大数据中,SSH无密钥登录
  3. .Net 中HashTable,HashMap 和 Dictionarykey,value 和ListT和DataTable的比较
  4. 订单额-销售额-回款额的关系您理清楚了吗?
  5. spring boot pom配置_125 SpringCloud服务配置中心
  6. go语言核心编程_Go核心编程 - 语言特性(1)
  7. 1.uniq去重命令讲解
  8. mezzanine安装配置
  9. poj 2051 Argus(优先队列)
  10. 全局照明算法基础——从辐射亮度到渲染方程
  11. 超线程_超线程加核显 i310100+梅捷H410超值爆款组合
  12. 游戏开发之类的初始化成员列表和委托构造函数(C++基础)
  13. IFormatProvider,ICustomFormatter,IFormattable总结
  14. 前端js下载mp4、flv格式的文件流
  15. windows下的文件服务器监控
  16. Git报错:/c/Users/zhouy/AppData/Roaming/npm/hexo: line 12: node: command not found
  17. 华为magic ui就是鸿蒙系统,Magic UI系统是什么?Magic UI和EMUI的区别
  18. 3分钟学会使用Elasticsearch跨集群复制功能(CCR)
  19. 佳能G4810彩色喷墨打印机更换墨盒
  20. prlooks插件下载_Looks 调色预设大合集(Mac/Win)Preset Looks Pack for Magic Bullet Looks

热门文章

  1. 山东法律学校97级二班计算机班,关于表彰全国三好学生、全国优秀学生干部和全国先进班集体及其标兵的决定...
  2. 电机与拖动知识点及试题
  3. CAD 绘图如何有效的控制精度?
  4. 安卓盒子root--包好
  5. 吉林大学珠海学院计算机录取分数线,大学介绍 | 吉林大学珠海学院(附录取分数线,重点专业)...
  6. 盘点python socket 中recv函数的坑
  7. 十进制计算机算法,计算机知识--二进制,十进制,十六制算法
  8. WINAPI中URLDownloadToFile头文件问题
  9. EBS财务模块表结构
  10. Burpsuite1.7.03网站渗透神器最新破解版