如何用視覺化呈現廣告效益?
電商產業廣告效益分析實戰(附Python 程式碼)

一、基本資料引入

import pandas as pdimport osfrom collections import Counterimport heapqimport plotly.offline as pyimport plotly.graph_objects as godata = pd.read_csv("new_salesdata.csv")
廣告效益分析
圖 1 原始資料示意圖
data = data.drop(columns = list(data.filter(regex='Unnamed: 0|顏色|會員|產品|性別|年紀|尺寸')))
廣告效益分析
圖 2 移除欄位後資料集示意圖

二、基礎資料處理

(一) 系列

data = data[ data ['系列'] == '系列4']
廣告效益分析
圖 3 調整後資料集示意圖

(二) 廣告名稱

for i in range(0,len(data['廣告代號all'])):a = data['廣告代號all'][i].split('_')[1]data['廣告代號all'][i] = a
廣告效益分析
圖 4 整理廣告代號後資料集示意圖

三、進階資料處理-挑選主力廣告

len(data['廣告代號all'].unique())
36
count_list = Counter(data['廣告代號all'])
廣告效益分析
圖 5 廣告使用頻率清單
count_list = pd.DataFrame.from_dict(count_list,orient='index').reset_index() # 轉換為DataFrame形式count_list = count_list.rename(columns = {'index' : '廣告名稱', 0: '樣本數'}) # 重新命名欄位名稱
廣告效益分析
圖 6 DataFrame形式的廣告使用頻率表
heapq.nlargest(3,list(count_list['樣本數']))
[3780, 1793, 1285]
dead_number = heapq.nlargest(4,list(count_list['樣本數']))[2]
1285
dead_list = count_list[count_list['樣本數'] < dead_number]
廣告效益分析
圖 7 需移除的非熱門廣告
for i in dead_list['廣告名稱']:data= data[~data['廣告代號all'].isin([i])]
廣告效益分析
圖 8 只含熱門廣告的資料集
data = data[~data['廣告代號all'].isin(['自然流量'])]
廣告效益分析
圖 9 移除欄位後資料集

四、進階資料處理-不同廣告每期帶來的淨利

data['月份'] = data['訂單時間'].str.split('-', expand = True)[1].astype(int)
廣告效益分析
圖 10 新增「月份」欄位的資料集
data['年月'] = (data['訂單時間 '].str.split('-', expand = True)[0] + data['訂單時間'].str.split('-', expand = True)[1]).astype(int)
廣告效益分析
圖 11新增「年月」欄位的資料集
data['淨利'] = data['單價'] - data['成本']
廣告效益分析
圖 12新增「淨利」欄位的資料集
data = data.drop(['單價', '成本', '系列', '訂單時間'], axis=1)
廣告效益分析
圖 13 移除多餘欄位後的資料集
data = data.groupby(['廣告代號all', '月份', '年月'])['淨利'].sum()
廣告效益分析
圖 14分組進行淨利加總的資料集
data = data.to_frame().reset_index()
廣告效益分析
圖 15 整理成表格型態後資料呈現樣貌
data = data.drop(['年月'], axis=1)data['count'] = 1
廣告效益分析
圖 16 整理後資料集

五、繪圖

fig = go.Figure() # 設定空白畫布colors_box = ['#3366CC', '#DC3912'] # 設定盒子顏色# 繪製盒鬚圖for i in range(0, len(data['廣告代號all'].unique())):fig.add_trace(go.Box(y = data[data['廣告代號all'] ==data['廣告代號all'].unique()[i]]['淨利'],x = data[data['廣告代號all'] ==data['廣告代號all'].unique()[i]]['月份'],name = str(data[data['廣告代號all'] ==data['廣告代號all'].unique()[i]]['廣告代號all'][0:1].values[0]),marker_color= colors_box[i]))
adlist = list(data['廣告代號all'].unique()) # 廣告名稱清單color_line = ["royalblue" , "firebrick"] # 設定線條顏色# 畫平均線for i in range(0,len(adlist)):ad = adlist[i]colour = color_line[i]meanlist = [] # 平均axislist = [] # 月分for ii in range(1,13):axislist.append(ii)total = data[data['廣告代號all'] == ad][data['月份'] == ii]['淨利'].sum()counts = data[data['廣告代號all'] == ad][data['月份'] == ii]['count'].sum()aver = total/countsmeanlist.append(aver)if ii == 12:fig.add_trace(go.Scatter(x= axislist,y= meanlist,mode="lines+markers",textfont=dict(family="sans serif",size=16,color="royalblue"),line=dict(color=colour, width=2),))

(一) 第一層

(二) 第二層

(三) 第三層

# 設定佈景主題(字體、大小、背景等)fig.update_layout(title={'text': "<b>BoxPlot-系列四 廣告效益分析</b>",'y':0.95,'x':0.5,'xanchor': 'center',},yaxis_title='Profit',xaxis={'title': 'Month','tickmode': 'linear'},width=1800,height=960,boxmode='group',font=dict(family="Courier New, monospace",size=20,color="lightslategrey"))
# 另存html檔py.plot(fig, filename='BoxPlot-系列四 廣告效益分析', auto_open=True)# 另存圖檔fig.write_image("BoxPlot-系列四 廣告效益分析.png")
圖 17 最終產出示意圖

(四)小結

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

回到頂端