前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PowerBI x Python 之关联分析(上)

PowerBI x Python 之关联分析(上)

作者头像
btharp
发布2021-08-31 16:34:01
1.2K0
发布2021-08-31 16:34:01
举报
文章被收录于专栏:PowerBI x Python

前言

据说,全球零售业巨头沃尔玛在对消费者购物行为分析时发现,男性顾客在购买婴儿尿片时,常常会顺便搭配几瓶啤酒来犒劳自己,于是尝试推出了将啤酒和尿布摆在一起的促销手段。没想到这个举措居然使尿布和啤酒的销量都大幅增加了。这个“啤酒+尿布”的购物篮组合,就是关联分析的一个经典应用场景。简单来说,关联分析就是在大量数据中找到最常出现的组合。

关于Power BI如何做关联分析,网上已经有不少文章(如马老师之前的推文,以以及power bi星球等等),其中的核心是合并及userelationship。但以往这些PowerBI的案例里,纯用dax和PQ的技巧,只做出了两两之间的关联度,难以求出三个或者更多产品之间的关联度。所以本文介绍如何在PowerBI里借助Python快速求出频繁项集(关联度较大的组合)。

解决方案

对于本案,在PowerBI中使用Python有两种方法:一种是使用Py可视化控件,在控件里用Python直接作图;另一种是在PQ里处理数据,求出所需的频繁项集,再用PowerBI的原生控件进行可视化。本文先讲解前者。

本案的数据(BreadBasket,面包购物篮)结构如下。前两列是购物时间,Transaction是购物单编号,Item是物品。

首先选取Py可视化控件,拖动到画布上,然后再选中所需的字段,结果如下:

在Power Bi的下方出现了一个新的窗口(编辑器)。选中字段后,编辑器生成6行代码:意味着Pandas和matplotlib两个库默认导入,同时生成了包含所选字段的数据帧dataset。接下来,即可在编辑器中编辑代码。只要本地安装了库,都可以导入。而该控件要求代码最后必须显示图表,否则会提示出错。

Python进行关联分析有几个好用的库。在输入和输出数据的便捷性上,个人认为Mlxtend最合适。具体代码如下:

代码语言:javascript
复制
from  mlxtend.frequent_patterns import apriori 
from mlxtend.preprocessing import TransactionEncoder
import pandas as pd 
import matplotlib.pyplot as plt

data=dataset
data.Item=data.Item.str.lower() 
data=data.drop(data[data["Item"]=='none'].index) #删除无物品的记录

# 将数据集进行格式转换
orders_series = data.set_index("Transaction")["Item"]
transactions = []
temp_index = 0
for i, v in orders_series.items():
    if i != temp_index:
        temp_set = set()
        temp_index = i
        temp_set.add(v)
        transactions.append(temp_set)
    else:
        temp_set.add(v)

# 数据转码
te = TransactionEncoder()
te_ary = te.fit(transactions).transform(transactions)
df = pd.DataFrame(te_ary, columns=te.columns_)

# 求频繁项集
frequent_items=apriori(df,min_support=0.02,use_colnames=True) # 支持度为0.02
frequent_items["itemsets"]=frequent_items["itemsets"].apply(lambda x:[x for x in x]) # 频繁项集frozenset转list
frequent_items["itemsets"]=frequent_items["itemsets"].apply(lambda x:','.join(x)) # 频繁项集list转str
frequent_items=frequent_items.sort_values(["support"],ascending=False) # 按支持度降序排序
fi=frequent_items[frequent_items["itemsets"].str.contains(",")] # 筛选出多于1个物品的频繁项集

# 作图
x=fi["itemsets"]
y=fi["support"]
y_label = ["{:.3f}".format(_y) for _y in y] # 横坐标标签
plt.bar(fi["itemsets"],fi["support"],  align='center', alpha=0.5) # 作图
plt.xticks(x, rotation=60) # 设置标签旋转角度
# 添加横坐标
for a, b, label in zip(x, y, y_label):
    plt.text(a, b, label, ha='center', va='bottom')
plt.show()

点击运行,我们就得到以频繁项集为横坐标,支持度(出现概率)为纵坐标的柱状图:

优缺点

正如上文提到,本方法直接求出的是出现概率最大的物品组合,组合中物品数量2个起,上不封顶。在整体层面的指导意义更大。此外,使用可视化Py控件,可以直接参与不同控件之间的联动。如下图所示,增加了日期切片器,数据可以即时变化。

不足的地方主要在于Python作图的风格与Power BI的整体风格不一致,而且调整难度比较大。而且只能被动联动,而不能主动联动。下一篇将介绍PQ的方法,能更好地克服控件法的这些不足。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PowerBI x Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档