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')

推荐阅读

  学会提问 | 个人爆发式成长 | 寻找零售密码
  一句话成为心上人特别的存在

在这里插入图片描述
参考
大神极简实现

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