python数据分析:用户消费情况数据分析 |
您所在的位置:网站首页 › 如何挽留顾客的流失服装店 › python数据分析:用户消费情况数据分析 |
本次分析数据介绍: 数据为某奶茶店2018年1月-2019年6月的销售数据,共计69,659项数据,用户共计23,570名; 数据集共4个字段: user_id: 用户id order_id: 购买日期 order_prodect: 购买产品数 order_account: 购买金额 明确问题(本次数据分析目的) 用户消费趋势分析(按月) 用户个体消费分析 用户消费行为分析 用户复购率和回购率分析 分析思路
1.数据类型转换 根据以上分析,我们需把用户id转化为字符串,把时间order_id转化为时间格式: ① 时间类型转换 # 时间类型转换,增加‘month’列 df['order_dt'] = pd.to_datetime(df.order_dt,format='%Y%m%d') df['month'] = df.order_dt.values.astype('datetime64[M]')
2.数据排序 # 按照“order_dt”排序 df = df.sort_values(by = 'order_dt',ascending =True)3.缺失值处理 我们检查是否存在缺失值: for i in df.columns: print(df[i].isnull().value_counts())
检查描述统计信息,查看是否存在异常 大部分订单只购买了少量商品(平均值2.41),有一定极值干扰; 影虎的消费金额比较稳定(平均值35.89元,中位数25.98元),有一定极值干扰; 最后,我们对index重新命名: df = df.reset_index(drop = True)
1.用户消费趋势分析(按月) 我们按月度对用户进行分析,须将数据框按月分组: g_month = df.groupby('month')1 每月消费金额 # 每月消费总金额 g_month.order_account.sum()2 每月消费次数 # 每月消费总次数 g_month.user_id.count()3 每月购买数量 # 每月购买数量 g_month.order_products.sum()4 每月消费人数 # 每月消费人数 g_month.user_id.apply(lambda x : len(x.drop_duplicates()))以上我们也可用以下方式来统一分析: df_table = df.pivot_table(index = 'month', values = ['order_products','order_account','user_id'], aggfunc = {'order_products':'sum', 'order_account':'sum', 'user_id':'count'})
2.用户个体消费 与按月分析不同,此次需要对数据库按用户id进行分组: 1.用户消费金额、消费次数的描述统计 # 按照用户进行分组 g_user = df.groupby('user_id') # 用户消费金额、消费次数的描述统计 g_user.sum().describe()
接着,我们对‘label’列分组求和: rfm.groupby('label').sum()
我们进行可视化: rfm.loc[rfm.label == '重要价值客户','color'] = 'g' rfm.loc[rfm.label != '重要价值客户','color'] = 'r' rfm.plot.scatter('F','R',c = rfm.color)② 用户生命周期-新、老、活跃、回流、流失 # 用户生命周期-新、老、活跃、回流、流失 pivoted_counts = df.pivot_table(index = 'user_id', columns= 'month', values= 'order_dt', aggfunc= 'count').fillna(0)
① 用户订单周期 # 用户订单周期 order_diff = g_user.apply(lambda x: x.order_dt - x.order_dt.shift())
6.用户生命周期(按第一次&最后一次消费) 我们查看用生命周期(第一次&最后一次)描述统计: (user_life['max'] - user_life['min']).describe()
4.用户复购率和留存率 1)复购率 自然月内,购买多次的用户占比: 我们根据上述的对用户按月统计购买量pivoted_counts来分析: 如果当月购买了1次以上(大于1),则为1,存在复购;若购买了1次,为0;当月购买了0次,则为NAN; purchase_r = pivoted_counts.applymap(lambda x : 1 if x > 1 else np.NAN if x == 0 else 0 )求和,为当月复购的人数;计数,为当月购买人数: (purchase_r.sum() / purchase_r.count()).plot(figsize = (10,4))
定义函数,如果当月购买,下月也购买为1;如果当月购买下月未购买,为0;如果当月未购买,则为NAN; def purchase_back(data): status = [] for i in range(17): if data[i] ==1: if data[i+1] == 1 : status.append(1) if data[i+1] == 0 : status.append(0) else: status.append(np.NAN) status.append(np.NAN) return status purchase_b = df_purchase.apply(purchase_back,axis=1) purchase_b = pd.DataFrame(purchase_b)[0].apply(pd.Series) purchase_b.columns = pivoted_counts.columns
|
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |