Python 實現同期分析:數據分析實戰與商業實踐(詳) -- 追蹤用戶行爲特徵

在這裏插入圖片描述

更多商業數據分析案例(原理,完整代碼,數據集)、統計學、SQL、網絡爬蟲詳見公衆號 " 數據分析與商業實踐 "

引言
  同期羣分析的目的在於透過現象找到結果,以時間維度建立同期羣,除按時間維度考慮,也可以對來源渠道等維度建立同期羣。是一個很不錯的數據分析思路與方法。
在這裏插入圖片描述
  通過查看用戶的後續活躍、留存、訪問內容等相關數據,找出有效用戶的影響因素。

同期分析作用一覽

   實際案例:9月份新增用戶10萬人,10月份新增用戶15萬人,但9月份新增用戶的30日留存用戶爲1萬人,10月份新增用戶的30日留存用戶也爲1萬人,哪個月的運營業績更好呢?我的這次促銷是否有提前透支口碑呢?同期分析結果需要結合業務實際,一些業務思維的培養放在了文末鏈接,本篇專注於用 Python 來實現同期分析,儘管目前有工具可專門實現,但用 Python 也來一次,可以訓練代碼手感和思路,往下看吧。

   通過橫向對比,能夠對客戶留存和生命週期有初步的認識。基於縱向觀察,可以發現不同期客戶,留存情況的差異,以反推該期引入的客戶是否精準。
在這裏插入圖片描述

數據清洗

在這裏插入圖片描述



構建同期分析表

以單獨的一個時間爲例,爲後續構建大循環做準備

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述



循環構建

看似很簡單,只是把剛纔的示例結合起來罷了,但中間也有值得注意的地方
在這裏插入圖片描述

輸出結果,有了等於號線和橫槓線配合換行的確會整潔不少
在這裏插入圖片描述



動態數據可視化&結果分析

在這裏插入圖片描述
在這裏插入圖片描述

  • 橫向觀察,次月流失嚴重,表現最好的月份次月留存也只有12%,隨後平穩降低,穩定在6%左右。

  • 縱向對比,2019年當月新增客戶最少,僅有2042位,但人羣相對精準,留存率表現優於其他月份。

在這裏插入圖片描述

關鍵代碼呈現

# 存儲每月新增的客戶數
monthly_increase = {} # 用字典存儲,格式輸出漂亮些,也有助於添加進 DataFrame 中
# 由上面的時間可知,範圍爲:2019-09 ~ 2020-02:最多也就加五個月

# 循環對每個月進行上述相同的求解操作,注意第一個月不需要進行操作
 ## 注:在進行大小循環的過程中,可以跟之前的樣本數據結果進行比對,簡單驗證一下
for i in range(len(month_list)):
    print(f'正在對{month_list[i]}進行操作...')
    print('-'*50)
    # 求解該月的訂單數量和客戶數量
    orders = df[df['付款時間'] == month_list[i]]
    # 將客戶分組,即把多次下單的同一個客戶算爲一個客戶:根據暱稱來 groupby
    customers = orders.groupby('客戶暱稱')['支付金額'].sum().reset_index() 
    print(f'{month_list[i]}的訂單數量爲:{len(orders)},客戶數量爲:{len(customers)}')
    
    # --------------------- 計算每月新增客戶數 -------------------------------
    # 如果是第一個月份,則跳過,畢竟不需要和歷史數據驗證是否爲新客戶
     # 這也是 for 循環的 range() 中爲什麼不是month_list而是添加了長度的len(month_list)
    if i == 0:
        print('該月是數據集中的第一個月份,不需要和歷史數據驗證是否爲新客戶')
        # 這裏的新增只是爲了格式上一致,畢竟第一個月算什麼新增
        monthly_increase[month_list[i]] = len(customers) 
        
    else: # 如果不是,需要找到之前的歷史訂單
        # print('該月不是數據集中的第一個月份,正在匹配歷史數據...')
        print(f'該月({month_list[i]})的歷史年月爲:{", ".join(month_list[:i])}')
        # 歷史訂單,從原始數據集中進行比對
        history = df[df['付款時間'].isin(month_list[:i])] 
        # 新增客戶:未在歷史訂單中出現過的客戶
        new_customers = customers[~customers['客戶暱稱'].isin(history['客戶暱稱'])]
        print(f'本月新增客戶數爲:{len(new_customers)}')
        monthly_increase[month_list[i]] = len(new_customers)

    # --------------------- 計算每月留存客戶數 -------------------------------
    print('正在計算', ", ".join(month_list[i+1:]), '中每個月份的客戶留存數...')
    print('-'*50)
    
    for j in range(i+1, len(month_list)):
        # print(f'正在計算{month_list[j]}的留存客戶數...')
        next_month = df[df['付款時間'] == month_list[j]]
        retention_c=customers[customers['客戶暱稱'].isin(next_month['客戶暱稱'])]
        print(f'{month_list[j]}的留存客戶數:{len(retention_c)}')
              
    print('='*50 + '\n')

推薦閱讀

  學會提問 | 個人爆發式成長 | 尋找零售密碼
  一句話成爲心上人特別的存在

在這裏插入圖片描述
參考
大神極簡實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章