日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python关联分析引擎_PowerBI x Python 之关联分析(上)

發(fā)布時(shí)間:2024/10/8 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python关联分析引擎_PowerBI x Python 之关联分析(上) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

據(jù)說,全球零售業(yè)巨頭沃爾瑪在對(duì)消費(fèi)者購(gòu)物行為分析時(shí)發(fā)現(xiàn),男性顧客在購(gòu)買嬰兒尿片時(shí),常常會(huì)順便搭配幾瓶啤酒來犒勞自己,于是嘗試推出了將啤酒和尿布擺在一起的促銷手段。沒想到這個(gè)舉措居然使尿布和啤酒的銷量都大幅增加了。這個(gè)“啤酒+尿布”的購(gòu)物籃組合,就是關(guān)聯(lián)分析的一個(gè)經(jīng)典應(yīng)用場(chǎng)景。簡(jiǎn)單來說,關(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)度,難以求出三個(gè)或者更多產(chǎn)品之間的關(guān)聯(lián)度。所以本文介紹如何在PowerBI里借助Python快速求出頻繁項(xiàng)集(關(guān)聯(lián)度較大的組合)。

解決方案

對(duì)于本案,在PowerBI中使用Python有兩種方法:一種是使用Py可視化控件,在控件里用Python直接作圖;另一種是在PQ里處理數(shù)據(jù),求出所需的頻繁項(xiàng)集,再用PowerBI的原生控件進(jìn)行可視化。本文先講解前者。

本案的數(shù)據(jù)(BreadBasket,面包購(gòu)物籃)結(jié)構(gòu)如下。前兩列是購(gòu)物時(shí)間,Transaction是購(gòu)物單編號(hào),Item是物品。

首先選取Py可視化控件,拖動(dòng)到畫布上,然后再選中所需的字段,結(jié)果如下:

在Power Bi的下方出現(xiàn)了一個(gè)新的窗口(編輯器)。選中字段后,編輯器生成6行代:意味著Pandas和matplotlib兩個(gè)庫(kù)默認(rèn)導(dǎo)入,同時(shí)生成了包含所選字段的數(shù)據(jù)幀dataset。接下來,即可在編輯器中編輯代碼。只要本地安裝了庫(kù),都可以導(dǎo)入。而該控件要求代碼最后必須顯示圖表,否則會(huì)提示出錯(cuò)。

Python進(jìn)行關(guān)聯(lián)分析有幾個(gè)好用的庫(kù)。在輸入和輸出數(shù)據(jù)的便捷性上,個(gè)人認(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) #刪除無(wú)物品的記錄

# 將數(shù)據(jù)集進(jìn)行格式轉(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_)

# 求頻繁項(xiàng)集

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]) # 頻繁項(xiàng)集frozenset轉(zhuǎn)list

frequent_items["itemsets"]=frequent_items["itemsets"].apply(lambda x:','.join(x)) # 頻繁項(xiàng)集list轉(zhuǎn)str

frequent_items=frequent_items.sort_values(["support"],ascending=False) # 按支持度降序排序

fi=frequent_items[frequent_items["itemsets"].str.contains(",")] # 篩選出多于1個(gè)物品的頻繁項(xiàng)集

# 作圖

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()

點(diǎn)擊運(yùn)行,我們就得到以頻繁項(xiàng)集為橫坐標(biāo),支持度(出現(xiàn)概率)為縱坐標(biāo)的柱狀圖:

優(yōu)缺點(diǎn)

正如上文提到,本方法直接求出的是出現(xiàn)概率最大的物品組合,組合中物品數(shù)量2個(gè)起,上不封頂。在整體層面的指導(dǎo)意義更大。此外,使用可視化Py控件,可以直接參與不同控件之間的聯(lián)動(dòng)。如下圖所示,增加了日期切片器,數(shù)據(jù)可以即時(shí)變化。

不足的地方主要在于Python作圖的風(fēng)格與Power BI的整體風(fēng)格不一致,而且調(diào)整難度比較大。而且只能被動(dòng)聯(lián)動(dòng),而不能主動(dòng)聯(lián)動(dòng)。下一篇將介紹PQ的方法,能更好地克服控件法的這些不足。

總結(jié)

以上是生活随笔為你收集整理的python关联分析引擎_PowerBI x Python 之关联分析(上)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。