python关联分析引擎_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最合適。具體代碼如下:
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的方法,能更好地克服控件法的這些不足。
總結
以上是生活随笔為你收集整理的python关联分析引擎_PowerBI x Python 之关联分析(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 个人信用贷款10万条件 满足这几点要
- 下一篇: python查询在查询_python 查