購物籃分析  -  Python實戰:商務資料結構整理
(附 Python 程式碼)

在不久之前我們曾撰寫過關於購物籃分析的文章,透過分析消費者常購買的產品組合進行分析,幫助我們了解產品與產品之間的關係,進而做出產品搭配與產品推薦等後續策略。

如果想要了解購物籃分析的概念,可以見此文章:你怎麼處理顧客交易資訊?Apriori演算法

本次文章內容主要使用常見的銷售資料,一步一步的展示如何進行購物籃分析的資料前處理。

首先,我們先引入套件與資料,接者檢視其資料結構,如程式碼 1

程式碼 1:

from apyori import aprioriimport pandas as pdimport numpy as npalldata = pd.read_csv(‘sales_data.csv’)alldata = pd.DataFrame(alldata)

引入銷售資料後,藉由 variable explorer 查看銷售資料,可以看到銷售資料中有不同的系列,系列下還有不同的產品,本次分析將先選取具有分析價值的系列,再透過購物籃分析了解系列下產品搭配情形, 如圖一。

圖一、銷售資料

產品利潤計算

在本次的購物籃分析,我們同時也會將利潤列入考慮,所以需要將各項產品的利潤進行計算,以便進行之後的利潤分析,如程式碼 2

程式碼 2:

# 利潤表格profit_df=alldata.copy()profit_df =profit_df.drop_duplicates(‘產品’)profit_df =profit_df[[‘產品’,’單價’,’成本’]]profit_df[‘利潤’] =profit_df[‘單價’]-profit_df[‘成本’]

計算各項產品之利潤,方便再後續分析將利潤放入考慮,計算成果如圖二。

圖二、產品利潤資料示意圖

系列銷售額計算

此次分析將會選銷售額前三高的系列進行分析,藉此選出具分析價值之系列。

從銷售資料中計算系列銷售額,可以透過 groupby 將不同系列的單價加總,並使用 sort_values 進行排序,完成所有產品銷售額排序。

接者,挑選營業額最高的前三系列,即完成了具有分析價值之系列篩選,結果分別為系列 1、系列 2、系列 3,如程式碼 3

程式碼 3:

# 篩選前三銷售量好的商品top3_series = alldata.groupby(‘系列’)[‘單價’].sum()#[0:3]top3_series=top3_series.sort_values(ascending= False)top3_series = top3_series.index[0:3]

挑選產品銷售額前三名,產出結果如下:

top3_seriesIndex([‘系列1’, ‘系列2’, ‘系列3’], dtype=’object’, name=’系列’)

購物籃分析資料整理

想做好購物籃分析,最重要的固然是顧客訂單上所購買的產品,而要了解顧客一次都購買了哪些產品,就需從訂單編號下手。

系列一舉例

從銷售資料中找尋購買前三名之系列(具有分析價值之系列)訂單,以系列 1 為範例,我們先將訂單內有系列 1 的訂單編號尋找出來,如程式碼 4

程式碼 4:

s=’系列1'series_data=alldata[alldata[‘系列’]==s]order_number=np.unique(series_data[‘訂單編號’])

取出後,我們須將訂單內所購買的產品一一列出,將相同銷售訂單內的商品放置於一個陣列中(如圖四),才能透過購物籃分析了解各個產品之間的關聯性,以第一個訂單編號為例,找出其訂單編號的銷售資料,如程式碼 5。

程式碼 5:

i = order_number[1]series_data[series_data[‘訂單編號’]==i]

從圖三中,可以看訂單編號 42515027729 的所有商品就從銷售資料中篩選出來,如圖三。

圖三、第一個訂單編號

緊接者,我們須取出訂單編號內的產品(圖三中產品欄位),需使用 values 將【產品】欄位內資料抓取出來形成 array,程式碼如下:

程式碼 6:

series_data[series_data[‘訂單編號’]==i][‘產品’].values

 產出:

array([‘產品36’, ‘產品32’, ‘產品36’, ‘產品32’], dtype=object)

實際執行

最後將以上步驟透過 for 迴圈方式一次處理三個系列下所有銷售訂單,同時我們可以在工作目錄中創建不同系列的資料夾,幫助我們更有系統的產出分析結果,程式碼如下:

程式碼 7:

record=[]for s in top3_series:series_data=alldata[alldata['系列']==s]order_number=np.unique(series_data['訂單編號'])os.mkdir(s + '商品搭配分析')for i in order_number:cart =series_data[series_data['訂單編號']==i]['產品'].valuesrecord.append(cart)print(cart)

產出:

圖四、購物籃資料架構整理示意圖

完整程式碼~~

透過這個概念將銷售資料架構進行整理,就達成了購物籃分析前資料整理,若是喜歡我的文章,請給我一點掌聲,我將在之後的文章和大家分享更多購物籃分析的實戰應用,幫助您了解更多購物籃分析如何應用於商業資料。

作者:陳俊凱(臺灣行銷研究特邀作者)、鍾皓軒(臺灣行銷研究有限公司創辦人)

更多實戰案例及情境好文推薦

回到頂端