資料分析後的下一步?分析結果人人看得懂!
資料視覺化設計-系列4(附Python程式碼)


歡迎回來「行銷活動效益知多少?顧客回購了嗎?」系列的第四篇文章,本篇文章要跟大家分享視覺化的想法以及說明資料視覺化程式碼的核心架構。

前情提要:
前面三篇文章屬於資料前處理的階段,已經跟大家分享了資料前處理的重要性以及如何在複雜的資料中取出關鍵資料,並且如何將關鍵資料內容建立成一個會員消費紀錄資料庫,最後把「會員消費紀錄資料庫」彙整出後續「資料視覺化」所會使用到的基本元素。

是否已經迫不及待想繼續看下去了呢?
就讓我們開始吧!

資料視覺化
攝影師:Anthony Shkraba,連結:Pexels

資料視覺化設計與程式碼架構說明

一開始先說明繪圖呈現的想法,我們希望透過查看不同「廣告」在2018一整年中,區分「每個月」中所帶來的顧客分別是「第幾次購買」系列1的商品(舉例:8月的顧客中有第一次購買、第二次購買、第四次購買的人),並觀察購買次數不同的客群他們各自的消費型態(平均利潤)來找出管理意涵。

視覺化繪圖的內容設計:
結合長條圖以及兩條折線圖在同一張圖中呈現
長條圖表示是每個月份「不同客群所帶來的每人平均利潤」
兩條折線圖分別代表每個月「所有客群加總後每人平均利潤」以及「一整年的每人平均利潤」

大家也可以先不要往下看,試著先自我練習,最後再來比對一下成果是否一樣!接下來就開始我們的繪圖程式解說。

本次資料視覺化會使用的套件除了前面所提到pandas、numpy、datetime以外,新增的套件及其應用如下:

  1. plotly :能夠呈現離線繪圖,可將圖片儲存成html離線檔在資料夾中,可以無時無刻檢視圖片。
  2. plotly系列中的plotly.express(以下簡稱px):本次繪圖的主要功能,簡單的程式碼就能呈現豐富的圖形。
  3. os:建立資料夾

繪圖階段程式碼核心架構會使用到雙重For迴圈,因此會以兩個迴圈內容做一個拆解說明,兩個迴圈目的成果簡述與程式架構如下圖1:

繪圖階段程式碼核心架構會使用到雙重For迴圈,因此會以兩個迴圈內容做一個拆解說明,兩個迴圈目的成果簡述與程式架構
圖 1、繪圖階段程式碼架構

1. 內層迴圈:建立單一廣告每個月客群(第幾次購買)的資料,內容包含「月份」、「第幾次購買」、「人數」、「利潤」以及「每人平均利潤」

2. 外層迴圈:得出每個廣告每個月份「所有客群」加總的平均利潤,以及年均利潤,最後再依照上述整理後的資料進行「資料視覺化」。

內層迴圈

以下就開始解釋程式碼架構中內層迴圈(藍色區塊)的部分,如圖2。

圖 2、程式碼架構(內層迴圈)

內層迴圈的第一部分以【for i in range(len(final_2018)):】對應到圖2(請更改)的藍色第一個區塊方格【內層迴圈:】,此程式碼的涵義是單一廣告的「final_2018」的長度(12)可以從len(final_2018)的產出結果得知,然而在外面包上range()之後,for迴圈中的’i’ 會從0開始執行,執行完一次就換到1,以此類推程式碼將會按照順序地跑到11,總共12次,此處的12次就分別代表是12個月份。

內層迴圈程式碼(藍色第二個方格)都必須縮排在第一個藍色方格內,程式碼才能執行成功,下方開始解釋內層迴圈程式碼。

廣告「critei」做內層迴圈的舉例,一開始我們會把廣告(critei)1到12月份的資料取出來後,將資料的index重新排序後加到存放所有月份的清單中如程式碼1所示。

程式碼1:

# 舉例:每個月份 critei(廣告代號)的資料
ad_mon = final_2018[i][final_2018[i]['廣告代號']==str(i+1)+'月_'+'critei']
# 重新排序index
ad_mon = ad_mon.reset_index(drop = True)
# 將月份資料加入ad_total中
ad_total.append(ad_mon)

產出:

廣告critei每個月的資料清單(ad_total),如圖3所示。

廣告critei每個月的資料清單
圖 3、廣告critei每個月的資料清單

在此一樣可以點選清單中的項目來查看資料,如圖4所示。

圖 4、ad_total清單中6月份資料

接下來在「ad_total」清單中的每一個資料中對「第幾次購買」欄位進行groupby的動作,來分群消費者是第幾次購買。之後建立名為mon_final的DataFrame,內容包含「月份」、「第幾次購買」、「人數」以及「利潤」,並隨著for迴圈的順序(1~12月)把每個月份的分群後資料使用concat的方法一個一個組合到「ad_total_mon」上,以利我們後續計算不同客群的每人平均利潤是多少,如程式碼2所示。

程式碼2:

# 將每個月的"第幾次購買"人數建立df
# 把每月份的資料以第幾次購買分群
ad_mon_gp = ad_total[i].groupby('第幾次購買')
# 求出每群利潤的總額
ad_mon_profit = ad_total[i].groupby('第幾次購買')['利潤'].sum().tolist()
# 建立DataFrame
# 將每個月的"第幾次購買"人數建立df
# 把每月份的資料以第幾次購買分群
ad_mon_gp = ad_total[i].groupby('第幾次購買')
# 求出每群利潤的總額
ad_mon_profit = ad_total[i].groupby('第幾次購買')['利潤'].sum().tolist()
# 建立DataFrame
mon_final = pd.DataFrame {
'第幾次購買':ad_mon_gp.size().index.tolist(),
'人數':ad_mon_gp.size().values.tolist(),
'利潤':ad_mon_profit})
ad_total_mon=pd.concat([ad_total_mon,mon_final])

產出:

已將不同月份各自分類好的客群資料組合到「ad_total_mon」,如圖5所示。

將不同月份各自分類好的客群資料組合到「ad_total_mon」
圖 5、分群後資料(ad_total_mon)

成功獲得每個月的分群後資料後,馬上接著計算該月不同客群的每人平均利潤為多少,在ad_total_mon上新增一個新的欄位「平均利潤」,如程式碼3所示。

程式碼3:

# 計算出平均利潤(取整數)並新增【平均利潤】到ad_total_mon上
ad_total_mon['平均利潤'] = round(ad_total_mon['利潤'] / ad_total_mon['人數'] )

產出:

ad_total_mon 新增平均利潤後的資料內容,如圖6所示。

ad_total_mon 新增平均利潤後的資料內容
圖 6、ad_total_mon調整後資料

內部迴圈的程式碼的部分已結束,是不是覺得沒有很複雜呢?不過我們已經將每個月不同客群的「每人平均利潤」成功的新增在資料中,我們又將精華的資料更進一步的萃取出我們需要的關鍵元素!

下一篇文章將會解說資料視覺化程式碼「外部迴圈」的部分,想要輕鬆就能產出不同廣告的資料視覺化成果嗎?那麼絕對不能錯過!

請點擊下方系列文章連結了解更多!

Thinking smarter makes you work smarter
如果你喜歡我的文章的話,請給我一點拍手~
如果你覺得喜歡又實用的話,請給我更多的拍手!

程式碼:行銷活動效益知多少?顧客回購了嗎? -資料視覺化想法及程式碼架構-系列4(附Python程式碼)

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

行銷活動效益知多少?顧客回購了嗎?-取出關鍵資料-系列1(附Python 程式碼)
行銷活動效益知多少?顧客回購了嗎? -建立會員消費紀錄資料庫-系列2(附Python程式碼)
行銷活動效益知多少?顧客回購了嗎?-彙整資料視覺化所需的基本元素-系列3(附Python程式碼)

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

回到頂端