电商平台用户画像分析
1、项目背景
1.1 分析目的
通过分析用户的行为特征,深挖用户的潜在价值。
1.2 产品简述
由于数据脱敏无法具体了解产品的种类,通过数据只能基本判断该产品的消耗量和复购率并不是很高,主要是在电商平台上进行销售,面向群体较广,各个年龄段和性别基本都有购买的记录。
1.3 数据集介绍
1.3.1 数据源:
User_table.csv、Data_Action_201602.csv、Data_Action_201603.csv、Data_Action_201604.csv
1.3.2 数据量级
共有50601736条数据(5000万+)
1.3.3 数据字段解释
- User_table.csv,用户数据介绍
- Data_Action_201602.csv、Data_Action_201603.csv、Data_Action_201604.csv,用户行为数据特征**
ata-draft-node="block" data-draft-type="table" data-size="normal" data-row-style="normal">
user_id | 用户编号 | 脱敏 |
sku_id | 商品编号 | 脱敏 |
time | 行为时间 | / |
model_id | 点击模块编号 | 脱敏 |
type | 行为类型 | 1.浏览商品详情页;2.加入购物车;3.购物车删除;4.下单;5.关注;6.点击 |
cate | 品类ID | 脱敏 |
brand | 品牌ID | 脱敏 |
2、标记高潜用户
高潜用户应该具有以下特征:
- 必须有购买行为
- 对一个商品购买和其他交互行为(浏览、点击、收藏、等(时间差应该多于一天(时间间隔可以根据实际情况自己定义)
2.1 将多个表用户行为数据合并
import pandas as pd
# 1. 由于每个csv中大概都有100多万条数据,我们采取分数据块读取
# 读取文件数据def read_actionData(filePath,size=10000):
'''
filePath : 文件路径
size : 数据行数
'''
使用迭代器的方式读取数据
df = pd.read_csv(filePath, header=0, iterator=True)
# 保存数据块的列表,保存单个csv的数据
chunks = []
# 循环起始值
loop = True
while loop:
try:
#分块迭代读取数据, 每次读10000条
chunk = df.get_chunk(size)[["user_id", "sku_id", "type", "time",'cate']]
chunks.append(chunk)
#当csv文件数据读取完毕时候,报错误
except StopIteration:
loop = False
print("Iteration is stopped")
df_ac = pd.concat(chunks, ignore_index=True)
return df_ac
#2.将多个表的数据合并在一起
#df_ac大列表接受3个表的数据 chunks
df_ac = []
df_ac.append(read_actionData(filePath='Data_Action_201602.csv'))
df_ac.append(read_actionData(filePath='Data_Action_201603.csv'))
df_ac.append(read_actionData(filePath='Data_Action_201604.csv'))
#3.将多个表的数据转成数组形式
df_ac = pd.concat(df_ac, ignore_index=True)
df_ac
简单浏览下数据
df_ac.describe()
df_ac.info()
2.2 提取type为4的数据
#1.找到type为4的用户
df_ac_type = df_ac[df_ac['type']==4]
df_ac_type
2.3 查看每类商品用户下单的占比
#2每类商品购买占比
#找到高潜用户可以不用这一步进行分析
cate_count = df_ac_type.groupby('cate').count()
cate_count
cate_count['rate'] = [i/df_ac_type.shape[0] for i in cate_count['time'].values.tolist()]
cate_count
2.4 选取第四类产品的数据为例
#3.以cate4为例进行研究
df_ac_cate = df_ac_type[df_ac_type['cate']==4]
df_ac_cate
2.5 用户最后购买时间
#4.用户最后购买时间
def last_time(user):
return user['time'].max()
df_usr_buy_time = df_ac_cate.groupby(by='user_id').apply(last_time)
df_usr_buy_time
print(type(df_usr_buy_time))
df_usr_buy_time
2.6 用户最早与该类产品发生交互的日期
#5.用户第一次与该类产品发生行为的日期
df_ac_allcate = df_ac[df_ac['cate']==4]
df_ac_allcate
#根据有最后一次购买时间,df_usr_buy_time 与df_ac_allcate 匹配
df_all_buy_ac = pd.merge(df_usr_buy_time.to_frame(),df_ac_allcate,on='user_id')
df_all_buy_ac
#获取用户第一次行为时间
def first_time(user):
return user['time'].min()
df_usr_ac_firsttime = df_all_buy_ac.groupby(by='user_id').apply(first_time)
df_usr_ac_firsttime
2.7 计算购买行为和第一次交互行为的时间差
#6.计算时间差
df = pd.merge(df_usr_buy_time.to_frame(),df_usr_ac_firsttime.to_frame(),on='user_id')
df.columns = ['buy_time','ac_time']
df['days'] = (df['buy_time'].astype('datetime64')-df['ac_time'].astype('datetime64')).dt.days
df
2.8 获取高潜用户
#7找到高潜用户
high_dive = df[df['days']>1]
high_dive
3.分析高潜用户行为
3.1 筛选高潜客户的静态数据
#1.合并两个表
user_table = pd.read_csv('data/User_table.csv')
# 将两个时间进行合并high_dive和user_table
user_table_high = pd.merge(user_table,
high_dive,
on='user_id')
user_table_high
3.2 高潜用户的客户等级分布
#2.高潜用户等级情况
user_lv_count = user_table_high.groupby('user_lv_cd').count()
user_lv_count
# 绘制饼图
import matplotlib.pyplot as plt
import matplotlib
plt.pie(user_lv_count['user_id'].values.tolist(),
labels=user_lv_count.index.tolist(),
autopct="%1.1f%%")
plt.show()
3.3 高潜客户年龄段分布
#3.高潜用户年龄
user_age_count = user_table_high.groupby('age').count()
user_age_count
# 绘制饼图
import matplotlib.pyplot as plt
import matplotlib
plt.bar(user_age_count.index.tolist(),
user_age_count['user_id'].values.tolist(),
width=0.3)
plt.show()
#这里的数据是脱敏了的,看样子进行猜测,-1应该是用户填写的错误数据,2是20~29岁,3是30~39岁,以此类推。
3.4 购买数量:不同量段的占比
#4购买数量分析
#先按购买数量分组,bins里的数量可以根据实际情况进行调整,由于购买数量主要集中在1~5,所以如下分类。
buy_num_groups = pd.cut(user_table_high['buy_num'], bins=[0,1,2,3,4,5,10,20,30,40,50])
#(0,1)(1,2)
#每一组个数
group_count = user_table_high.groupby(buy_num_groups).count()
group_count
#占比
group_count['rate'] = ['%.3f%%' %(value/user_table_high.count()['user_id']*100) for value in group_count['user_id'].values.tolist()]
group_count['rate']
3.5 高潜用户的购买该商品的记录
根据df_ac_cate 和高潜用户id匹配出高潜用户的购买该商品的记录.
#5.找到高潜用户的购买记录
#根据df_ac_cate 4类 产品
#高潜用户进行匹配, 购买产品记录
df_buy_high = df_ac_cate[df_ac_cate['user_id'].isin(high_dive.index.to_list())]
df_buy_high
df_buy_high['time'] = df_buy_high['time'].astype('datetime64')
df_buy_high
3.6 周一到周日每天的购买行为分布
df_buy_high['weekday'] = df_buy_high['time'].apply(lambda x: x.weekday() + 1)
df_buy_high_count = df_buy_high.groupby(by='weekday').count()
df_buy_high_count
plt.bar(df_buy_high_count.index.tolist(),df_buy_high_count['user_id'].values.tolist())
plt.show()
4、总结
此次分析是针对电商用户的行为数据进行分析,目的是找到高潜用户的行为特征,最大程度地挖掘高潜用户的价值。
- 数据分析的过程和每点小结:
1)定义了高潜用户,应该具有以下特征: - 必须有购买行为;
- 对一个商品购买和其他交互行为(浏览、点击、收藏、等(时间差应该多于一天(时间间隔可以根据实际情况自己定义)
2)先在所有的几百万份数据中找到下单的用户(type=4);
3)再在其中找购买了cate=4的用户;
4)通过计算购买行为和第一次交互行为的时间差 找到符合要求的高潜用户;
5)分析高潜用户的客户等级分布,主要分布在4、5级,说明高潜用户基本上是该平台的长期用户,购买频次不低(后续补上RFM模型进行分析)
6)分析高潜用户的年龄段,主要集中在30·40岁,说明大部分高潜用户是有独立经济能力,有稳定的购买能力,不是一时冲动的消费行为,可以往提升用户粘性方向走;
7)分析高潜用户的购买数量,95%集中在1~5次,67%是在2次以内,说明针对高潜用户在购买数量上还有很大的提升空间,可以考虑做一些促销活动(买几送几,捆绑销售之类的等等)去推动下。
8)分析周一至周日的购买行为分布,周四下单的最多,其余六天基本持平,但周六日最低的,这种情况有多种可能,主要是和产品特质有关,有可能是30~40岁的高潜用户想着周四下单,周六日空闲时就可以拿到商品,立马能使用(在不急迫的情况下追求体验效率)。可以将商品4的相关活动设置在周四。
######说在最后,之后有时间会补充上RFM模型以及更好的可视化展示报告。
本文转自 知乎,原文链接:https://zhuanlan.zhihu.com/p/240512113,如需转载请自行联系原作者