mlxtend手册(一)-频繁项目集

Mlxtend (machine learning extensions) is a Python library of useful tools for the day-to-day data science tasks.

mlxtend是一个拓展库,用来
mlxtend官网地址:Welcome to mlxtend's documentation

这次我使用这个主要是用来搞购物篮分析,也就是关联分析,下面我们就来开始入门了

安装

这个之前写了一个,直接参考吧:anaconda安装mlxtend

安装中没什么问题,只是用命令搞一下就好。

频繁项目集

关于这一块儿,官网上有很详细的介绍,可以参考这里:Frequent Itemsets via Apriori Algorithm

频繁项目集,就是我们要在一堆订单中找到经常在一起被购买的商品组合。这也是我们关心的,哪些商品我可以哪来做组合销售,打包售卖,除了主观的判断,从数据上,我们的用户到底喜欢购买哪些?

官方例子中给到的样例数据如下:

dataset = [['Milk', 'Onion', 'Nutmeg', 'Kidney Beans', 'Eggs', 'Yogurt'],
           ['Dill', 'Onion', 'Nutmeg', 'Kidney Beans', 'Eggs', 'Yogurt'],
           ['Milk', 'Apple', 'Kidney Beans', 'Eggs'],
           ['Milk', 'Unicorn', 'Corn', 'Kidney Beans', 'Yogurt'],
           ['Corn', 'Onion', 'Onion', 'Kidney Beans', 'Ice cream', 'Eggs']]

这就相当于5笔订单,每笔订单中的商品。
一开始,我在这里产生了一个疑问,就是,比如说,同样的商品A、商品B,这样的订单如果有10笔,我该怎样提现出来呢?
我主观的以为之类忽略了订单的数量,只保留了出现过的商品,为此,我困惑了很久,后来在一篇文章中想明白了,后面也会分享。

后面,我们要调用mlxtend提供的方法,也就是传入参数,传入参数需要符合人家的要求,也就是接口规范,我们需要用到

from mlxtend.preprocessing import TransactionEncoder
te = TransactionEncoder()
te_ary = te.fit(dataset).transform(dataset)
te_ary

这里,主要使用了TransactionEncoder的两个方法,一个fit,一个transform
先fit之后,mlxtend就可以知道有多少个唯一值,有了所有的唯一值,就可以转换成one-hot code了


如果要转为0,1形式,也非常方便

te_ary.astype("int")

上面说到的fit函数,它会初始化一个变量“columns_”


最后一步,把数据转换为DataFrame

import pandas as pd

pd.DataFrame(te_ary, columns=te.columns_)

哦,下面才是最后1步,调用数据,输出频繁项目集

from mlxtend.frequent_patterns import apriori

apriori(df, min_support=0.6)

这里输出的是支持度,支持度越高,说明出现的频率越高
这里的项目集显示不太友好,加个参数就好。

apriori(df, min_support=0.6, use_colnames=True)

上面,还有一个 min_support 参数,这是对支持度进行过滤,最小支持度为0.6

频繁项目集,就是如此,一步数据处理,一步接口调用,完事儿。


上面的数据已经出来了,我们排个序看看,顺便人工验证一下


这个Kidney Beans支持度是1.0,也就是100%,说明所有的订单中都包含了这个商品,看一眼,的确是这样的
我们再看一个组合商品的,组合的可能才是我们更关注的
(Eggs,Kidney Beans),支持度0.8,说明有80%的订单都同时购买了这两款商品,再看一眼数据,一共5笔订单,包含这两款商品的订单有4笔,恩就是80%

这里会出现一个问题,就是刚刚提到的,我们想要看组合商品,单个商品的暂时不看,那就需要增加一个字段

frequent_itemsets = apriori(df, min_support=0.6, use_colnames=True)
frequent_itemsets['length'] = frequent_itemsets['itemsets'].apply(lambda x: len(x))
frequent_itemsets

然后,我们只要过滤下就好

frequent_itemsets[frequent_itemsets['length']>1]

你可能感兴趣的:(mlxtend手册(一)-频繁项目集)