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


 

購物籃分析
Photo by: Luke Chesser

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

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

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

程式碼1:

from apyori import apriori
import pandas as pd
import numpy as np
alldata = 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_series
Index([‘系列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

程式碼6:

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

產出:

array([‘產品3–6’, ‘產品3–2’, ‘產品3–6’, ‘產品3–2’], dtype=object)

實際執行

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

程式碼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]['產品'].values
record.append(cart)
print(cart)

產出如圖四:

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

完整程式碼~~

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


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

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

回到頂端