数据分析项目|淘宝用户行为分析(Python+可视化,面试中handler这些必备知识点你都知道吗英语

pvuv_hour.plot(x = ‘hour’, secondary_y = ‘uv’, grid = True, figsize = (10, 5),
xticks = [x for x in range(24)], title = ‘pvuv_hour’)

在这里插入图片描述
从上图可以看出用户的活跃时间从上午10点持续到晚上10点,尤其是从下午6点开始呈现明显上升趋势,到晚上九点左右达到峰值,这符合大多数人的日常作息规律。由此可以建议店铺调整客服工作时间,增加下午6点到晚上10点的客服数量,促使用户从浏览向购买转换。

4.1.2 平均访问深度和跳失率

计算总用户数量

uv_count = len(data.user_id.unique())

计算总的页面浏览数量

pv_count = data[data.behavior_type == ‘pv’].shape[0]

计算平均访问深度

print(‘Average access depth is %.1f’ % (pv_count / uv_count))

计算每个用户浏览的页面数

pv_count_perUser = data[data[‘behavior_type’] == ‘pv’].groupby(‘user_id’)[‘behavior_type’]
.count().reset_index().rename(columns = {‘behavior_type’:‘pv_count’})

计算只浏览过一次界面的用户数量

bounce_user_count = pv_count_perUser[pv_count_perUser[‘pv_count’] == 1].shape[0]
print('Bounce Rate is %.3f%% ’ % (100 * (bounce_user_count / uv_count))

可以得到用户的平均访问深度为90.8,也就是说在11月25到12月3日9天内平均每个用户每天要访问10个界面,可见淘宝用户粘度很高。

按照流失率=只浏览一次界面/总用户计算的话,发现流失人数只有679人,Bounce Rate 是 0.069% 左右,所以平台整体流失率是相当低的。我觉得可以考虑将只有浏览记录再无其他行为的用户视为流失用户,分析此类人群的跳失原因。

之后可以细分到各个商品种类以及各个商品,计算其用户跳失率并采取相应的措施。

4.1.3 用户转化情况

接下来分析用户从浏览到最后下单的转化情况,首先先了解一下用户浏览、收藏、加购物车和购买行为的整体分布趋势。

pv_detail = data.groupby([‘behavior_type’,‘hour’])[‘user_id’].count().reset_index().rename(columns={‘user_id’:‘total_behavior’})
fig, axes = plt.subplots(2, 1, figsize = (10,8), sharex = True)
sns.pointplot(x = ‘hour’,y = ‘total_behavior’, hue = ‘behavior_type’, data = pv_detail, ax = axes[0])
sns.pointplot(x = ‘hour’,y = ‘total_behavior’, hue = ‘behavior_type’, data = pv_detail[pv_detail.behavior_type!=‘pv’], ax = axes[1])
axes[0].set_title(‘different_behavior_count’)
axes[0].grid()
axes[1].set_title(‘different_behavior_count_exceptpv’)
axes[1].grid()

在这里插入图片描述
四种用户行为的波动情况基本一致,其中浏览页面pv数远大于其他三项,用户加购物车、收藏和购买数依次降低,可以通过漏斗模型整体分析用户转化情况。
在这里插入图片描述
从浏览到加入购物车的转换率为6.25%,收藏商品的转换率为3.26%,最后购买的转换率为2.23%左右。

4.1.4 用户行为路径分析

因为数据中用户行为分为四类,按照浏览在前,购买最后的话,一共有16种组合,利用桑基图分析如下所示:

img

一般认为购买之前必须得先浏览,因为所给数据是截取给定时间内的,所以会存在上图下方unpv的情况。现在只考虑最后产生购买行为的情况,用户从浏览到最后购买其实只有(1)浏览-购买、(2)浏览-加购物车-购买、(3)浏览-收藏-购买、(4)浏览-加购物车-收藏-购买(浏览-收藏-加购物车-购买)等四种情况,再次利用桑基图分析如下:
在这里插入图片描述
由上图可知,大多数购买行为发生在浏览之后,并没有加购物车、收藏等行为。

4.1.5 用户留存分析

下面计算本数据中的用户留存:

计算n日留存率

def cal_retention(n = 1):

用于记录出现过的user_id

user_list = []

取最后一天的前N天

cal_date = pd.Series(data[‘date’].unique()).sort_values()[:-n]

用于存储最后留存率结果

retention_rates = []
for to_date in cal_date:

通过与已经有记录的用户列表的集合对比,识别新用户

new_user_list = set(data[data[‘date’] == to_date][‘user_id’]) - set(user_list)

用于存储最后留存率结果

user_list.extend(new_user_list)

第n天留存情况

user_ndate = data[data[‘date’] == to_date + timedelta(n)][‘user_id’].unique()
retention_cnt = 0
for user_id in user_ndate:
if user_id in new_user_list:
retention_cnt += 1
retention_rate = retention_cnt / len(new_user_list)

汇总N日留存数据

retention_rates.append(retention_rate)
u_retention = pd.Series(retention_rates, index = cal_date)

return u_retention

将每日的留存率聚合后如下图所示:
在这里插入图片描述
可视化后如下:
在这里插入图片描述
因为所给数据是截取的部分数据,这里暂认为11月25日所有的登录用户都是新用户,所以11月25日的用户留存率最高。从之前的PV和UV分析可推测平台从12月1日开始搞活动,进而吸引用户登录,所以11月30日和12月1日用户留存率增加。

(二)用户消费习惯分析

4.2.1 用户付费率PUR(Paying User Rate)

根据用户付费率 = 有购买记录的用户 / 活跃用户计算:

分析用户付费率

paying_user_count = data[data.behavior_type == ‘buy’].user_id.unique().shape[0]

print(‘Paying user Rate is %.2f%%’ % ( 100 * paying_user_count / uv_count))

得到用户付费率为67.94%,淘宝用户付费率还是比较高的。

4.2.2 用户购买次数

根据总购买次数 / 总付费用户可得到付费用户平均消费次数为3次,下面进一步分析各购买次数的用户分布:
在这里插入图片描述
由上图可知,购买次数为1次的用户数量最多,大约有88%的用户购买次数在5次以内,购买次数在10次以内的用户占总付费用户的98%。

4.2.3 用户复购率

根据用户复购率 = 多次购买用户数 / 总付费用户计算:

#每个付费用户的购买次数
peruser_paying_count = data[data[‘behavior_type’] == ‘buy’].groupby(‘user_id’).count()[‘behavior_type’]
.reset_index().rename(columns={‘behavior_type’:‘paying_count’})

复购用户数量 通过筛选支付次数>=2

paying_retention_user_count = peruser_paying_count[peruser_paying_count[‘paying_count’] >= 2][‘user_id’].count()

print(‘Buyer Retention Rate %.2f%%’ % (100 * paying_retention_user_count / paying_user_count))

可得用户复购率为66.01%。还可以计算用户复购的间隔时间:

buyer_retention_diff = data[data.type == ‘buy’].groupby(‘user_id’).date.apply(lambda x: x.sort_values().diff(1).dropna())
buyer_retention_diff = buyer_retention_diff.map(lambda x: x.days)
buyer_retention_diff.describe()

在这里插入图片描述

箱线图表示不太明显,根据describe()返回值分析,用户复购平均间隔1.2天,有超过50%的用户在同一天内产生多笔交易。

4.2.4 商品大类销售分析

分析商品浏览TopN和商品销售TopN的数据:

定义计算销售/浏览TopN的函数

def cal_topN (index, behavior_type, n):

创建透视表

topN = pd.pivot_table(data, index = index, values = ‘user_id’, columns = ‘behavior_type’, fill_value=0,
aggfunc=‘count’, margins = True).sort_values(by = behavior_type, ascending = False).fillna(0).head(n)
topN[‘paying_rate’] = topN.apply(lambda x: x.buy / x.pv, axis = 1).apply(lambda x: format(x, ‘.2%’))
topN = topN[[‘pv’,‘buy’,‘paying_rate’]]
return topN

分别查看商品浏览量前10和商品销售量前10:

计算商品大类浏览量前10

category_pv_topN = cal_topN(‘category_id’, ‘pv’, 10)

计算商品大类购买量前10

category_buy_topN = cal_topN(‘category_id’, ‘buy’, 10)

在这里插入图片描述

针对支付率较高的商品应该分析其原因,思考是否能拓展到其他商品上去。

进一步查看购买量前10和浏览量前10的交集:

查看购买量和浏览量前10的交集

category_pv_buy_topN = pd.merge(category_pv_topN, category_buy_topN,
on = ‘category_id’, how =‘inner’)

在这里插入图片描述

由上图可知存在部分商品浏览量高但购买量较低,应进一步分析原因。

此部分只对商品大类进行分析,可以套用此代码,将‘categoryid’换为‘item_id’进一步分析具体商品销售情况。

4.2.5 商品大类行为分析

即针对所有产生购买行为的商品种类,分析其从浏览到最后购买发生的行为数量和最终购买量的关系。

筛选出产生购买行为的数据

data_buy = data[data[‘behavior_type’] == ‘buy’]

计算各种商品大类的交易数

buy_category = data_buy[[‘category_id’,‘behavior_type’]].groupby(‘category_id’)
.count().rename(columns = {‘behavior_type’:‘buy_count’})

整理各种商品大类的交易数

buy_category = buy_category.sort_values(‘buy_count’,ascending=False).reset_index()

将产生购买行为的数据和原数据外连接,进而得到有购买记录的商品大类的其他行为信息

behav_category = pd.merge(data_buy[[‘user_id’,‘category_id’]], data,
on = [‘user_id’,‘category_id’], how = ‘left’)

计算各种商品大类的行为数

behav_category = behav_category[[‘category_id’, ‘behavior_type’]].groupby(‘category_id’).count()
.reset_index().rename(columns={‘behavior_type’:‘behavior_count’})

统计分析各种商品大类的购买数和产生行为数

buy_behav_category = pd.merge(buy_category, behav_category, on = ‘category_id’, how = ‘inner’)
buy_behav_category = buy_behav_category.assign(behav_per_buy = buy_behav_category[‘behavior_count’] / buy_behav_category[‘buy_count’])

可视化后如下:
在这里插入图片描述
由上图可知,大部分购买行为平均只会产生20次以内的行为,可以据此对商品初步分类,以实施不同的运营策略。

  • 购买量大、行为数多(上图右上部分):推测该区域商品是快销产品或高频刚需物品,不仅销量大而且可选择品牌众多,如食品、日用品、护肤品和衣物服装等。平台可以据此将该商品类别建立专区,可以同时浏览查看该类别下的诸多产品,减少用户的多次搜索,提升用户体验度
  • 购买量大、行为数少(上图左上部分):推测该区域商品主要为高频产品,行为数少说明可能品牌种类少、被少数品牌垄断,或者是用户对某品牌建立了一定的依赖度等等。此类区域的商品,用户决策相对会轻松,因此应着重快速让用户触达商品,可以优先展示用户购买过的品牌等。
  • 购买量小、行为数少(上图左下部分):大多数商品大类都集中分布在这个区域,应该针对具体类别具体分析。
  • 购买量小、行为数多(上图右下部分):推测该区域商品低频或者商品贵重,用户需要货比三家、再三考虑后下单,对此可以改善商品的介绍方式,如现在的品牌直播,让用户更快速、直观的了解商品。

4.2.6 商品关联性分析

之后准备做专题分析,这里先占个坑…

(三)用户价值分析

这里利用RFM模型去分析用户价值,以便针对不同用户采取不同措施。RFM模型的概念如下:

  • R(Recency):客户最近一次交易时间的间隔。R值越大,表示客户交易发生的日期越久,反之则表示客户交易发生的日期越近。
  • F(Frequency):客户在最近一段时间内交易的次数。F值越大,表示客户交易越频繁,反之则表示客户交易不够活跃。
  • M(Monetary):客户在最近一段时间内交易的金额。M值越大,表示客户价值越高,反之则表示客户价值越低。
    在这里插入图片描述
    由于所给数据集不包含用户购买金额,所以只考虑最近消费时间R和购买频率F,将客户分为有价值的客户、保持客户、发展客户和挽留客户。

1 R: 最近一次消费距今天数统计

nowDate = datetime.datetime(2017,12,4) # 假定当前时间为(2017,12,4)
user_recent_pay = data[data[‘behavior_type’] == ‘buy’].groupby(‘user_id’)[‘date’]
.apply(lambda x: nowDate - x.sort_values().iloc[-1])
user_recent_pay = user_recent_pay.reset_index().rename(columns={‘date’:‘recent’})

2 F: 消费次数统计

user_freq = data[data[‘behavior_type’] == ‘buy’].groupby(‘user_id’).date.count()
user_freq = user_freq.reset_index().rename(columns={‘date’:‘freq’})

3 通过user_id将R、F合并

rfm = pd.merge(user_recent_pay, user_freq, left_on=‘user_id’, right_on=‘user_id’)

4 给R、F打分score

rfm[‘score_recent’] = pd.qcut(rfm[‘recent’], 2, labels = [‘1’, ‘0’])
rfm[‘score_freq’] = pd.qcut(rfm[‘freq’], 2, labels = [‘0’, ‘1’])

5 得分拼接

rfm[‘rfm’] = rfm[‘score_recent’].str.cat(rfm[‘score_freq’])

6 根据RFM分类

rfm = rfm.assign(user_type = rfm[‘rfm’]
.map({‘11’:‘重要客户’, ‘01’:‘保持客户’, ‘10’:‘发展客户’, ‘00’:‘挽留客户’}))

可视化后如下图所示:
在这里插入图片描述
由上图可知重要客户和发展客户比例相当,各占总用户的三分之一左右,挽留客户最少。

五、总结与建议

总结分析的结论并提出一些建议

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。

别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。

我先来介绍一下这些东西怎么用,文末抱走。


(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

(4)200多本电子书

这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。

基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。

(5)Python知识点汇总

知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。

在这里插入图片描述

(6)其他资料

还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。

在这里插入图片描述

这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

(6)其他资料

还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。

在这里插入图片描述

这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-x9TgIBUX-1712808772332)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值