易懂的視覺化呈現 - 由折線圖看行銷活動成長趨勢分析

資料前處理

原始銷售資料
圖一、原始銷售資料
sales_data = sales_data[['單價','成本','product','訂單時間','廣告代號all']]
圖二、從原始資料中提取需要的欄位
sales_data.dtypes
單價 int64
成本 int64
product object
訂單時間 object
廣告代號all object
dtype: object
sales_data['訂單時間'] = pd.to_datetime(sales_data['訂單時間'])
單價 int64
成本 int64
product object
訂單時間 datetime64[ns]
廣告代號all object
dtype: object
sales_data['訂單時間(年)'] = sales_data['訂單時間'].dt.year
sales_data['訂單時間(月)'] = sales_data['訂單時間'].dt.month
圖三、整理時間欄位後的資料
sales_data['利潤'] = sales_data['單價'] - sales_data['成本']
sales_data['count'] = 1
圖四、產出利潤與Count欄位

總體行銷活動分析

Analyze_product = "產品4"
product_data = sales_data[sales_data['product'] == Analyze_product]
search_year = 2017
product_data = product_data[product_data['訂單時間(年)'] == search_year]
圖五、從銷售資料中提取2017年產品四資料

計算完後就可以開始準備繪製圖表了

Dataframe名稱.groupby(‘群組欄位名稱’)[‘計算欄位名稱’].計算方法()
ad_avg_profit = product_data.groupby('訂單時間(月)')[['利潤', 'count']].sum()
ad_avg_profit['平均利潤'] = ad_avg_profit['利潤'] / ad_avg_profit['count']
圖六、廣告效益分析表
圖七、平均廣告利潤圖
import plotly.graph_objects as go
import plotly.offline as py
  1. Trace-圖表內容:圖表內的數據呈現方式,如折線圖、散佈圖與長條圖等等,都需透過trace設定。
  2. Layout-圖表背景:設定圖表標題、大小、X軸與Y軸等佈景設定。

Trace-圖表內容參數:

  1. go.scatter:繪製散佈圖、折線圖所使用的模式
  2. x、y:數據X軸與Y軸數值設定。
  3. mode:圖表內繪圖樣式。
  4. maker:設定個數值點的參數,如顏色、大小等。
  5. line:設定線的參數,如顏色、大小等。
  6. showlegend:圖例是否開啟。
trace = go.Scatter(x= hover_month,
y=ad_avg_profit['平均利潤'],mode='lines+markers',
marker={'color': '#669966'},line={'width': 2},
name ='每月平均廣告利潤',showlegend=True)

Layout-圖表背景參數:

layout = go.Layout(title={'text': str(search_year)+"年廣告總利潤",'y':0.95,'x':0.5},
yaxis_title='利潤',
xaxis={'title': 'Month'},
width=1800,
height=900,
boxmode='group',
font=dict(size=20,
color="Black"))
ad_figure = go.Figure(data = traces, layout = layout)
ad_figure.show()
圖八、平均廣告利潤圖
# save as image
ad_figure.write_image(str(search_year)+str(Analyze_product)+'廣告每月利潤'+'.png')
# save as html
py.plot(ad_figure, filename=str(search_year)+str(Analyze_product)+'總廣告每月利潤', auto_open=True)

個體行銷活動分析

  1. ad_types:廣告種類,幫助我們選取各個廣告。
  2. ad_profit_df:廣告利潤DataFrame,將計算出來的廣告利潤放置於此。
select_month = product_data[product_data['訂單時間(月)'] == 1]
select_ad = select_month[select_month['廣告代號all']== ad_types[0]]
select_ad = select_ad.groupby('廣告代號all')[['利潤', 'count']].sum()
select_ad['平均利潤'] = select_ad['利潤'] / select_ad['count']
圖九、廣告月份平均利潤
pd.merge(dataframe1,dataframe2,on='根據該欄位進行合併',how ='如何進行合併')
for month in range(1,13):
# 選擇月份
select_month = product_data[product_data['訂單時間(月)'] == month]
profit = []
# 選擇廣告
for ad in ad_types:
select_ad = select_month[select_month['廣告代號all']== ad]
select_ad = select_ad.groupby('廣告代號all')[['利潤', 'count']].sum()
select_ad['平均利潤'] = select_ad['利潤'] / select_ad['count']
# 取出平均利潤
if not select_ad.empty:
ad_profit = select_ad['平均利潤'][0]
elif select_ad.empty:
ad_profit= None
profit.append(ad_profit)
month_profit = {"廣告代號": ad_types,str(month)+'月份' : profit} #+"月份"
month_profit = pd.DataFrame(month_profit)

ad_profit_df = pd.merge(ad_profit_df, month_profit, on='廣告代號', how='left')
圖十、每月廣告利潤資料示意圖

那讓我們開始進入廣告篩選!

ad_year_avg_profit = ad_avg_profit['平均利潤'].mean()
ad_profit_df = ad_profit_df.set_index('廣告代號')
ad_profit_df = ad_profit_df.T
圖十一、轉置後廣告利潤圖
for i in ad_profit_df.columns:
if ad_profit_df[i].mean() > ad_year_avg_profit:
print(i+' 廣告具有分析價值')
elif ad_profit_df[i].mean() < ad_year_avg_profit:
ad_profit_df = ad_profit_df.drop(columns = i )
critei 廣告具有分析價值KDPOD 廣告具有分析價值自然流量 廣告具有分析價值B2KMK 廣告具有分析價值B2KPOD 廣告具有分析價值B2KP 廣告具有分析價值B2K 廣告具有分析價值qdwit 廣告具有分析價值
ad_profit_df = ad_profit_df.T
圖十二、繪圖前每月平均廣告利潤dataframe
圖十三、每月廣告效益分析
traces = []
colors = ['#990066','#FFCC00','#000033','#663300','#FF6600','#663333','#CC6666','#FF6666',
'#339900']
for i in range(len(ad_profit_df.index)):
print(i)
pl_y = ad_profit_df.iloc[1,:].tolist()
color = colors[i]
trace = go.Scatter(x=hover_month,y= pl_y,
marker= {'color': colors[i]},
mode='lines+markers',line={'width': 2},
name = ad_profit_df.index[i]+'廣告')
traces.append(trace)
recommend_ad = [] # 最高利潤廣告名稱
recommend_ad_profit = [] # 最高利潤廣告利潤額
recommend_ad_list = [] # 前五大利潤廣告
for i in ad_profit_df.columns:
ad_profit_df = ad_profit_df.sort_values(i,ascending =False)
recommend_ad.append(ad_profit_df[i].index[0])
recommend_ad_list.append(ad_profit_df[i].index[[0,1,2,3,4]].tolist())
recommend_ad_profit.append(ad_profit_df[i][0])
max_point = go.Scatter(x= hover_month,
y=recommend_ad_profit,
marker=dict(size = 20, color='rgba(255,235,205,0.5)',line=dict(color='#666666',width=2)),
hovertext=recommend_ad,
mode='markers',
name = "每月最適廣告")
traces.append(max_point)
layout = go.Layout(title={'text': str(search_year)+"年每月廣告效益分析",'y':0.95,'x':0.5},
yaxis_title='利潤',
xaxis={'title': '月份'},
width=1800,
height=900,
boxmode='group',
font=dict(size=20,color="lightslategrey"))
ad_figure = go.Figure(data = traces, layout = layout)
ad_figure.show()
recommend_ad_list = pd.DataFrame(recommend_ad_list,index =hover_month)
recommend_ad_list.to_csv(str(search_year)+'年各月份推薦廣告名單.csv',encoding = 'utf-8-sig')
圖十四、推薦廣告清單

~如果喜歡我的文章,也幫我拍拍手~
~我會繼續分享相關的文章給大家~

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

回到頂端