数据来源https://tianchi.aliyun.com/dataset/dataDetail?dataId=46
用户行为表:用户ID,商品ID,用户行为。用户地点,商品大类ID,时间
需求:该数据为淘宝2014年用户消费行为表,计算各网页的转换率,每日用户活跃时间,寻找提高销量的办法。
成果:
从该图中,用户浏览到收藏或加购物车的转换率相对较低,只有5%左右,从浏览到购买的转化率只有1%左右,可以优化商品的推荐商品的推荐机制,优化用户搜索效率,提高用户购买的比例。
需求:求页面的pv,uv,pv/uv,复购率
需求:找到每天用户哪个时间段活跃
浏览用户在一天中的行为,用户在0-6点是睡觉时间,6点过后用户量逐渐增多,10点到达顶峰,推测是用户起床时间。这时的浏览量处于一天中较小的时候。
晚上6点过后,用户量迅速上升,成交量也在增加,在晚上10点浏览慢慢下降,推测为用户休息时间。如果要安排促销活动,最好在晚上6-10点这个时间段内,效果最好。
分析过程:
1、导入数据
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use('ggplot')
df=pd.read_csv('tianchi_mobile_recommend_train_user.csv')
2、查看属性
需要把item_category删去,time分割。
3、去重,去缺失值
#把time除空
df=df[~df['time'].isnull()]
#把time分割
df['date']=df.time.apply(lambda x:x.split(' ')[0])
df['time']=df.time.apply(lambda x:x.split(' ')[1])
#把user_geohash去除
df=df.drop(['user_geohash'],axis=1)
#去重
df=df.drop_duplicates()
4、数据一致化处理
#behavior 列上有1-4,把其对应为浏览,收藏,加购物车,购买
def df_beh(x):
s={1:'pv',2:'favor',3:'cart',4:'buy'}
return s[x]
df['behavior_type']=df.behavior_type.apply(df_beh)
5、转化率分析
#漏斗模型分析
df_count=df.behavior_type.value_counts()
print("浏览-收藏+加购物车的转化率:",(df_count.cart+df_count.favor)/df_count.pv)
print('收藏+加购物车-购买的转化率:',df_count.buy/(df_count.cart+df_count.favor))
print('浏览-购买转化率:',df_count.buy/df_count.pv)
6、生成漏斗模型
#生成漏斗
#数据整理为漏斗格式
s=[('pv',df_count.pv),('favor',df_count.favor),('cart',df_count.cart),('buy',df_count.buy)]
#转化成百分比形式
max_count=s[0][1]
s1=[(x,round(y*100/max_count,2))
for x,y in s]
#导入模块
import pyecharts.options as opts
from pyecharts.charts import Funnel
#建立空漏斗,把数据加到空漏斗里
funnel=Funnel()
funnel.add('用户比例',s1)
#显示
funnel.render_notebook()
7、有过购买行为的用户占比
#有过购买行为的用户量占比
#把购买行为的用户提取,去重
df_buy=df[df['behavior_type']=='buy'].drop_duplicates('user_id').count()
#把全体用户去重,计数
df_user=df.drop_duplicates('user_id').count()
#除
print('有过购买行为的用户占比:',df_buy[0]/df_user[0])
8、复购率
#用户的复购率
#提取购买次数超过1的用户
rebuy_user=df[df['behavior_type']=='buy'].groupby(['user_id']).count()
(rebuy_user[rebuy_user['behavior_type']>=2].count()/df_buy[0])[0]
9、不同时间段用户行为分析
#日均访问量
df_pv=df[df['behavior_type']=='pv'].groupby('date').count().iloc[:,:1].rename(columns={'user_id':'pv_count'})
#uv
df_uv_a=df[df['behavior_type']=='pv'].groupby(['date','user_id']).count().reset_index()
df_uv=df_uv_a.groupby('date').count().iloc[:,:1].rename(columns={'user_id':'uv_count'})
#pv/uv
mean_df=pd.concat([df_pv,df_uv],axis=1)
mean_df['pv/uv']=mean_df['pv_count']/mean_df['uv_count']
10、画图
#画图xticks和rot分别显示横坐标值和调整横坐标显示长度。title显示标题
df_pv.plot(kind='line',xticks=range(0,31),rot=90,title='pv')
df_uv.plot(kind='line',xticks=range(0,31),rot=90,title='uv')
mean_df['pv/uv'].plot(kind='line',xticks=range(0,31),rot=90,title='uv')
11、用户活跃
#用户活跃时间段分析
dpv=df[df['behavior_type']=='pv'].groupby('time').count().iloc[:,:1].rename(columns={'user_id':'pv'})
dfavor=df[df['behavior_type']=='favor'].groupby('time').count().iloc[:,:1].rename(columns={'user_id':'favor'})
dcart=df[df['behavior_type']=='cart'].groupby('time').count().iloc[:,:1].rename(columns={'user_id':'cart'})
dbuy=df[df['behavior_type']=='buy'].groupby('time').count().iloc[:,:1].rename(columns={'user_id':'buy'})
#连接表(pv值太大,单独做图)
daily_df=pd.concat([dfavor,dcart,dbuy],axis=1)
#作图
daily_df.plot(xticks=range(25),rot=90)
dpv.plot(xticks=range(25),rot=90)
参考:淘宝用户行为数据-探索性分析-天池实验室-阿里云天池