淘宝APP用户行为数据分析案例(附python代码及注释)

淘宝APP用户行为数据分析案例
在这里插入图片描述
一.分析背景与目的
1.1背景与数据限制

电商平台的最核心的功能就是为买卖双方提供高效和体验良好的交易服务。得益于算法技术的发展,淘宝APP给买方提供了搜索、推荐及广告等系统和功能,使用户能高效地触达感兴趣或有购买意愿的商品。上述系统和功能来源于海量的用户行为数据,而此后的数据变化又反馈到系统中,不断提升系统和功能的能效。此外,对于其他的如优惠活动,购物节,APP改版等运营行为,也能通过用户行为数据表现来衡量优劣。

本案例使用的数据集有相当的限制:时间维度限制在9天内,商品数据经脱敏,行为数据只有4种。以下分析内容都在此数据集的限制范围内开展。

1.2核心业务描述
1.2.1核心功能

淘宝作为商品交易平台,对于用户群体,核心功能为用户高效、优质的购物体验,并且尽可能让用户被动接触到有潜在购物意愿的商品。

1.2.2用户侧核心指标

根据淘宝APP的核心业务,用户侧的核心指标要能有效反映用户的量、粘性、使用频率和购买转化。

1)流量类:
访问数:pv,当日淘宝APP的页面访问数
用户数:uv,当日在淘宝AAP产生数据的去重用户数
活跃用户数:active_user,当日在淘宝APP上产生超过3次行为数据的用户数
交易用户数:buy_user,当日在淘宝APP上产生购买行为数据的去重用户数

2)比例与均值:
活跃用户比例:日活跃用户/日uv
交易用户比例:日交易用户数/日uv
用户pv日均值:日pv/日uv
9天内用户访问天数:统计9天内,用户有多少天活跃

1.3 分析用户行为的目的
1.3.1用户行为的定义

用户在使用淘宝APP时发生的行为动作,包括以上数据集的四类,以及取消收藏/清空购物车/搜索/关注店铺等情况,由于数据局限性,在此仅分析数据集中的数据行为。

1.3.2分析数据用户行为目的和意义
1)分析指标和结果可用作监控日常业务;
2)指标分析或进一步的下钻分析,挖掘业务增长点;
3)数据可用作训练集,指标和结果可用作为检验推荐系统,搜索系统及广告系统性能的指标之一。
备注:上述提到的挖掘增长点,围绕1.2.2的核心指标进行,即增加用户粘性,促进用户交易。

1.4主要分析思路
根据上述,,案例的分析应主要围绕三个目的和两个核心业务开展,如下图
但由于数据集的限制,提升和检验方面也受到很大限制
在这里插入图片描述

二.数据集来源及理解

2.1数据来源
阿里天池官方数据集:User Behavior Data from Taobao for Recommendation

2.2数据特征
2.2.1总体描述
数据时间范围:2017-11-25至2017-12-03
文件类型:csv
文件大小:0.9G
数据表shape:1亿行,5字段

2.2.1字段描述
user_id:整数类型,序列化后的用户id
item_id:整数类型,序列化后的商品ID
category_id:整数类型,序列化后的商品所属类目ID
behaviour_type:用户行为,分成四类:
1)pv:商品详情页pv,等价于点击
2)buy:商品购买
3)fav:商品收藏
4)cart:商品加入购物车
timestamp:行为发生时的时间戳

2.3理解数据
1)数据集具有较大局限性:如时间短,无地域因素、商品id经脱敏等;
2)比较有分析价值的是行为与时间这两个维度

三.数据清洗
由于笔记本电脑内存不够,将数据集分成10份后,用其中1份进行统计分析,将所有代码封装好后跑其余的数据再合并就可以了。

3.1读取数据
在这里插入图片描述
3.2查看数据类型和缺失值
在这里插入图片描述
在这里插入图片描述
3.3异常值处理:
1)将timestamp转化成北京时间,并筛选出11月25日至11月3日的数据,被筛掉的数据约有5.5千条,只有总体数据的0.055%
2)behaviour-type中没有异常值
3.4数据清洗小结:
淘宝官方给出的数据集很干净,只有极少部分数据时间字段有异常值。

四.数据分析
4.1关键指标分析
4.1.1日均用户指标

在这里插入图片描述
4.1.2日均用户比例指标
在这里插入图片描述
4.1.3用户活跃天数分布
在这里插入图片描述
4.1.4关键指标小结分析

1)APP的日均用户较为稳定,曲线从12月2日起大幅上升,较大可能的原因是双12系列活动开始,后续可单独分析这几天的各项转化率。
2)日均活跃用户比例和日均购买用户比例相对稳定在79%和19%,推测可能是方差较小的正态分布,后续可手机长时间数据范围内的数据进行验证,用于假设检验业务是否出现异常。
3)12月2至3日用户数上升了32.3%,但活跃比例和购买比例分别下降了3.2%和6.7%,(数据由后两天均值除以前7天均值得出),说明由于活动吸引而来的用户,购买比例并没有比平时的用户高,建议在引流时要更加精准。要说明这几天数据的好坏,还要等到整个活动结束后复盘分析。
4)在9天的数据范围内,超过90%的用户9天内活跃超过两天,用户粘性高,后续可用周活跃天数比例来监控用户粘性的高低。
5)上述指标均可作为平台业务监控指标,当指标数据异常时(异常好/异常坏),分析人员都应该深挖异常的产生原因,从而增长业务,或避免问题再次发生。

4.2用户行为路径分析
单纯的转化漏斗图在此场景下会过于简化,参考意义不大,数据的4个行为可组合成16个路径,可清晰地区分用户路径行为。

4.2.1用户行为路径
数据根据用户id、商品id和行为去重后赋值计算得出,因此数据会少了用户复购的情况,核实后复购9天范围内同用户同商品的复购订单数为5单,影响可忽略不计;详情见附录代码。
在这里插入图片描述
3条高占比的购买路径分析:
a:unpv_unfav_uncart_buy: 50292
此路径除了购买其他行为,应是数据集时间范围外产生的,此处不作讨论。
b:pv_unfav_uncart_buy: 数量92426,占比:69%,uncart→buy的转化率为:1.4%
购买路径中,占比最高的是访问后直接购买,无加入购物车行为,可以认为是单件购买。此路径的意义在于,得出用户购买占比最大的路径数据,后续可根据商品类型,用户标签,是否包邮等特征继续下钻分析,提高该类商品/营销策略/广告的数据表现。
c:pv_unfav_cart_buy: 数量25351,占比19%,cart→buy的转化率为:9.9%;
访问后加入购物车购买是另外一种较典型的购买路径,一般可能为多件购买或者提前加入购物车(后续数据验证)上述3条高占比路径,都是无收藏的商品,但我们不能说收藏了的商品购买转化率低,因为此处时间范围短,在4.3中将分析用户时间行为分析路径。此外,分析高占比购买路径的对立路径,如pv_unfav_uncart_buy与pv_unfav_uncart_unbuy对立,可以分析流失原因。

4.2.2购买转化率
在这里插入图片描述
4.2.3小结
1)总体转化比例:
在这9天的数据中
收藏fav行为的转化率为 3.82%
加入购物车cart行为的转化率为 7.17%
购买buy行为的转化率为2.51%

2)不同路径的交易占比和购买转化率有较大差别,它们都代表用户行为的一种特征,通过比较路径转化率,比如有访问、收藏及加入购物车的路径的总体购买意愿大于只访问和收藏的路径,针对不同路径的用户及商品开展不一样的运营策略,逻辑上是可以提高业务效能的。此处的逻辑不是说让用户收藏和加购物车的商品越多越好,而是让用户接触到更多潜在消费商品越好。

3)细致分解用户行为和路径,是开展进一步多特征分析的基础,也是开始解释数据差异的基础。基于淘宝APP的巨量数据,我们可以将数据分解到比较细的维度来分类、预测、检验算法和模型,进而实施高效的运营策略。

4.3用户行为时间分析
4.3.1用户活跃时间

下图汇总了9天每个小时的pv,uv,和商品购买数量(乘5处理)
在这里插入图片描述
4.3.2购买行为时间分布
在这里插入图片描述

4.3.3小结
1)从pv和和用户数的时间分布上看,19:00-24:00是访问高峰期,符合人们的工作休息节律,并应在此时间段开展日常运营活动。日用户数和购买时间曲线趋势基本吻合,但17-19时购买数量减少的幅度较大,后续应分解分析其原因。

2)从购买行为时间分布图上看,收藏且有购物意愿的用户,超过95%会在3天内购买,加入购物车且有购物意愿的用户,超过92%会在5天内购买,可以在这些期限作适当的提示或活动,提高购买转化率。

4.4用户行为商品分析:

4.4.1 商品大类交易数占比

数据集中商品大类经脱敏,因此筛选出的商品大类交易数没有进一步的分析。
在这里插入图片描述

4.4.2商品大类购买行为
分析产生购买行为的数据中,一件商品的购买要经过多少个行为;由此可以分类商品大类的用户行为。
在这里插入图片描述
在这里插入图片描述
分析小结:由上图可见,大部分购买行为平均只会产生20次以的,对于划分开的不同用户行为的商品大类,实施不同的运营策略

区域1:购买数大,行为数也大,推测该区域商品是快消或高频物品,且品牌选择多,如服装、日用品、零食等,平台可根据区域1中商品大类的总体交易额、关注用户数及商品品类数等因素,为商品大类建设专区,减少用户的搜索对比,提升用户体验和沉浸度。

区域2:购买数大,行为数少,推测该区域商品是高频、网红产品,品牌不多用户选择少,或者是有头部品牌,又或者是品牌建立了一定的依赖度;此类区域的商品,用户决策相对会轻松,因此应着重快速让用户触达商品,如用户搜索酱油,则应优先展示用户购买过的品牌。

区域3:购买数相对小,行为数相对小,大部分商品大类都在这个区域,想让这些点往什么方向移动,还需具体类型具体分析。

区域4:购买数小,行为数多,推测该区域商品低频/贵重,用户决策谨慎,如电视机,由于行为数多,同样可以考虑建设专区,可对相关用户增加靠谱的推送信息,增加用户的粘性及辅助用户合理决策。

4.4.3 商品关联性分析

提取数据集中各商品大类/商品出现在同一个订单中的次数,次数越大,两种商品大类/商品的关联性越高;用户在购买/加入购物车/收藏一种商品时,可适当推荐展示关联性高的商品。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分析小结:
1)总订单数为:178673,商品种类大于1的订单数为12165,商品大类关联性TOP1只有417次,约占3.4%;商品大类的关联性强于单个商品之间的关联性,从上表头看到,关联度最高的商品大类组合是3087458-3158249,其中在TOP3中,都有商品大类3158249;
2)总体来说由购买行为计算的商品关联性不低,有一定的分类和推荐价值,按照关联性高的商品推荐,理论上可促成商品交易;后续可用同样的方法或其他复杂算法来研究pv/fav/cart等行为的商品关联性。

五.总结

5.1可用作业务监控/检验运营措施的指标

由于淘宝APP用户基数大,骤降理论上很少出现,对于这些指标,更多可以考虑如比例3天连续下降,哪怕幅度很小。

1)日均用户数、日均活跃用户数/比例、日均交易用户数/比例

2)活跃天数分布

3)各路径交易占比数/购买转化率

4)pv值/用户数/购买数时间分布

5)收藏-购买/加入购物车-购买行为时间分布

6)商品大类购买次数-购买决策行为数

7)商品大类关联性次数与订单数比例

5.2业务增长建议

5.2.1提升用户体验和粘性
1)考虑为购买量大、决策过程长、品牌繁多的商品建立专区,并适当增加科普推送,辅助用户决策,提升沉浸度。

2)对于决策过程很短的商品,应着重提升购买效率,如搜索结果有限显示/提示曾经买过的商品品牌或店铺、在购买过的订单中设置和突出搜索功能

5.2.2促进用户交易
1)基于用户购物行为,可以在收藏/加入购物车-购买完成90%的时间点上实施一定的优惠信息/提醒等运营措施,促进用户交易。

2)双12活动带来的用户增长,并没有维持到日常水平的购买转化率,建议调整或ABTEST用户需求/定向模型,提升购买转化率

3)对于关联性高的商品,优先向相关用户展示。

5.3后续的分析方向
由于数据集的局限性,案例分析更多在于发现用户、规律以及建立指标。后续的分析方向应把数据分解得更深入,考虑更多维度,长追踪时间,如:

1)利用上述指标监控业务,追踪运营措施效果,挖掘数据异常的原因;

2)多维度的排列组合分析,如不同购买路径的人群的购买决策特征,多维度构建人物画像等;

3)建立数据指标BI体系,高效地供内部各人员参考。

附录:代码及注释(计算部分)import pandas as pd
import numpy as np
import datetime
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import plotly.offline as py#三.数据清洗
#数据清洗-读取数据
row_data = pd.read_csv(r'D:\kaggle资料\天池-淘宝用户行为数据\UserBehavior.csv',names=['user_id','item_id','category_id','behaviour_type','timestamp'],iterator=True)
data1=row_data.get_chunk(10000000)#数据清洗-数据描述
print('UV:',data1['user_id'].nunique())
print('商品SKU:',data1['item_id'].nunique())
print('商品大类:',data1['category_id'].nunique())
print('---------')
print('数据类型:','\n',data1.dtypes)#数据清洗-查看缺失值
a = data1.isnull().sum()
if a.sum() == 0:print('数据集无缺失值')
else:print(a[a > 0])#数据清洗-异常值
#用户行为异常值
if data1['behaviour_type'].nunique() == 4:print('行为数据无缺失值')
else:print('数据行为存在缺失值,检查')#时间异常值
#将时间戳转化为北京时间、筛选要分析的时间范围
data1=data1.assign(time = pd.to_datetime(data1['timestamp'],unit='s')+datetime.timedelta(hours=8))
data1 = data1[(data1['time']>'2017-11-25') &(data1['time']<'2017-12-4')]
print('时间筛选过后的表结构:',data1.shape)#四.数据分析#4.1用户侧核心指标
#这部分主要用到日期,所以从time中提取date,这里使用map+匿名函数
data1 = data1.assign(date = data1['time'].map(lambda x:x.strftime('%Y-%m-%d')))#日均用户数
df_uvpd = data1[['user_id','date']].groupby('date').nunique()
df_uvpd = df_uvpd.drop(columns='date')
df_uvpd = df_uvpd.rename(columns={"user_id": "uv"})#日均活跃用户数
df_aupd = data1[['user_id','behaviour_type','date']].groupby(['date','user_id']).count()
df_aupd = df_aupd[df_aupd['behaviour_type']>2]
df_aupd = df_aupd.count(level = 0)
df_aupd.rename(columns={'behaviour_type':'active_user'},inplace =True)#计算日均交易用户数
df_bupd = data1[data1['behaviour_type'] == 'buy']
df_bupd = df_bupd[['user_id','behaviour_type','date']].groupby(['date','user_id']).count()
df_bupd = df_bupd.count(level = 0)
df_bupd.rename(columns={'behaviour_type':'buy_user'},inplace =True)#每日pv数:
df_pvpd = data1[['date','user_id']].groupby('date').count()
df_pvpd = df_pvpd.rename(columns = {'user_id':'pv'})#将上述各表连接后生成指标表格,用assign函数可以避免copywarning
df41 = df_pvpd.join(df_uvpd).join(df_aupd).join(df_bupd)
df41 = df41.assign(pv_per_user = df41['pv']/df41['uv'],active_user_rate = df41['active_user']/df41['uv'],buy_user_rate = df41['buy_user']/df41['uv'])#4.1.3用户活跃天数分布
df_user_active_days = data1[['user_id','behaviour_type','date']].groupby(['date','user_id']).count()
df_user_active_days = df_user_active_days[df_user_active_days['behaviour_type']>2]
df_user_active_days = df_user_active_days.count(level = 1)
df_user_active_days = df_user_active_days.rename(columns = {'behaviour_type':'days'})#4.2用户行为路径分析
#为区分各用户行为及其组合,为行为数据赋值:1,2,4,8,排列组合后为0-15
df1 = data1.drop_duplicates(['user_id','item_id','behaviour_type'])
df1 = df1.assign(type_num=df1['behaviour_type'].map({'pv':1,'fav':2,'cart':4,'buy':8}))#聚合求和,每一个路径都有不同的值
df1_gb = df1[['user_id','item_id','type_num']].groupby(['user_id','item_id']).sum()#划分各路径dataframe:buy
unpv_unfav_uncart_buy = df1_gb[df1_gb['type_num'] == 8]
pv_unfav_uncart_buy = df1_gb[df1_gb['type_num'] == 9]
unpv_fav_uncart_buy = df1_gb[df1_gb['type_num'] == 10]
pv_fav_uncart_buy = df1_gb[df1_gb['type_num'] == 11]
unpv_unfav_cart_buy = df1_gb[df1_gb['type_num'] == 12]
pv_unfav_cart_buy = df1_gb[df1_gb['type_num'] == 13]
unpv_fav_cart_buy = df1_gb[df1_gb['type_num'] == 14]
pv_fav_cart_buy = df1_gb[df1_gb['type_num'] == 15]print('unpv_unfav_uncart_buy:',unpv_unfav_uncart_buy.shape[0],'  ;pv_unfav_uncart_buy:',pv_unfav_uncart_buy.shape[0])
print('unpv_fav_uncart_buy:',unpv_fav_uncart_buy.shape[0],'  ;pv_fav_uncart_buy:',pv_fav_uncart_buy.shape[0])
print('unpv_unfav_cart_buy:',unpv_unfav_cart_buy.shape[0],'  ;pv_unfav_cart_buy:',pv_unfav_cart_buy.shape[0])
print('unpv_fav_cart_buy:',unpv_fav_cart_buy.shape[0],'  ;pv_fav_cart_buy:',pv_fav_cart_buy.shape[0])
print('--------------')#划分各路径dataframe:unbuy
unpv_unfav_uncart_unbuy = df1_gb[df1_gb['type_num'] == 0]
pv_unfav_uncart_unbuy = df1_gb[df1_gb['type_num'] == 1]
unpv_fav_uncart_unbuy = df1_gb[df1_gb['type_num'] == 2]
pv_fav_uncart_unbuy = df1_gb[df1_gb['type_num'] == 3]
unpv_unfav_cart_unbuy = df1_gb[df1_gb['type_num'] == 4]
pv_unfav_cart_unbuy = df1_gb[df1_gb['type_num'] == 5]
unpv_fav_cart_unbuy = df1_gb[df1_gb['type_num'] == 6]
pv_fav_cart_unbuy = df1_gb[df1_gb['type_num'] == 7]print('unpv_unfav_uncart_unbuy:',unpv_unfav_uncart_unbuy.shape[0],'  ;pv_unfav_uncart_unbuy:',pv_unfav_uncart_unbuy.shape[0])
print('unpv_fav_uncart_unbuy:',unpv_fav_uncart_unbuy.shape[0],'  ;pv_fav_uncart_unbuy:',pv_fav_uncart_unbuy.shape[0])
print('unpv_unfav_cart_unbuy:',unpv_unfav_cart_unbuy.shape[0],'  ;pv_unfav_cart_unbuy:',pv_unfav_cart_unbuy.shape[0])
print('unpv_fav_cart_unbuy:',unpv_fav_cart_unbuy.shape[0],'  ;pv_fav_cart_unbuy:',pv_fav_cart_unbuy.shape[0])#4.3用户行为时间分析
#4.3.1用户活跃时间分布,划分成24小时,求9天的总和
df43 = data1
df43['hour'] = df43['time'].dt.hour#pv数
df431_pv = df43[['hour','user_id']].groupby('hour').count()
df431_pv.rename(columns={'user_id':'访问数'},inplace =True)#uv数
df431_uv = df43[['hour','user_id']].groupby('hour').nunique()
df431_uv.rename(columns={'user_id':'用户数'},inplace =True)#购买数
df431_buy = df43[df43['behaviour_type'] == 'buy']
df431_buy = df431_buy[['hour','user_id']].groupby('hour').count()
df431_buy.rename(columns={'user_id':'购买数'},inplace =True)#4.3.2购买行为时间分布
#求fav/cart与buy行为的交集
data1_buy = data1[data1['behaviour_type'] == 'buy']
data1_fav = data1[data1['behaviour_type'] == 'fav']
data1_cart = data1[data1['behaviour_type'] == 'cart']  
df432_fav_buy = pd.merge(data1_buy,data1_fav,on = ['user_id','item_id'],how = 'inner')
df432_cart_buy = pd.merge(data1_buy,data1_cart,on = ['user_id','item_id'],how = 'inner')#fav-buy行为时间分布
df432_fav_buy = df432_fav_buy.assign(dtime = (df432_fav_buy['time_x'] - df432_fav_buy['time_y']))#这里datetime时间类型相减后是deltatime类型,转化为hour要自己计算,下面同理
df432_fav_buy['dtime'] = df432_fav_buy['dtime'].map(lambda x : x.days * 24 + x.seconds/3600)
df432_fav_buy = df432_fav_buy[df432_fav_buy['dtime'] > 0]#cart-buy行为时间分布
df432_cart_buy = df432_cart_buy.assign(dtime = (df432_cart_buy['time_x'] - df432_cart_buy['time_y']))
df432_cart_buy['dtime'] = df432_cart_buy['dtime'].map(lambda x : x.days * 24 + x.seconds/3600)
df432_cart_buy = df432_cart_buy[df432_cart_buy['dtime'] > 0]#4.4商品分类分析
#4.4.1 商品大类交易数
data1_buy = data1[data1['behaviour_type'] == 'buy']#聚合计数每商品大类的交易数
data1_buy_category = data1_buy[['category_id','behaviour_type']].groupby('category_id').count()
data1_buy_category = data1_buy_category.rename(columns = {'behaviour_type':'buy_count'})#排序
data1_buy_category = data1_buy_category.sort_values('buy_count',ascending=False)
data1_buy_category = data1_buy_category.reset_index()data1_buy_category.head()#4.4.2商品大类购买行为
#有购买行为的商品大类与原始数据连接,可得到以用户id及商品大类id为键的包含其他行为数据的dataframe,并聚合计数其行为数据
data1_behav_category = pd.merge(data1_buy[['user_id','category_id']],data1,on = ['user_id','category_id'],how = 'left')
data1_behav_category = data1_behav_category[['category_id','behaviour_type']].groupby('category_id').count()
data1_behav_category = data1_behav_category.rename(columns = {'behaviour_type':'behav_count'})
data1_behav_category = data1_behav_category.reset_index()#只分析最终有购买的用户行为,与上一步商品大类交易数占比中的dataframe连接,计算比值
df_cate_buy_behav = pd.merge(data1_buy_category,data1_behav_category,on = 'category_id',how='inner')
df_cate_buy_behav = df_cate_buy_behav.assign(behav_per_buy = df_cate_buy_behav['behav_count']/df_cate_buy_behav['buy_count'])#4.4.3 商品关联性分析
#计算总订单数
df_oneorder_buycount = data1_buy.groupby(['user_id','timestamp']).count()
print('总订单数:',df_oneorder_buycount.shape[0])#筛选出商品id多于一个的订单数
df_oneorder_buycount = df_oneorder_buycount[df_oneorder_buycount['item_id'] > 1]
df_oneorder_buycount = df_oneorder_buycount.reset_index()
df_oneorder_buycount = df_oneorder_buycount[['user_id','timestamp','item_id']]
df_oneorder_buycount = df_oneorder_buycount.rename(columns = {'item_id':'num_in_one_order'})
print('商品id多于一个的订单数:',df_oneorder_buycount.shape[0])
df_oneorder_buycount.head()#表连接补充表-'商品id多于一个的订单数'的数据内容
df_buy_multi = pd.merge(df_oneorder_buycount,data1_buy,on=['user_id','timestamp'],how='inner')
df_buy_multi.head()#计算商品大类相关性
#上表中同一订单中的不同category_id都显示出来了,通过自连接实现组合
rel_a = df_buy_multi
rel_b = df_buy_multi[['user_id','timestamp','category_id']]
rel = pd.merge(rel_a,rel_b,on=['user_id','timestamp'],how = 'left')
rel = rel[rel['category_id_x'] < rel['category_id_y']]#去除连接相同大类的数据#组合好并去重后,聚合就可以计数两两商品大类的出现次数,在这里简单认为次数越多,相关性越高
rel_count = rel[['category_id_x','category_id_y','user_id']].groupby(['category_id_x','category_id_y']).count()
rel_count = rel_count.rename(columns={'user_id':'出现次数'})
rel_count = rel_count.sort_values('出现次数',ascending = False)
rel_count = rel_count.reset_index()#计算商品相关性
#代码同上一项一样,将category_id换成item_id就可以了
rel_a = df_buy_multi
rel_b = df_buy_multi[['user_id','timestamp','item_id']]
rel = pd.merge(rel_a,rel_b,on=['user_id','timestamp'],how = 'left')
rel = rel[rel['item_id_x'] <= rel['item_id_y']]#去连接重复的rel_count = rel[['item_id_x','item_id_y','user_id']].groupby(['item_id_x','item_id_y']).count()
rel_count = rel_count.rename(columns={'user_id':'出现次数'})
rel_count = rel_count.sort_values('出现次数',ascending = False)
rel_count = rel_count.reset_index()
画图代码(部分)#画图-4.1.1日均用户指标fig = go.Figure()fig.add_trace(go.Scatter(x=df41.index, y=df41['uv'], name="日均用户",line_color ="#1f77b4")
)
fig.add_trace(go.Scatter(x=df41.index, y=df41['active_user'], name="日均活跃用户",line_color = "#ff7f0e")
)
fig.add_trace(go.Scatter(x=df41.index, y=df41['buy_user'], name="日均交易用户",line_color = "#d62728")
)fig.update_layout(title_text="日均用户指标",width=800)fig.update_xaxes(title_text="日期",dtick='d')fig.show()#画图-4.1.3用户活跃天数分布
fig = go.Figure()
fig.add_trace(go.Histogram(x=df_user_active_days['days'], histnorm='percent',name = '活跃天数分布图(9天内)',xbins=dict(size= 0.5),marker_color= 'rgb(49,130,189)')     )
fig.update_xaxes(dtick=1)fig.update_layout(height=450, width=800, title_text='活跃天数分布图(9天内)')
fig.show()#画图-4.3.1用户活跃时间分布
fig = make_subplots(specs=[[{"secondary_y": True}]])fig.add_trace(go.Bar(x=df431_pv.index,y=df431_pv['访问数'],name='日pv时间分布',marker_color = 'rgb(115,115,115)')
)
fig.add_trace(go.Scatter(x=df431_pv.index,y=df431_uv['用户数'],name = '日用户数时间分布', connectgaps=True,line_color = 'rgb(49,130,189)'),secondary_y = True
)
fig.add_trace(go.Scatter(x=df431_pv.index,y=df431_buy['购买数'] * 5,name = '日购买数时间分布', connectgaps=True,line_color = 'rgb(180,60,60)'),secondary_y = True
)
fig.update_layout(yaxis2=dict(tickfont=dict(color='rgb(49,130,189)'))
)
fig.update_layout(title_text="用户行为时间分布(日)")
fig.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/63769.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python爬虫+数据分析】采集电商平台数据信息,并做可视化演示

文章目录 前言一、准备工作二、分析目标网站1.商品信息 三、编写爬虫程序五、总结 前言 随着电商平台的兴起&#xff0c;越来越多的人开始在网上购物。而对于电商平台来说&#xff0c;商品信息、价格、评论等数据是非常重要的。因此&#xff0c;抓取电商平台的商品信息、价格、…

利用Python进行词频统计并生成词云——以京东商城iphone13购物评论为例

本文介绍一种快速生成关键词-词频统计-词云生成的办法&#xff0c;作为Python数据分析初级技能&#xff0c;除基本运行环境外无需其他软件或工具&#xff0c;且流程搭建成功后可重复利用&#xff0c;可极大提升相似事务的处理效率。 一、操作环境 1.1 搭建Python运行环境&#…

Python爬虫+可视化分析技术实现招聘网站岗位数据抓取与分析推荐系统

程序主要采用Python 爬虫flask框架htmljavascript实现岗位推荐分析可视化系统&#xff0c;实现工作岗位的实时发现&#xff0c;推荐检索&#xff0c;快速更新以及工作类型的区域分布效果&#xff0c;关键词占比分析等。 程序模块实现 工作范围分布 岗位区域分布 岗位技术情况…

API接口调用,获取淘宝天猫,拼多多,1688等平台商品详情,python采集爬虫数据

Python技术 爬虫&#xff08;又称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在 FOAF 社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff1b;它是一种按照一定的规则&#xff0c;自动地抓取网络信息的程序或者脚本。 如果我们把互联网比作一张大的蜘蛛网&a…

使用python爬取BOSS直聘岗位数据并做可视化(Boss直聘对网页做了一些修改,现在的代码已经不能用了)

使用python爬取BOSS直聘岗位数据并做可视化 结果展示首页岗位信息岗位详情薪资表学历需求公司排名岗位关键词福利关键词 代码展示爬虫代码一、导入库二、爬取数据1、爬取数据代码展示2、通过selenium打开浏览器&#xff08;1&#xff09;打开网页&#xff08;2&#xff09;找到…

用Python对淘宝用户行为数据的分析

目录 项目前言 一、分析目的 二、数据获取与理解 1.数据来源 2.理解数据 三、具体做法 1.导入并清洗数据 3.1.1.把时间戳改为datetime类型 3.1.2.查看是否存在重复的行数据 3.1.3.查看列中是否存在缺失数据 2.用户维度 3.2.1.一个月内每天pv、uv的变化 ​3.2.2.日A…

小白也可以开发闲鱼自动化工具(自动找爆款)

在闲鱼上&#xff0c;我们的课程里面教给大家&#xff0c;如何找爆款&#xff0c;主要是看数据&#xff0c;分析&#xff0c;那么这个分析过程&#xff0c;能否自动化下&#xff1f; 事实是可以的。这个是这几天写的一个&#xff0c;自动化分析电脑这个词下面的一些爆款&#x…

基于Python+网络爬虫的兼职招聘就业信息数据可视化分析

&#x1f525;作者&#xff1a;雨晨源码&#x1f525; &#x1f496;简介&#xff1a;java、微信小程序、安卓&#xff1b;定制开发&#xff0c;远程调试 代码讲解&#xff0c;文档指导&#xff0c;ppt制作&#x1f496; 精彩专栏推荐订阅&#xff1a;在下方专栏&#x1f447;&…

Python抓取电商平台数据 / 采集商品评论 / 可视化展示 词云图...

前言 大家早好、午好、晚好吖 ❤ ~ 我给大家准备了一些资料&#xff0c;包括: 2022最新Python视频教程、Python电子书10个G &#xff08;涵盖基础、爬虫、数据分析、web开发、机器学习、人工智能、面试题&#xff09;、Python学习路线图等等 直接在文末名片自取即可&#x…

chatgpt赋能python:Python简单数据采集教程:提高SEO排名的必要工具

Python简单数据采集教程&#xff1a;提高SEO排名的必要工具 在当前数字化时代下&#xff0c;数据已经成为商业流量和营销策略中至关重要的交易资源。因此&#xff0c;数据采集成为了提高SEO排名的必要手段之一。现在&#xff0c;Python由于其强大的数据处理能力被广泛应用于数…

利用 Python 爬虫采集 1688商品详情关键词数据-API

要利用 Python 爬虫采集 1688 商品详情数据&#xff0c;需要先了解 1688 网站的页面结构和数据请求方式。一般使用 requests 库请求网站的数据&#xff0c;使用 BeautifulSoup 库解析网页中的数据。 以下是一个简单的 Python 爬虫采集 1688 商品详情数据的示例代码&#xff1a…

英特尔淘汰迷你电脑,宣布放弃 NUC 业务!

整理 | 屠敏 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 相比造芯这件事&#xff0c;也许有很多人不知道全球知名半导体公司英特尔还在造电脑。 只是有些遗憾的是&#xff0c;据外媒 ServetheHome 报道&#xff0c;英特尔已经开始通知其生态系统的合作伙伴们&…

Web版和客户端哪种SQL工具更好?ChatGPT有话要说

2023年年初公司发布了一款Web版SQL工具&#xff0c;短期内就赢得了众多用户的喜爱和下载。不过&#xff0c;也有SQL用户在评论区中提出自己的观点&#xff0c;认为Web版工具都不可靠&#xff0c;甚至看见Web版工具就劝返… … 工具Web化逐渐成为一种趋势&#xff0c;比如&…

自动批量日文翻译工具,免费日文等小语种翻译互译工具

日文翻译工具具有日文、俄语、韩语、德语等多国小语种翻译&#xff0c;支持日文整篇文章翻译成中文等多种语种&#xff0c;长篇文章翻译后保留原文格式段落&#xff0c;并通过批量内容编辑处理&#xff0c;实现翻译后的文章敏感词删除、插图图片和同义词替换实现本地化翻译。 日…

谁说首富不懂技术!马斯克晒出Twitter2.0架构图

推荐阅读&#xff1a; 《重磅&#xff1a;Spring Boot 3.0 发布&#xff01;》 《职场霸凌、潜规则&#xff0c;已经这么猖獗了吗。。》 出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013) 近日&#xff0c;马斯克前往 Twitter 总部大楼和工程师团队进行了 code revie…

马斯克在中国的44小时!行程、会面与表态,释放出什么信号?

时隔3年&#xff0c;“自带流量”的美国特斯拉首席执行官马斯克再次到访中国&#xff0c;从公布的信息来看&#xff0c;可谓是行程满满。在中美关系似乎春寒料峭之际&#xff0c;马斯克的来华及表态极具象征意义。 马斯克&#xff1a;反对“脱钩断链” 5月30日下午15时30分左右…

TikTok广告投放指南(基础入门)

TikTok 在全球拥有超过5亿活跃用户&#xff0c;目前还属于一个红利期阶段&#xff0c;在 TikTok 号称开放广告投放后&#xff0c;发现先机的各方卖家纷纷涌入&#xff0c;俨然让它成为炙手可热的广告投放池。 TikTok拥有大量低价流量&#xff0c;人气赶超老牌社媒&#xff0c;再…

腾讯广点通广告投放-Web转化数据API自归因文档对接

关于自建H5落地页投放广告的流程总结 文档地址 Web转化数据API自归因文档 流程 转化归因配置 配置页面地址&#xff1a;https://ad.qq.com/atlas/22172840/tool/conversionspec选择网页转化新建网页转化API自归因上报 PS&#xff1a;关于点击监测链接的说明&#xff1a; …

TikTok运营指南:如何通过TikTok广告实现社媒引流?

短视频平台TikTok在海外可以说是越来越火了&#xff0c;很多做跨境电商的开始涌向TikTok这个平台去营销推广&#xff0c;所以如果你每天日思夜想怎样推出一个新产品&#xff0c;怎样以低成本引流客源和提供销售量&#xff0c;都可以利用 TikTok广告来实现社媒引流&#xff0c;目…

为什么选择TikTok广告?TikTok广告投放如何操作?TikTok广告教程

为什么选择TikTok广告&#xff1f; TikTok是发展最快的社交媒体平台&#xff0c;迄今为止下载量已超过20亿。尤其是在这个大流行的世界中&#xff0c;TikTok可以让人们通过创建自己的内容来寻找新颖有趣的方式彼此联系&#xff0c;从而获得新鲜的空气。 尽管TikTok并未发布受众…