数据挖掘之关联分析(实验展示以及源代码)

article/2025/10/13 1:10:50

数据挖掘之关联分析

    • 算法实现:Apriori算法和FP-growth 算法
    • 源代码

简单描述下,关联分析概念
关联分析概念主要参考下面的博文
原文:https://blog.csdn.net/qq_40587575/article/details/81022350

关联分析是从大量数据中发现项集之间有趣的关联和相关联系,而关联分析的最终目标就是要找出强关联规则。
•关联分析的基本概念:
1、事务:每一条交易称为一个事务,如上图包含5个事务。
2、项:交易的每一个物品称为一个项,例如豆奶,啤酒等。 
3、项集:包含零个或多个项的集合叫做项集,例如{尿布,啤酒}。
4、k−项集:包含k个项的项集叫做k-项集,例如 {豆奶,橙汁}叫做2-项集。
5、支持度计数:一个项集出现在几个事务当中,它的支持度计数就是几。
例如{尿布, 啤酒}出现在事务002、003和005中,所以 它的支持度计数是3。
6、支持度:支持度计数除于总的事务数。
例如上例中总的事务数为5,{尿布, 啤酒}的支持度计数为3,所以它的支持度是 3÷5=60%,说明有60%的人同时买了尿布, 啤酒。
7、频繁项集:支持度大于或等于某个阈值的项集就叫做频繁项集。例如阈值设为50%时,因为{尿布,啤酒}的支持度是60%,所以 它是频繁项集。
8、前件和后件:对于规则{尿布}→{啤酒},{Diaper}叫做前件,{啤酒}叫做后件。
9、置信度:对于规则{尿布}→{啤酒},{尿布,啤酒}的支持度计数除于{尿布}的支持度计数,为这个规则的置信度。

   例如规则{尿布}→{啤酒}的置信度为3÷3=100%。说明买了尿布的人100%也买了啤酒。

10、强关联规则:大于或等于最小支持度阈值和最小置信度阈值的规则叫做强关联规则

算法实现:Apriori算法和FP-growth 算法

其余的基本概念可以去其他博客大佬们观摩啦!

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

接下来,就是我自己的实验内容,我主要写的是一个关于关联分析的实验例子:
首先先引入各种包,再读取数据,数据用的虚拟伪造“泰塔号”事故的数据集(一共700条数据),主要目的是关联分析“泰塔号”船上的乘客的一些属性的关系
第一,是有无船舱(cabin),第二,是船的费用大于10¥和小于10¥的关联(fare),第三,是否生还(survived)

下面是引入包,还有读取csv格式的数据,最后组合三种属性成为3个元祖。

import csv
import pandas as pd
import sys
import numpy as np#读取892行数据
Survived = pd.read_csv('f:/train.csv', usecols=['Survived'],nrows=892)data_category1 = Survived.values
List_category1 = []
for k in data_category1: for j in k: List_category1.append(j)
Cabin = pd.read_csv('f:/train.csv', usecols=['Cabin'],nrows=892)
data_category2 = Cabin.values
List_category2 = []
for k in data_category2: for j in k: List_category2.append(j)
Fare = pd.read_csv('f:/train.csv', usecols=['Fare'],nrows=892)
data_category3 = Fare.values
List_category3 = []
for k in data_category3: for j in k: List_category3.append(j)#组合3个元祖
z = list(zip(List_category1,List_category2,List_category3))

对数据进行处理,有无生还(1为存活,空为狗带),有无船舱(1为有,空为无),费用fare(fare大于10,和小于10的)。

#将数量转化成商品名称
#fare大于10则输入数据,否则删除数据
#survived和cabin则通过判断是否为空来输入或删除数据
for k in z1:index = z1.index(k)if k[2] >10:z2[index][2] = 'Fare'else:del z2[index][2]if k[1] == k[1]:z2[index][1] = 'Cabin'else:del z2[index][1]if k[0] == k[0]:z2[index][0] = 'Survived'else:del z2[index][0] 
pass

最后我们打印各级的项集:

if __name__ == "__main__":"""Test"""data_set = load_data_set()L, support_data = generate_L(data_set, k=3, min_support=0.1)#将限制概率调制0.6,低于0.6不显示big_rules_list = generate_big_rules(L, support_data, min_conf=0.6)for Lk in L:print("="*50)print("frequent " + str(len(list(Lk)[0])) + "-itemsets\t\tsupport")print("="*50)for freq_set in Lk:print(freq_set, support_data[freq_set])printprint("Big Rules")for item in big_rules_list:print(item[0], "=>", item[1], "conf: ", item[2])

在这里插入图片描述
最后,得出结果是:
可以看出,{1-项集}中,船票价格fare大于10美元的人是70%,存活率是58.7%,有船舱住的人是34%.
{2-项集}中,我们主要关注,船票价格fare大于10美元的人且存活的是45.2%,有船舱住的人且存货的是21.4%
{3-项集}中,船票价格fare大于10美元的人且存货的人,概率高达77.1%,我们再次调整fare的价格限制为20美元,概率也有67%,可见船票价格fare大于10美元的人与是否存活有着一定关系。同时,有船舱的人他们的船票价格fare大于10美元的概率是97.3%,可见船上大于10美元的船舱是占巨大的比例。
在这里插入图片描述

源代码

import csv
import pandas as pd
import sys
import numpy as np#读取892数据
Survived = pd.read_csv('f:/train.csv', usecols=['Survived'],nrows=892)data_category1 = Survived.values
List_category1 = []
for k in data_category1: for j in k: List_category1.append(j)
Cabin = pd.read_csv('f:/train.csv', usecols=['Cabin'],nrows=892)
data_category2 = Cabin.values
List_category2 = []
for k in data_category2: for j in k: List_category2.append(j)
Fare = pd.read_csv('f:/train.csv', usecols=['Fare'],nrows=892)
data_category3 = Fare.values
List_category3 = []
for k in data_category3: for j in k: List_category3.append(j)#组合3个元祖
z = list(zip(List_category1,List_category2,List_category3))#将元祖转换为列表
for c in z:z[z.index(c)] = list(c)
pass
z1 = z.copy()#删除有两个空值的列表
for h in z1:index = z1.index(h)if h[0] != h[0] and h[1] != h[1]:del z1[index]continueelif h[0] != h[0] and h[2] != h[2]:del z1[index]continueelif h[1] != h[1] and h[2] != h[2]:del z1[index]continue
passz2 = z1.copy()#将数量转化成商品名称
for k in z1:index = z1.index(k)if k[2] >15:z2[index][2] = 'Fare'else:del z2[index][2]if k[1] == k[1]:z2[index][1] = 'Cabin'else:del z2[index][1]if k[0] == k[0]:z2[index][0] = 'Survived'else:del z2[index][0]passprint(z2)def load_data_set():data_set = z1return data_setdef create_C1(data_set):C1 = set()for t in data_set:for item in t:item_set = frozenset([item])C1.add(item_set)return C1def is_apriori(Ck_item, Lksub1):for item in Ck_item:sub_Ck = Ck_item - frozenset([item])if sub_Ck not in Lksub1:return Falsereturn Truedef create_Ck(Lksub1, k):Ck = set()len_Lksub1 = len(Lksub1)list_Lksub1 = list(Lksub1)for i in range(len_Lksub1):for j in range(1, len_Lksub1):l1 = list(list_Lksub1[i])l2 = list(list_Lksub1[j])l1.sort()l2.sort()if l1[0:k-2] == l2[0:k-2]:Ck_item = list_Lksub1[i] | list_Lksub1[j]if is_apriori(Ck_item, Lksub1):Ck.add(Ck_item)return Ckdef generate_Lk_by_Ck(data_set, Ck, min_support, support_data):Lk = set()item_count = {}for t in data_set:for item in Ck:if item.issubset(t):if item not in item_count:item_count[item] = 1else:item_count[item] += 1t_num = float(len(data_set))for item in item_count:if (item_count[item] / t_num) >= min_support:Lk.add(item)support_data[item] = item_count[item] / t_numreturn Lkdef generate_L(data_set, k, min_support):support_data = {}C1 = create_C1(data_set)L1 = generate_Lk_by_Ck(data_set, C1, min_support, support_data)Lksub1 = L1.copy()L = []L.append(Lksub1)for i in range(2, k+1):Ci = create_Ck(Lksub1, i)Li = generate_Lk_by_Ck(data_set, Ci, min_support, support_data)Lksub1 = Li.copy()L.append(Lksub1)return L, support_datadef generate_big_rules(L, support_data, min_conf):big_rule_list = []sub_set_list = []for i in range(0, len(L)):for freq_set in L[i]:for sub_set in sub_set_list:if sub_set.issubset(freq_set):conf = support_data[freq_set] / support_data[freq_set - sub_set]big_rule = (freq_set - sub_set, sub_set, conf)if conf >= min_conf and big_rule not in big_rule_list:big_rule_list.append(big_rule)sub_set_list.append(freq_set)return big_rule_listif __name__ == "__main__":"""Test"""data_set = load_data_set()L, support_data = generate_L(data_set, k=3, min_support=0.1)big_rules_list = generate_big_rules(L, support_data, min_conf=0.6)for Lk in L:print("="*50)print("frequent " + str(len(list(Lk)[0])) + "-itemsets\t\tsupport")print("="*50)for freq_set in Lk:print(freq_set, support_data[freq_set])printprint("Big Rules")for item in big_rules_list:print(item[0], "=>", item[1], "conf: ", item[2]

http://chatgpt.dhexx.cn/article/Qdg1RyDb.shtml

相关文章

【数据分析入门】python数据分析-探索性数据分析之多因子与对比分析可视化

文章目录 多因子与对比分析可视化理论基础假设检验与方差检验假设检验方差检验 相关系数:皮尔逊、斯皮尔曼回归:线性回归PCA与奇异值分解 代码实践交叉分析分组分析相关分析因子分析 总结代码实现 相关性线性回归PCA注意:sklearn中pca用的方法是奇异值分解的方法&am…

数据分析系列之挖掘建模

经过数据探索与数据预处理,得到了可以直接建模的数据,根据挖掘目标和数据形式可以建立分类与预测,聚类分析,关联规则,时序模式和偏差检测等模型,帮助企业提取数据中的商业价值. 分类与预测 对于之前的背景假设,餐饮企业会经常遇到如下问题: 如何基于菜品历史销售情况,以及节…

【大数据分析与挖掘】挖掘建模之关联分析

文章目录 一、关联规则1.1 常用的关联规则算法1.2 Apriori算法介绍1.2.1 关联规则与频繁项集1.2.2 Apriori算法的思想与性质1.2.3 Apriori算法的实现的两个过程1.2.4 Apriori算法的实现案例 一、关联规则 关联规则分析也成为购物篮分析,最早是为了发现超市销售数据…

Hands-on-data-analysis 动手数据分析

动手数据分析笔记 第一章 第一节 数据载入及初步观察 数据载入 df pd.read_csv(file_path)df2 pd.read_table(file_path)read_csv 函数 见CSDN 博客: https://blog.csdn.net/weixin_39175124/article/details/79434022 问:read_csv 和 read_table …

python数据分析-因子分析(转载)

python数据分析-因子分析(转载) (获取更多知识,前往前往我的wx ————公z号 (程式解说) 原文来自python数据分析-因子分析

ThreeJs 数据可视化学习扫盲

一:前言 数据可视化是一个跨领域的行业,其中包含了图形学、数学、视觉传达等专业领域。 下图罗列出了一个简单的学习方向。 二:可视化方案以及学习路线 目前采用的是比较成熟,社区活跃度更高的Three.js,它是一个开源…

数据处理以及Hive数据分析

数据处理以及Hive数据分析 一、pandas进行数据预处理【1】待处理的一部分数据【2】原始数据文件的格式说明【3】数据预处理要求【4】 处理完成的数据字段说明【5】 实验方法使用pandas进行数据预处理 【6】解析题意【7】代码展示(1)读取文件(…

Python交互式数据分析报告框架~Dash介绍

原文作者:Plotly,Chris Pamer 原文链接: https://link.jianshu.com/?thttps%3A%2F%2Fmedium.com%2F%40plotlygraphs%2Fintroducing-dash-5ecf7191b503 译者序:原文于2017年6月21日发布,时过半载,将这篇既不是教程…

CESI: Canonicalizing Open Knowledge Bases using Embeddings and Side Information

开放性知识库的规范化(个人理解:这里的规范化实际上就是将相同语义的实体或关系聚集在一起,从而表示一个实体或关系),主要是OPENie提取的过程中没有进行区分,最近的研究发现,开放KBS的规范化实际…

计算机一级仿宋gb2312,仿宋gb2312字体

一般情况下,这款软件在试用的过程可能还有点小问题,但是正所谓瑕不掩瑜,相信用不了多久,只要程序猿给力点,这种小小的反馈不爽就可以解决。 仿宋gb2312字体字体简介 仿宋_GB2312字体是印刷字体的一种 ,仿照…

Supervisor部署(离线部署需要提前下载部署包)

1.软件准备 下载tar包:wget https://pypi.python.org/packages/source/s/supervisor/supervisor-3.1.3.tar.gz 解压:tar -xvf supervisor-3.1.3.tar.gz 进入解压包:cd supervisor-3.1.3 开始安装:python setup.py install 下载me…

Docker 学习之 Docker 容器数据卷

容器数据卷 什么是容器数据卷 docker 理念回顾 将应用和环境打包成一个镜像! 问题:数据?如果数据都在容器中,那么我们删除容器,数据就会丢失!需求:数据可以持久化! 容器之前可以…

Supervisor 安装与配置

文章目录 Supervisor 安装与配置一、介绍二、名词释义三、Supervisor 安装三、Supervisor 配置四、启动控制终端五、注册为系统服务六、管理界面1、管理界面的弊端 Supervisor 安装与配置 一、介绍 ​ Supervisor 是用Python开发的一个 client/server 服务,是Linu…

使用Cesi+Supervisor实现进程管理

使用CesiSupervisor实现进程管理 相信很多的运维小伙伴都是饱受进程丢失的痛苦,最怕半夜被手机吵醒,那一定是经理想你 不管进程是前台运行还是后台静默运行,我们都需要能监控其进程状态。 原因有三: 一,在意外结束时…

echarts学习笔记1

可视化面板介绍 ​ 应对现在数据可视化的趋势,越来越多企业需要在很多场景(营销数据,生产数据,用户数据)下使用,可视化图表来展示体现数据,让数据更加直观,数据特点更加突出。 [外链图片转存失败,源站可能…

supervisor集群管理

1.介绍 Supervisor是一个进程管理工具,就是有一个进程需要每时每刻不断的运行,但是这个进程又有可能由于各种原因有可能停止运行。supervisor官网:http://www.supervisord.org/ 当进程停止运行的时候我们希望能自动重新启动,Super…

UOS桌面操作系统专业版字体

fc-list |sort| awk {print $1 } |uniq| wc -l cesi授权的字体 /usr/share/fonts/fonts-cesi/CESI_FS_GB13000.TTF: CESI仿宋\-GB13000,CESI_FS_GB13000:styleRegular /usr/share/fonts/fonts-cesi/CESI_FS_GB18030.TTF: CESI仿宋\-GB18030,CESI_FS_GB18030:styleRegular /…

罗马仕荣获中国质量认证中心、CESI颁发的全国首批“双新认证”证书

2022年11月25日,2022(冬季)亚洲户外电源大会于深圳市南山区科兴科学园ECO国际会议中心举办。本次大会由中国电子技术标准化研究院、北京京东世纪贸易有限公司、充电头网、全国电子产品安全标准化技术委员会、工信部锂离子电池及类似产品标准化…

supervisor 的 web 管理工具 cesi

一、supervisor 配置 说明:如果只是使用 supervisor 自带的 web,仅如下配置就可以vim /etc/supervisor/supervisord.conf[inet_http_server] ; inet (TCP) server disabled by default port192.168.5.149:9001 ; ip_address:port specif…

管理ELK进程工具: Supervisor Cesi

一、Supervisor简介 supervisor是一个Linux/Unix系统上的进程监控工具,supervisor是一个Python开发的通用的进程管理程序,可以管理和监控Linux上面的进程,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常…