python关联分析引擎_PowerBI x Python 之关联分析(上)
前言
據(jù)說,全球零售業(yè)巨頭沃爾瑪在對消費者購物行為分析時發(fā)現(xiàn),男性顧客在購買嬰兒尿片時,常常會順便搭配幾瓶啤酒來犒勞自己,于是嘗試推出了將啤酒和尿布擺在一起的促銷手段。沒想到這個舉措居然使尿布和啤酒的銷量都大幅增加了。這個“啤酒+尿布”的購物籃組合,就是關(guān)聯(lián)分析的一個經(jīng)典應(yīng)用場景。簡單來說,關(guān)聯(lián)分析就是在大量數(shù)據(jù)中找到最常出現(xiàn)的組合。
關(guān)于Power BI如何做關(guān)聯(lián)分析,網(wǎng)上已經(jīng)有不少文章(如馬老師之前的推文,以以及power bi星球等等),其中的核心是合并及userelationship。但以往這些PowerBI的案例里,純用dax和PQ的技巧,只做出了兩兩之間的關(guān)聯(lián)度,難以求出三個或者更多產(chǎn)品之間的關(guān)聯(lián)度。所以本文介紹如何在PowerBI里借助Python快速求出頻繁項集(關(guān)聯(lián)度較大的組合)。
解決方案
對于本案,在PowerBI中使用Python有兩種方法:一種是使用Py可視化控件,在控件里用Python直接作圖;另一種是在PQ里處理數(shù)據(jù),求出所需的頻繁項集,再用PowerBI的原生控件進行可視化。本文先講解前者。
本案的數(shù)據(jù)(BreadBasket,面包購物籃)結(jié)構(gòu)如下。前兩列是購物時間,Transaction是購物單編號,Item是物品。
首先選取Py可視化控件,拖動到畫布上,然后再選中所需的字段,結(jié)果如下:
在Power Bi的下方出現(xiàn)了一個新的窗口(編輯器)。選中字段后,編輯器生成6行代:意味著Pandas和matplotlib兩個庫默認(rèn)導(dǎo)入,同時生成了包含所選字段的數(shù)據(jù)幀dataset。接下來,即可在編輯器中編輯代碼。只要本地安裝了庫,都可以導(dǎo)入。而該控件要求代碼最后必須顯示圖表,否則會提示出錯。
Python進行關(guān)聯(lián)分析有幾個好用的庫。在輸入和輸出數(shù)據(jù)的便捷性上,個人認(rèn)為Mlxtend最合適。具體代碼如下:
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) #刪除無物品的記錄
# 將數(shù)據(jù)集進行格式轉(zhuǎn)換
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)
# 數(shù)據(jù)轉(zhuǎn)碼
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轉(zhuǎn)list
frequent_items["itemsets"]=frequent_items["itemsets"].apply(lambda x:','.join(x)) # 頻繁項集list轉(zhuǎn)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] # 橫坐標(biāo)標(biāo)簽
plt.bar(fi["itemsets"],fi["support"], align='center', alpha=0.5) # 作圖
plt.xticks(x, rotation=60) # 設(shè)置標(biāo)簽旋轉(zhuǎn)角度
# 添加橫坐標(biāo)
for a, b, label in zip(x, y, y_label):
plt.text(a, b, label, ha='center', va='bottom')
plt.show()
點擊運行,我們就得到以頻繁項集為橫坐標(biāo),支持度(出現(xiàn)概率)為縱坐標(biāo)的柱狀圖:
優(yōu)缺點
正如上文提到,本方法直接求出的是出現(xiàn)概率最大的物品組合,組合中物品數(shù)量2個起,上不封頂。在整體層面的指導(dǎo)意義更大。此外,使用可視化Py控件,可以直接參與不同控件之間的聯(lián)動。如下圖所示,增加了日期切片器,數(shù)據(jù)可以即時變化。
不足的地方主要在于Python作圖的風(fēng)格與Power BI的整體風(fēng)格不一致,而且調(diào)整難度比較大。而且只能被動聯(lián)動,而不能主動聯(lián)動。下一篇將介紹PQ的方法,能更好地克服控件法的這些不足。
總結(jié)
以上是生活随笔為你收集整理的python关联分析引擎_PowerBI x Python 之关联分析(上)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 个人信用贷款10万条件 满足这几点要
- 下一篇: python查询在查询_python 查