统计物料A与B同时出现的概率,Apriori算法,关联性分析

该任务主要是根据一次拣货的数据,来进行物料之间的关联性分析。从大规模数据集中寻找物品间的隐含关系被称作关联分析(association analysis)或者关联规则学习(association rule learning)。以前沃尔玛就是用关联性分析去得出啤酒和纸尿裤一起被购买的关联性。但这里的主要问题在于,如果数据量较大,寻找物品的不同组合是一项十分耗时的任务,所需的计算代价很高,蛮力搜索方法并不能解决这个问题,所以需要用更智能的方法在合理的时间范围内找到频繁项集。

而本文所要求得物料A与B同时出现的概率,其实是求频繁项的概率。该任务中,主要是求频繁出现的两件物料,具体是哪两件物料未知,需要对数据进行统计分析才可以得知。
在关联分析中,频繁项集(frequent item sets)是指那些经常出现在一起的物品集合。关联规则(association rules)暗示两种物品之间可能存在很强的关系。

关联性分析中的支持度和可信度定义。一个项集的支持度(support)被定义数据集中包含该项集的记录所占的比例。支持度是针对项集来说的,因此可以定义一个最小支持度,而只保留满足最小值尺度的项集。这里的支持度,相当于求同时出现的概率。可信度或置信度(confidence)是针对关联规则来定义的。这里的可信度相当于求条件概率。

考虑到任务所提供的数据量较大,而且物料的种类数量较多,这里就考虑使用关联分析中最经典的算法----Apriori算法去进行数据分析。

一种所谓的Apriori原理,可以帮助我们减少计算量。Apriori原理是说如果某个项集是频繁的,那么它的所有子集也是频繁的。更常用的是它的逆否命题,即如果一个项集是非频繁的,那么它的所有超集也是非频繁的。

Apriori算法的主要思想有点类似于剪枝,从而大大减少计算量。

1、使用Apriori算法来发现频繁集:

关联分析的目标包括两项:发现频繁项集和发现关联规则。首先需要找到频繁项集,然后才能获得关联规则(正如前文所讲,计算关联规则的可信度需要用到频繁项集的支持度)。

Apriori算法是发现频繁项集的一种方法。Apriori算法的两个输入参数分别是最小支持度和数据集。该算法首先会生成所有单个元素的项集列表。接着扫描数据集来查看哪些项集满足最小支持度要求,那些不满足最小支持度的集合会被去掉。然后,对剩下来的集合进行组合以生成包含两个元素的项集。接下来,再重新扫描交易记录,去掉不满足最小支持度的项集。该过程重复进行直到所有项集都被去掉。

目前任务所需要的数据主要是来源于SQL Server,而且是测试数据。前期需要对数据进行预处理,然后在对处理过后的数据进行分析。
(1)数据预处理:
利用SQL语句去除确实数据的订单记录,如下:

SELECT RequestID, MaterialCode FROM [dbo].[WMS_Out_RequestOccupiedDetail] WHERE CreateDateTime like '%2020%' and IsDel = 0 and MaterialCode is not null and RequestID is not null

这条SQL语句主要用于查询出2020年所有的订单记录,一共有178870条。当然,这些是在去除full值之后出来的查询结果。查询结果主要包含需要分析的两列,一列是RequestID,一列是MaterialCode。

然后在Navicat Premium 导出为xlsx格式的文件,最后使用Python来进行分析。

Python已经有apriori库函数,可以直接安装之后再调用。
目前我使用的是anaconda+Python3.8编程环境,apriori的安装相当简单,就是一句命令:

Pip install apyori

下面是Python代码:

import pandas as pd
from apyori import apriori
data = pd.read_excel('AB2020.xlsx')
data = data.drop_duplicates()
data = data.astype(str)
itemSets = []
groups = data.groupby(by='RequestID')
for group in groups:itemSets.append(group[1]['MaterialCode'].tolist())dataSet = itemSets
result = list(apriori(transactions = dataSet,min_support = 0.5,max_length = 3))
Result

这里设置的最低支持度为50%(也就是同时出现的概率为50%),最多的物料种类为3(也就是同时出现的物料种类为3)。

得到的结果如下:

统计物料A与B同时出现的概率,Apriori算法,关联性分析相关推荐

  1. 数据分析的统计方法选择小结(变量之间的关联性分析)

    数据分析的统计方法选择小结(变量之间的关联性分析) 一.两个变量之间的关联性分析 1.两个变量均为连续型变量 1)小样本并且两个变量服从双正态分布,则用Pearson相关系数做统计分析 2)大样本或两 ...

  2. c语言统计26个英文字母各出现个数,网上答案汇总与分析——【输入一串英文,统计各单词出现的个数】...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include void main() { char english[200]={'\0'}; //即要输入的英文. char all ...

  3. erp物料报废 oracle_ERP核心业务流程和Oracle-ERP业务和数据对象分析

    作者:人月神话,新浪博客同名 简介:多年SOA规划建设,私有云PaaS平台架构设计经验,长期从事一线项目实践 今天简单整理下原来整理过的ERP核心业务流程和Oracle-ERP核心业务功能和数据对象分 ...

  4. 统计行业板块内涨停板数量,跟踪热点板块!股票量化分析工具QTYX-V2.6.0

    前言‍‍ QTYX系统结构如下所示: 功能概述 目前A股市场的股票每天是有限制最大涨幅的,也就是涨停的概念.比如主板个股最大涨幅是10%,创业板个股最大涨幅是20%等. 对于个股而言并不是随随便便就能 ...

  5. c语言字符统计2sdut,山东理工大学SDUT - ACM OJ 题: Python代码 及分析

    Python基础语法学习完成,先刷基础题100道巩固 ,附 题目.代码.知识分析 题目:http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index ...

  6. 概率统计与随机过程(1)——随机事件与概率(1):概率的计算

    1.1  随机事件 设以下大写英文字母均为样本空间Ω中的事件,则 事件的运算定律 分配律图示 De Morgan律的证明 1.2  概率 一.古典定义 设古典概型试验的所有结果为,,-,.若事件A恰包 ...

  7. 统计学习方法第十八章作业:PLSA 概率潜在语义分析算法 代码实现

    PLSA 概率潜在语义分析 import numpy as np import collections import jiebaclass PLSA:def __init__(self,text_li ...

  8. 统计学习方法第十七章作业:LSA潜在语义分析算法 代码实现

    LSA潜在语义分析算法 import numpy as np import jieba import collectionsclass LSA:def __init__(self,text_list) ...

  9. 统计学习方法第十六章作业:PCA主成分分析算法 代码实现

    PCA主成分分析 import numpy as np class PCA:def __init__(self,x,R=None):self.x = np.array(x)self.dim = sel ...

最新文章

  1. imrot matlab,Matlabtuxiangpipei
  2. iOS 11开发教程(十六)iOS11应用视图之删除空白视图
  3. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it
  4. leetcode 小青蛙跳梯子
  5. finditerable 转list_java – 通过拆分和运行将ListenableFuture转换为Iterable
  6. 区块链入局,51小长假听歌、打游戏的姿势将被颠覆!
  7. 超酷炫粒子背景插件—particles.js
  8. Varnish的vcl子程序
  9. 51多项式06——复系数和实系数多项式
  10. 联想云计算机终端,联想云桌面
  11. 贝叶斯算法详解和拉普拉斯平滑
  12. java模拟器.apk_java游戏模拟器安卓版下载-java模拟器apk下载 v2.2.0 安卓版-IT猫扑网...
  13. java word模板 变量,java导出word模板
  14. 使用开源人脸特征提取器进行脸部颜值评分
  15. 消费新品周报 | AWE海尔推出无尘洗衣机;卡西欧F1红牛车队合作新款运动手表...
  16. HDFS物理块存储大小
  17. 编程人生 | 一位半路出家的程序员的“天命”之选
  18. 前端教程:LAMP是什么意思?做什么的?有什么特点?
  19. Promise 多接口同时调用
  20. TB级别分布式关系型数据库OceanBase理论详解

热门文章

  1. 安卓机更新系统会卡吗_安卓手机升级系统会变卡吗
  2. 求选修课程在2门及以上且都及格的学生号及总平均分 group by count()
  3. Python 调用Vpython编写三体运动模型(不含碰撞)
  4. 博世BMI088官方代码库解析
  5. 初等函数积分的刘维尔定理Liouville's theorem on integration in terms of elementary functions
  6. PhysX入门教程(全)
  7. 大连哪里可以学python_大连Python编程-全套系统班
  8. pa...............
  9. 前端小白--marquee无缝滚动
  10. python练习题:罗马数字转换