一、数据导入与清洗
源数据量有1亿余条,为减轻计算量,抽样总量的20%用于计算分析
#coding=gbk
import numpy as py
import pandas as pd
import datetime
import os
os.chdir('D:/pythonlily/test1')
data=pd.read_csv('UserBehavior.csv',header=None)
data.columns=['用户id','商品id','商品类目id','行为类型','时间戳']
df=data.sample(frac=0.2)
抽样后的数量大约2000w,查看下数据集整体情况
官方说时间范围是2017年11月25日至2017年12月3日之间,但是从这里看出时间有异常值,剔除异常值,只筛选2017年11月25日至2017年12月3日的数据。剔除时间异常值1w+条后,仍有2000w+的数量。
df=df[(df['时间戳']<1512316800)&(df['时间戳']>1511539200)]
将时间戳转换为日期格式
tt=[]
for i in range(0,len(df)):
row= df['时间戳'].iloc[i]
a = int(row)
date = datetime.datetime.fromtimestamp(a)
targetDate = date.strftime("%Y-%m-%d%H:%M:%S")
tt.append(targetDate)
df['日期']=tt
二、提出问题并计算分析
01用户行为转化漏斗,找到需要改进的环节,即uv→pv→(cart+fav)→buy
02从一周的时间维度了解用户的行为习惯,即计算每日各环节的用户行为
03从一天24H时间维度了解用户的行为习惯,即计算用户各个时间段的用户行为差别
04不同商品类目中用户行为的差别分析,购买次数占前80%的品类有多少?
01用户行为转化漏斗
uv=len(df['用户id'].unique())
temp=df[df['行为类型']=='pv'].loc[:,['用户id']]
pv=len(temp['用户id'].unique())
temp=df[df['行为类型']=='fav'].loc[:,['用户id']]
fav=len(temp['用户id'].unique())
temp=df[df['行为类型']=='cart'].loc[:,['用户id']]
cart=len(temp['用户id'].unique())
temp=df[df['行为类型']=='buy'].loc[:,['用户id']]
buy=len(temp['用户id'].unique())
所以uv=980383,pv=972254,cart=464816,fav=221842,buy=283387,总体转化率为buy/uv=28.9%,各环节转化率漏斗图如下:
02从一周的时间维度了解用户的行为习惯
df['日期2']=df['日期'].str[:10] #提取字符串类型中的日期
ff=df[['用户id','行为类型','日期2']]
pd.pivot_table(ff,index=['日期2'],columns=['行为类型'],aggfunc='count',fill_value=0)
由此可知,周末(12/2、12/3)用户的各种行为数明显高于其他日期,这很正常。看看转化率:
一般情况下,用户选中心仪的商品直接购买,少部分用户先收藏或者加入购物车后再付款购买。上图显示周末的收藏+购物车的转化率显著上升、购买率有所下滑的,可能用户在周末时间比较充裕、货比三家的行为更多,购买行为比工作日更加理性。
03从一天24H时间维度了解用户的行为习惯
df['时刻']=df['日期'].str[11:13]
dd=df[['用户id','时刻','行为类型']]
pd.pivot_table(dd,index='时刻',columns='行为类型',aggfunc='count')
一天中凌晨3~6点的用户量是最少的,白天11~19点这8个小时,各种用户行为发生的数量是比较平稳的,晚上8点后至11点用户的访问量快速上升,达到最高峰 。
收藏+购物车的转化率比较稳定,但是购买率最高时段是上午10点~12点,均有30%以上的转化率,用户量最高峰的22~23点反而购买率较低,可能也是白天没有晚上时间充裕,购买行为更加干脆。
04不同商品类目中用户行为的差别分析
计算购买数最多的商品类目id,并查看前20位的购买行为的差别
cc=df[['用户id','商品类目id','行为类型']]
re=pd.pivot_table(cc,index='商品类目id',columns='行为类型',aggfunc='count',fill_value=0)
re=re.reset_index()
re.columns=['商品类目id ','buy','cart','fav','pv']
re=re.sort_values('buy',ascending=False)
re.head(20)
显然购买的最多的商品类目,其浏览点击、收藏、加购物车的行为数量不一定是最高的,即转化率高、而人气不一定最高,大胆猜测下转化率高的类目为男性刚需商品,人气高的商品类目为女性所需商品。
re['购买次数占比']=re['buy']/re['buy'].sum()
re['购买次数累计占比']=re['购买次数占比'].cumsum()
re['购买次数前0.8']=re['购买次数累计占比']<=0.8
re.groupby(['购买次数前0.8']).size()
购买次数前0.8
False 8038
True 687
dtype: int64
所以贡献80%购买次数占比的商品类目个数是687,占所有类目的per=687/8725=8%。
三、结论
1、总体的用户购买率为28.9%,购买转化率与行业的标准进行比较,后面可以采取活动(用户细分,转化路径细查)提高购买转化率。
2、该商铺的用户行为周末比工作日更加活跃,晚上比白天更活跃,并于22:00~23:00点达到活跃高峰值,运营人员可根据活跃时间进行相关的活动;
3、针对不同品类的购买转化率采取不同的策略,提高已购品类的转化率,一方面,对未被购买的品类进行分析,找出原因,促成购买。