| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 关联规则算法怎么实现?Python代码、PowerBI可视化详细解释给你听(下-实战篇) -> 正文阅读 |
|
[数据结构与算法]关联规则算法怎么实现?Python代码、PowerBI可视化详细解释给你听(下-实战篇) |
在上一篇中,我讲解了关联规则的原理和实现步骤,如果大家看懂了,其实很好理解。但是说起来容易做起来难,如何通过工具将原始数据处理得到有效可靠的结果还是会存在问题。实际工作是让你解决问题而不只是说出解决思路。本篇就是在理论的基础上,结合实际数据来展示如何使用Python实现关联规则和如何在PowerBI中导入Python脚本生成数据表并以可视化的方式动态展示。 在使用Python解决某个问题时,其实并不是从0到1一步一步搭建,这个过程很繁琐,有时候为了实现一个小小的效果可能得绕很大的弯,所以就跟“调参侠”一样,我们往往使用别的搭好的梯子。这也是为什么Python语言这么受欢迎,因为它有很完善的开源社区和不计其数的工具库库来实现某个目的。我们在实现计算关联规则时,使用的是机器学习库mlxtend中的apriori,fpgrowth,association_rules算法。 一、数据集
数据集中有121253条数据,总共有四个字段,SalesOrderNumber是指订单号;ordernumber是指子订单号,下换线加数字表明是订单的第几个子订单,每个订单号下可能有一个或多个子订单,而每个子订单是不重复的,对应一个产品;Product是指商品名称。 二、mlxtend 在实际开始前我们先来了解这个mlxtend中的包怎么用的。在mlxtend官网上演示了如何实现关联规则的计算,我们来看一下总共有三步: 第一步:导入apriori算法包 第二步,将原始订单数据处理成算法支持的格式: 在实际获取到的数据往往是我上一篇中举例那样,订单号后以列表的形式排列商品。所以mlxtend包接受这样数据格式。但是用于计算却不能直接这样用,一是真实数据都是文本,二是apriori算法包需要一个将原始数据转化为商品独热编码的Pandas Dataframe格式。以下是输入数据: 它使用TransactionEncoder包来将输入数据转换成我们需要的形式。以下是转换的代码和结果: 接下来,它将处理好的数据格式喂给apriori算法包,计算频繁项集(itemsets)和支持度。根据自己预先设定的最小支持度为0.6来排除非频繁项集。 然而上面有个问题,上面返回的结果集是数字,其实是df表里每个项(item)的索引,这对于后面处理比较方便,但是如果只想用这个结果。为了增加可读性,可以使用use_colnames=True的参数来显示原本的商品名。 第三步,计算支持度、置信度、提升度 这里没有在apriori算法包里演示第三步,这是为什么呢?因为apriori算法包只是关联规则里的第一步–找频繁项集,当然不会发现强关联规则啦!这一步是在另一个包association_rules里实现的。这里也是很多初学者会容易出现的问题,不知道各个包的用法,不清楚怎么调用包。 三、Python实现关联规则代码 第一步,生成格式数据 以上是官网给出的关联规则包用法。接下来我用自己的数据集实际操作,并演示如何在PowerBI中导入Python脚本生成数据表并以可视化的方式动态展示。上面已经给出了示例数据。可以看到数据集是每个订单有多个商品,但是一行一行的,不是一个订单后面一行接所以商品的形式。所以这里要想办法从行转换到列。这里使用Pandas中的分组功能,要实现的效果如下:
如果大家会写SQL的话应该知道groupby分组必须与聚合函数一起结合使用,因为它是一个mapreduce的过程。如果按订单号分组而没有使用聚合函数的话,在SQL Server中会报错,在Mysql中只会返回第一行数据。而这里直接使用了groupby分组没有用聚合函数,这不会有什么问题吗?我们来看一下结果group_df:
上面这段代码的意思是生成一张新表,这张表是有按照SalesOrderNumber分组,然后将每个订单组的Product按照列表聚合在一起;这张表只有了两列,一列是分组依据SalesOrderNumber,另一列命名为productlist;最后将原数据标的索引去掉,重置索引,最后得到df_productlist表,这样我们就形成了算法接受的输入数据格式。下面是查看前5行的结果:
第二步,生成频繁项集 生成最终数据格式后,将数据喂给apriori算法包生成频繁项集:
实际上为了便于我们查看和筛选,还可以对频繁项集的长度进行计数,从而可以动态索引。
这段代码的意思是找出支持度大于等于0.01的频繁2项集,也就是我们常常关心的顾客买了一个商品,还会买哪个商品的情况。 第三步,计算支持度、置信度、提升度
最后我们只关注买了一件再买一件和买了两件再买一件的情况,这是最常见的实际场景需求。所以生成两张表df_BuyAB和df_BuyABC。以下是完整代码,如果你有相同格式的数据集,可以直接跑通这个算法。
文章开头的视频展示的是如何利用这个Python脚本实现动态可视化,以便于业务人员使用,提高销售业绩。如果文章开头没有视频,可以去我的知乎上查看。 最后欢迎大家关注我,我是拾陆,搜索公众号“二八Data”,更多技术干货持续奉献。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 19:36:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |