2024年最全实战案例!Python+SQL京东用户行为分析(1)

output

图片


# 每日访客数可视化  
 fig, ax = plt.subplots(figsize=[16,6])  
 sns.pointplot(uv\_daily.index, uv\_daily.values, markers=‘H’, linestyles=‘–’,color=‘m’)  
 x=list(range(0,16))  
 for a,b in zip(x,uv\_daily.values):  
     plt.text(a+0.1, b + 500 , ‘%i’ % b, ha=‘center’, va= ‘bottom’,fontsize=14)  
 plt.title(‘每日访客数’)



output

图片

浏览量和访客数每日变化趋势大致相同,2018-04-04日前后用户数量变化波动较大,4月4日为清明节假日前一天,各数据量在当天均有明显下降,但之后逐步回升,推测应为节假日营销活动或推广拉新活动带来的影响。


#每时浏览量  
 pv\_hourly = behavior[behavior[‘type’] == ‘pv’].groupby(‘hour’)[‘user\_id’].count()  
 #每时访客数  
 uv\_hourly = behavior.groupby(‘hour’)[‘user\_id’].nunique()




# SQL  
 # 每时浏览量  
 SELECT date, COUNT(type) pv\_daily FROM behavior\_sql  
 WHERE type = ‘pv’  
 GROUP BY hour;  
 # 每时访客数  
 SELECT date, COUNT(DISTINCT user\_id) uv\_daily FROM behavior\_sql  
 GROUP BY hour;  
 # 浏览量随小时变化可视化  
 fig, ax = plt.subplots(figsize=[16,6])  
 sns.pointplot(pv\_hourly.index, pv\_hourly.values, markers=‘H’, linestyles=‘–’,color=‘dodgerblue’)  
 for a,b in zip(pv\_hourly.index,pv\_hourly.values):  
     plt.text(a, b + 10000 , ‘%i’ % b, ha=‘center’, va= ‘bottom’,fontsize=12)  
 plt.title(‘浏览量随小时变化’)



output

图片


# 访客数随小时变化可视化  
 fig, ax = plt.subplots(figsize=[16,6])  
 sns.pointplot(uv\_hourly.index, uv\_hourly.values, markers=‘H’, linestyles=‘–’,color=‘m’)


for a,b in zip(uv\_hourly.index,uv\_hourly.values):  
     plt.text(a, b + 1000 , ‘%i’ % b, ha=‘center’, va= ‘bottom’,fontsize=12)  
 plt.title(‘访客数随小时变化’)



output

图片

浏览量及访客数随小时变化趋势一致,在凌晨1点到凌晨5点之间,大部分用户正在休息,整体活跃度较低。凌晨5点到10点用户开始起床工作,活跃度逐渐增加,之后趋于平稳,下午6点之后大部分人恢复空闲,浏览量及访客数迎来了第二波攀升,在晚上8点中到达高峰,随后逐渐下降。可以考虑在上午9点及晚上8点增大商品推广力度,加大营销活动投入,可取的较好的收益,1点到5点之间适合做系统维护。


# 用户各操作随小时变化  
 type\_detail\_hour = pd.pivot\_table(columns = ‘type’,index = ‘hour’, data = behavior,aggfunc=np.size,values = ‘user\_id’)  
 # 用户各操作随星期变化  
 type\_detail\_weekday = pd.pivot\_table(columns = ‘type’,index = ‘weekday’, data = behavior,aggfunc=np.size,values = ‘user\_id’)  
 type\_detail\_weekday = type\_detail\_weekday.reindex([‘Monday’,‘Tuesday’,‘Wednesday’,‘Thursday’,‘Friday’,‘Saturday’,‘Sunday’])




# SQL  
 # 用户各操作随小时变化  
 SELECT hour,  
 SUM(CASE WHEN behavior=‘pv’ THEN 1 ELSE 0 END)AS ‘pv’,  
 SUM(CASE WHEN behavior=‘fav’ THEN 1 ELSE 0 END)AS ‘fav’,  
 SUM(CASE WHEN behavior=‘cart’ THEN 1 ELSE 0 END)AS ‘cart’,  
 SUM(CASE WHEN behavior=‘pay’ THEN 1 ELSE 0 END)AS ‘pay’  
 FROM behavior\_sql  
 GROUP BY hour  
 ORDER BY hour


# 用户各操作随星期变化  
 SELECT weekday,  
 SUM(CASE WHEN behavior=‘pv’ THEN 1 ELSE 0 END)AS ‘pv’,  
 SUM(CASE WHEN behavior=‘fav’ THEN 1 ELSE 0 END)AS ‘fav’,  
 SUM(CASE WHEN behavior=‘cart’ THEN 1 ELSE 0 END)AS ‘cart’,  
 SUM(CASE WHEN behavior=‘pay’ THEN 1 ELSE 0 END)AS ‘pay’  
 FROM behavior\_sql  
 GROUP BY weekday  
 ORDER BY weekday




tdh\_line = type\_detail\_hour.stack().reset\_index().rename(columns={0: ‘Value’})  
 tdw\_line = type\_detail\_weekday.stack().reset\_index().rename(columns={0: ‘Value’})  
 tdh\_line= tdh\_line[~(tdh\_line[‘type’] == ‘pv’)]  
 tdw\_line= tdw\_line[~(tdw\_line[‘type’] == ‘pv’)]




# 用户操作随小时变化可视化  
 fig, ax = plt.subplots(figsize=[16,6])  
 sns.pointplot(x=‘hour’, y=‘Value’, hue=‘type’, data=tdh\_line, linestyles=‘–’)  
 plt.title(‘用户操作随小时变化’)



output

图片

用户操作随小时变化规律与PV、UV随小时规律相似,与用户作息规律相关,加入购物车和付款两条曲线贴合比比较紧密,说明大部分用户习惯加入购物车后直接购买。

关注数相对较少,可以根据用户购物车内商品进行精准推送。评论数也相对较少,说明大部分用户不是很热衷对购物体验进行反馈,可以设置一些奖励制度提高用户评论数,增大用用户粘性。


# 用户操作随星期变化可视化  
 fig, ax = plt.subplots(figsize=[16,6])  
 sns.pointplot(x=‘weekday’, y=‘Value’, hue=‘type’, data=tdw\_line[~(tdw\_line[‘type’] == ‘pv’)], linestyles=‘–’)  
 plt.title(‘用户操作随星期变化’)



output

图片

周一到周四工作日期间,用户操作随星期变化比较平稳,周五至周六进入休息日,用户操作明显增多,周日又恢复正常。

4、用户行为转化漏斗


# 导入相关包  
 from pyecharts import options as opts  
 from pyecharts.charts import Funnel  
 import math




behavior[‘action\_time’] = pd.to\_datetime(behavior[‘action\_time’],format =‘%Y-%m-%d %H:%M:%S’)




# 用户整体行为分布  
 type\_dis = behavior[‘type’].value\_counts().reset\_index()  
 type\_dis[‘rate’] = round((type\_dis[‘type’] / type\_dis[‘type’].sum()),3)  
 type\_dis.style.bar(color=‘skyblue’,subset=[‘rate’])



output

图片

用户整体行为中,有82.6%行为为浏览,实际支付操作仅占6.4,除此之外,用户评论及收藏的行为占比也较低,应当增强网站有用户之间的互动,提高评论数量和收藏率。


df\_con = behavior[[‘user\_id’, ‘sku\_id’, ‘action\_time’, ‘type’]]  
 df\_pv = df\_con[df\_con[‘type’] == ‘pv’]  
 df\_fav = df\_con[df\_con[‘type’] == ‘fav’]  
 df\_cart = df\_con[df\_con[‘type’] == ‘cart’]  
 df\_pay = df\_con[df\_con[‘type’] == ‘pay’]


df\_pv\_uid = df\_con[df\_con[‘type’] == ‘pv’][‘user\_id’].unique()  
 df\_fav\_uid = df\_con[df\_con[‘type’] == ‘fav’][‘user\_id’].unique()  
 df\_cart\_uid = df\_con[df\_con[‘type’] == ‘cart’][‘user\_id’].unique()  
 df\_pay\_uid = df\_con[df\_con[‘type’] == ‘pay’][‘user\_id’].unique()



pv - buy


fav\_cart\_list = set(df\_fav\_uid) | set(df\_cart\_uid)  
 pv\_pay\_df = pd.merge(left=df\_pv, right=df\_pay, how=‘inner’, on=[‘user\_id’, ‘sku\_id’], suffixes=(‘\_pv’, ‘\_pay’))  
 pv\_pay\_df = pv\_pay\_df[(~pv\_pay\_df[‘user\_id’].isin(fav\_cart\_list)) & (pv\_pay\_df[‘action\_time\_pv’] < pv\_pay\_df[‘action\_time\_pay’])]  
 uv = behavior[‘user\_id’].nunique()  
 pv\_pay\_num = pv\_pay\_df[‘user\_id’].nunique()  
 pv\_pay\_data = pd.DataFrame({‘type’:[‘浏览’,‘付款’],‘num’:[uv,pv\_pay\_num]})  
 pv\_pay\_data[‘conversion\_rates’] = (round((pv\_pay\_data[‘num’] / pv\_pay\_data[‘num’][0]),4) \* 100)  
 attr1 = list(pv\_pay\_data.type)  
 values1 = list(pv\_pay\_data.conversion\_rates)  
 data1 = [[attr1[i], values1[i]] for i in range(len(attr1))]  
 # 用户行为转化漏斗可视化  
 pv\_pay=(Funnel(opts.InitOpts(width=“600px”, height=“300px”))  
             .add(  
             series\_name=“”,  
             data\_pair=data1,  
             gap=2,  
             tooltip\_opts=opts.TooltipOpts(trigger=“item”, formatter=“{b} : {c}%”),  
             label\_opts=opts.LabelOpts(is\_show=True, position=“inside”),  
             itemstyle\_opts=opts.ItemStyleOpts(border\_color=“#fff”, border\_width=1)  
         )  
         .set\_global\_opts(title\_opts=opts.TitleOpts(title=“用户行为转化漏斗图”))  
         )  
 pv\_pay.render\_notebook()



output

图片


pv - cart - pay  
 pv\_cart\_df = pd.merge(left=df\_pv, right=df\_cart, how=‘inner’, on=[‘user\_id’, ‘sku\_id’], suffixes=(‘\_pv’, ‘\_cart’))  
 pv\_cart\_df = pv\_cart\_df[pv\_cart\_df[‘action\_time\_pv’] < pv\_cart\_df[‘action\_time\_cart’]]  
 pv\_cart\_df = pv\_cart\_df[~pv\_cart\_df[‘user\_id’].isin(df\_fav\_uid)]  
 pv\_cart\_pay\_df = pd.merge(left=pv\_cart\_df, right=df\_pay, how=‘inner’, on=[‘user\_id’, ‘sku\_id’])  
 pv\_cart\_pay\_df = pv\_cart\_pay\_df[pv\_cart\_pay\_df[‘action\_time\_cart’] < pv\_cart\_pay\_df[‘action\_time’]]  
 uv = behavior[‘user\_id’].nunique()  
 pv\_cart\_num = pv\_cart\_df[‘user\_id’].nunique()  
 pv\_cart\_pay\_num = pv\_cart\_pay\_df[‘user\_id’].nunique()  
 pv\_cart\_pay\_data = pd.DataFrame({‘type’:[‘浏览’,‘加购’,‘付款’],‘num’:[uv,pv\_cart\_num,pv\_cart\_pay\_num]})  
 pv\_cart\_pay\_data[‘conversion\_rates’] = (round((pv\_cart\_pay\_data[‘num’] / pv\_cart\_pay\_data[‘num’][0]),4) \* 100)  
 attr2 = list(pv\_cart\_pay\_data.type)  
 values2 = list(pv\_cart\_pay\_data.conversion\_rates)  
 data2 = [[attr2[i], values2[i]] for i in range(len(attr2))]  
 # 用户行为转化漏斗可视化  
 pv\_cart\_buy=(Funnel(opts.InitOpts(width=“600px”, height=“300px”))  
             .add(  
             series\_name=“”,  
             data\_pair=data2,  
             gap=2,  
             tooltip\_opts=opts.TooltipOpts(trigger=“item”, formatter=“{b} : {c}%”),  
             label\_opts=opts.LabelOpts(is\_show=True, position=“inside”),  
             itemstyle\_opts=opts.ItemStyleOpts(border\_color=“#fff”, border\_width=1)  
         )  
         .set\_global\_opts(title\_opts=opts.TitleOpts(title=“用户行为转化漏斗图”))  
         )  
 pv\_cart\_buy.render\_notebook()



output

图片

pv - fav - pay


pv\_fav\_df = pd.merge(left=df\_pv, right=df\_fav, how=‘inner’, on=[‘user\_id’, ‘sku\_id’], suffixes=(‘\_pv’, ‘\_fav’))  
 pv\_fav\_df = pv\_fav\_df[pv\_fav\_df[‘action\_time\_pv’] < pv\_fav\_df[‘action\_time\_fav’]]  
 pv\_fav\_df = pv\_fav\_df[~pv\_fav\_df[‘user\_id’].isin(df\_cart\_uid)]  
 pv\_fav\_pay\_df = pd.merge(left=pv\_fav\_df, right=df\_pay, how=‘inner’, on=[‘user\_id’, ‘sku\_id’])  
 pv\_fav\_pay\_df = pv\_fav\_pay\_df[pv\_fav\_pay\_df[‘action\_time\_fav’] < pv\_fav\_pay\_df[‘action\_time’]]  
 uv = behavior[‘user\_id’].nunique()  
 pv\_fav\_num = pv\_fav\_df[‘user\_id’].nunique()  
 pv\_fav\_pay\_num = pv\_fav\_pay\_df[‘user\_id’].nunique()  
 pv\_fav\_pay\_data = pd.DataFrame({‘type’:[‘浏览’,‘收藏’,‘付款’],‘num’:[uv,pv\_fav\_num,pv\_fav\_pay\_num]})  
 pv\_fav\_pay\_data[‘conversion\_rates’] = (round((pv\_fav\_pay\_data[‘num’] / pv\_fav\_pay\_data[‘num’][0]),4) \* 100)  
 attr3 = list(pv\_fav\_pay\_data.type)  
 values3 = list(pv\_fav\_pay\_data.conversion\_rates)  
 data3 = [[attr3[i], values3[i]] for i in range(len(attr3))]  
 # 用户行为转化漏斗可视化  
 pv\_fav\_buy=(Funnel(opts.InitOpts(width=“600px”, height=“300px”))  
             .add(  
             series\_name=“”,  
             data\_pair=data3,  
             gap=2,  
             tooltip\_opts=opts.TooltipOpts(trigger=“item”, formatter=“{b} : {c}%”),  
             label\_opts=opts.LabelOpts(is\_show=True, position=“inside”),  
             itemstyle\_opts=opts.ItemStyleOpts(border\_color=“#fff”, border\_width=1)  
         )  
         .set\_global\_opts(title\_opts=opts.TitleOpts(title=“用户行为转化漏斗图”))  
         )  
 pv\_fav\_buy.render\_notebook()



output

图片

pv - fav - cart - pay


pv\_fav = pd.merge(left=df\_pv, right=df\_fav, how=‘inner’, on=[‘user\_id’, ‘sku\_id’],suffixes=(‘\_pv’, ‘\_fav’))  
 pv\_fav = pv\_fav[pv\_fav[‘action\_time\_pv’] < pv\_fav[‘action\_time\_fav’]]  
 pv\_fav\_cart = pd.merge(left=pv\_fav, right=df\_cart, how=‘inner’, on=[‘user\_id’, ‘sku\_id’])  
 pv\_fav\_cart = pv\_fav\_cart[pv\_fav\_cart[‘action\_time\_fav’]<pv\_fav\_cart[‘action\_time’]]  
 pv\_fav\_cart\_pay = pd.merge(left=pv\_fav\_cart, right=df\_pay, how=‘inner’, on=[‘user\_id’, ‘sku\_id’],suffixes=(‘\_cart’, ‘\_pay’))  
 pv\_fav\_cart\_pay = pv\_fav\_cart\_pay[pv\_fav\_cart\_pay[‘action\_time\_cart’]<pv\_fav\_cart\_pay[‘action\_time\_pay’]]  
 uv = behavior[‘user\_id’].nunique()  
 pv\_fav\_n = pv\_fav[‘user\_id’].nunique()  
 pv\_fav\_cart\_n = pv\_fav\_cart[‘user\_id’].nunique()  
 pv\_fav\_cart\_pay\_n = pv\_fav\_cart\_pay[‘user\_id’].nunique()  
 pv\_fav\_cart\_pay\_data = pd.DataFrame({‘type’:[‘浏览’,‘收藏’,‘加购’,‘付款’],‘num’:[uv,pv\_fav\_n,pv\_fav\_cart\_n,pv\_fav\_cart\_pay\_n]})  
 pv\_fav\_cart\_pay\_data[‘conversion\_rates’] = (round((pv\_fav\_cart\_pay\_data[‘num’] / pv\_fav\_cart\_pay\_data[‘num’][0]),4) \* 100)  
 attr4 = list(pv\_fav\_cart\_pay\_data.type)  
 values4 = list(pv\_fav\_cart\_pay\_data.conversion\_rates)  
 data4 = [[attr4[i], values4[i]] for i in range(len(attr4))]  
 # 用户行为转化漏斗可视化  
 pv\_fav\_buy=(Funnel(opts.InitOpts(width=“600px”, height=“300px”))  
             .add(  
             series\_name=“”,  
             data\_pair=data4,  
             gap=2,  
             tooltip\_opts=opts.TooltipOpts(trigger=“item”, formatter=“{b} : {c}%”),  
             label\_opts=opts.LabelOpts(is\_show=True, position=“inside”),  
             itemstyle\_opts=opts.ItemStyleOpts(border\_color=“#fff”, border\_width=1)  
         )  
         .set\_global\_opts(title\_opts=opts.TitleOpts(title=“用户行为转化漏斗图”))  
         )  
 pv\_fav\_buy.render\_notebook()



output

图片

不同路径用户消费时间间隔分析:

pv - cart - pay


pcp\_interval = pv\_cart\_pay\_df.groupby([‘user\_id’, ‘sku\_id’]).apply(lambda x: (x.action\_time.min() - x.action\_time\_cart.min())).reset\_index()  
 pcp\_interval[‘interval’] = pcp\_interval[0].apply(lambda x: x.seconds) / 3600  
 pcp\_interval[‘interval’] = pcp\_interval[‘interval’].apply(lambda x: math.ceil(x))  
 fig, ax = plt.subplots(figsize=[16,6])  
 sns.countplot(pcp\_interval[‘interval’],palette=‘Set1’)  
 for p in ax.patches:  
         ax.annotate(‘{:.2f}%’.format(100\*p.get\_height()/len(pcp\_interval[‘interval’])), (p.get\_x() + 0.1, p.get\_height() + 100))  
 ax.set\_yscale(“log”)  
 plt.title(‘pv-cart-pay路径用户消费时间间隔’)



output

图片

pv - fav - pay


pfp\_interval = pv\_fav\_pay\_df.groupby([‘user\_id’, ‘sku\_id’]).apply(lambda x: (x.action\_time.min() - x.action\_time\_fav.min())).reset\_index()  
 pfp\_interval[‘interval’] = pfp\_interval[0].apply(lambda x: x.seconds) / 3600  
 pfp\_interval[‘interval’] = pfp\_interval[‘interval’].apply(lambda x: math.ceil(x))  
 fig, ax = plt.subplots(figsize=[16,6])  
 sns.countplot(pfp\_interval[‘interval’],palette=‘Set1’)  
 for p in ax.patches:  
         ax.annotate(‘{:.2f}%’.format(100\*p.get\_height()/len(pfp\_interval[‘interval’])), (p.get\_x() + 0.1, p.get\_height() + 10))  
 ax.set\_yscale(“log”)  
 plt.title(‘pv-fav-pay路径用户消费时间间隔’)



output

图片

两种路径下大部分用户均在4小时内完成了支付,大部分用户的购物意向很明确,也侧面说明了网站的商品分类布局和购物结算方式比较合理。


# SQL  
 # 漏斗图  
 SELECT type, COUNT(DISTINCT user\_id) user\_num  
 FROM behavior\_sql  
 GROUP BY type  
 ORDER BY COUNT(DISTINCT user\_id) DESC


SELECT COUNT(DISTINCT b.user\_id) AS pv\_fav\_num,COUNT(DISTINCT c.user\_id) AS pv\_fav\_pay\_num  
 FROM  
 ((SELECT DISTINCT user\_id, sku\_id, action\_time FROM users WHERE type=‘pv’ ) AS a  
 LEFT JOIN  
 (SELECT DISTINCT user\_id, sku\_id, action\_time FROM users WHERE type=‘fav’  
 AND user\_id NOT IN  
 (SELECT DISTINCT user\_id  
 FROM behavior\_sql  
 WHERE type = ‘cart’)) AS b  
 ON a.user\_id = b.user\_id AND a.sku\_id = b.sku\_id AND a.action\_time <= b.action\_time  
 LEFT JOIN  
 (SELECT DISTINCT user\_id,sku\_id,item\_category,times\_new FROM users WHERE behavior\_type=‘pay’) AS c  
 ON b.user\_id = c.user\_id AND b.sku\_id = c.sku\_id AND AND b.action\_time <= c.action\_time);



比较四种不同的转化方式,最有效的转化路径为浏览直接付款转化率为21.46%,其次为浏览加购付款,转化率为12.47%,可以发现随着结算方式越来越复杂转化率越来越低。

加购的方式比收藏购买的方式转化率要高,推其原因为购物车接口进入方便且可以做不同商家比价用,而收藏则需要更繁琐的操作才可以查看到商品,因此转化率较低。

可以优化商品搜索功能,提高商品搜索准确度、易用性,减少用户搜索时间。

根据用户喜好在首页进行商品推荐,优化重排商品详情展示页,提高顾客下单欲望,提供一键购物等简化购物步骤的功能。

客服也可以留意加购及关注用户,适时推出优惠福利及时解答用户问题,引导用户购买以进一步提高转化率。

对于用户消费时间间隔,可以通过限时领券购买、限时特惠价格等进一步缩短用户付款时间,提高订单量。

5、用户留存率分析


#留存率  
 first\_day = datetime.date(datetime.strptime(‘2018-03-30’, ‘%Y-%m-%d’))  
 fifth\_day = datetime.date(datetime.strptime(‘2018-04-03’, ‘%Y-%m-%d’))  
 tenth\_day = datetime.date(datetime.strptime(‘2018-04-08’, ‘%Y-%m-%d’))  
 fifteenth\_day = datetime.date(datetime.strptime(‘2018-04-13’, ‘%Y-%m-%d’))


#第一天新用户数  
 user\_num\_first = behavior[behavior[‘date’] == first\_day][‘user\_id’].to\_frame()  
 #第五天留存用户数  
 user\_num\_fifth = behavior[behavior[‘date’] == fifth\_day ][‘user\_id’].to\_frame()  
 #第十留存用户数  
 user\_num\_tenth = behavior[behavior[‘date’] == tenth\_day][‘user\_id’].to\_frame()  
 #第十五天留存用户数  
 user\_num\_fifteenth = behavior[behavior[‘date’] == fifteenth\_day][‘user\_id’].to\_frame()  
 #第五天留存率  
 fifth\_day\_retention\_rate = round((pd.merge(user\_num\_first, user\_num\_fifth).nunique())  
                                  / (user\_num\_first.nunique()),4).user\_id  
 #第十天留存率  
 tenth\_day\_retention\_rate = round((pd.merge(user\_num\_first, user\_num\_tenth ).nunique())  
                                  / (user\_num\_first.nunique()),4).user\_id  
 #第十五天留存率  
 fifteenth\_day\_retention\_rate = round((pd.merge(user\_num\_first, user\_num\_fifteenth).nunique())  
                                      / (user\_num\_first.nunique()),4).user\_id  
 # 留存率可视化


fig, ax = plt.subplots(figsize=[16,6])  
 sns.barplot(x=‘n日后留存率’, y=‘Rate’, data=retention\_rate,  
              palette=‘Set1’)  
 x=list(range(0,3))  
 for a,b in zip(x,retention\_rate[‘Rate’]):  
     plt.text(a, b + 0.001, ‘%.2f%%’ % (b\*100), ha=‘center’, va= ‘bottom’,fontsize=12)  
 plt.title(‘用户留存率’)



output

图片

留存率反应了产品质量和保留用户的能力,按照Facebook平台流传出留存率“40–20–10”规则(规则中的数字表示的是次日留存率、第7日留存率和第30日留存率),统计周期内第五日留存率为22.81%,第15日留存率为17.44%。

反映出平台的用户依赖性较高,也因平台发展已经到达稳定阶段,用户保留率不会发生较大波动,数据量足够的情况下可以以年为单位,计算按月的留存率。要合理安排消息推送,推出签到有奖等机制提高用户粘性,进一步提高留存率。


# SQL  
 #n日后留存率=(注册后的n日后还登录的用户数)/第一天新增总用户数  
 create table retention\_rate as select count(distinct user\_id) as user\_num\_first from behavior\_sql  
 where date = ‘2018-03-30’;  
 alter table retention\_rate add column user\_num\_fifth INTEGER;  
 update retention\_rate set user\_num\_fifth=  
 (select count(distinct user\_id) from behavior\_sql  
 where date = ‘2018-04-03’ and user\_id in (SELECT user\_id FROM behavior\_sql  
 WHERE date = ‘2018-03-30’));  
 alter table retention\_rate add column user\_num\_tenth INTEGER;  
 update retention\_rate set user\_num\_tenth=  
 (select count(distinct user\_id) from behavior\_sql  
 where date = ‘2018-04-08’ and user\_id in (SELECT user\_id FROM behavior\_sql  
 WHERE date = ‘2018-03-30’));  
 alter table retention\_rate add column user\_num\_fifteenth INTEGER;  
 update retention\_rate set user\_num\_fifteenth=  
 (select count(distinct user\_id) from behavior\_sql  
 where date = ‘2018-04-13’ and user\_id in (SELECT user\_id FROM behavior\_sql  
 WHERE date = ‘2018-03-30’));


SELECT CONCAT(ROUND(100*user\_num\_fifth/user\_num\_first,2),‘%’)AS fifth\_day\_retention\_rate,  
 CONCAT(ROUND(100*user\_num\_tenth/user\_num\_first,2),‘%’)AS tenth\_day\_retention\_rate,  
 CONCAT(ROUND(100\*user\_num\_fifteenth/user\_num\_first,2),‘%’)AS fifteenth\_day\_retention\_rate  
 from retention\_rate;



6、商品销量分析


# 商品总数  
 behavior[‘sku\_id’].nunique()



output


239007




# 商品被购前产生平均操作次数  
 sku\_df = behavior[behavior[‘sku\_id’].isin(behavior[behavior[‘type’] == ‘pay’][‘sku\_id’].unique())].groupby(‘sku\_id’)[‘type’].value\_counts().unstack(fill\_value=0)  
 sku\_df[‘total’] = sku\_df.sum(axis=1)  
 sku\_df[‘avg\_beha’] = round((sku\_df[‘total’] / sku\_df[‘pay’]), 2)


fig, ax = plt.subplots(figsize=[8,6])  
 sns.scatterplot(x=‘avg\_beha’, y=‘pay’, data=sku\_df, palette=‘Set1’)  
 ax.set\_xscale(“log”)  
 ax.set\_yscale(“log”)  
 plt.xlabel(‘平均操作次数’)  
 plt.ylabel(‘销量’)



output

图片

  • 左下角操作少购买少,属于冷门购买频率较低的产品。
  • 左上角操作少购买多,属于快消类产品,可选择品牌少,少数品牌垄断的行业。
  • 右下角操作多购买少,品牌多,但是购买频率低,应为贵重物品类。
  • 右上角操作多购买多,大众品牌,可选多,被购买频次高。

# 商品销量排行  
 sku\_num = (behavior[behavior[‘type’] == ‘pay’].groupby(‘sku\_id’)[‘type’].count().to\_frame()  
                                             .rename(columns={‘type’:‘total’}).reset\_index())  
 # 销量大于1000的商品  
 topsku = sku\_num[sku\_num[‘total’] > 1000].sort\_values(by=‘total’,ascending=False)  
 # 单个用户共购买商品种数  
 sku\_num\_per\_user = (behavior[behavior[‘type’] == ‘pay’]).groupby([‘user\_id’])[‘sku\_id’].nunique()


topsku.set\_index(‘sku\_id’).style.bar(color=‘skyblue’,subset=[‘total’])



output

图片

在计算周期内订单数均突破1000以上的共有13款产品,其中152092这款产品订单数最高为1736. 推出商品组合有优惠等,提高单个用户购买产品种数。

最后

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

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

img

img

img

img

img

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

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

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

ng)

在计算周期内订单数均突破1000以上的共有13款产品,其中152092这款产品订单数最高为1736. 推出商品组合有优惠等,提高单个用户购买产品种数。

最后

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

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

[外链图片转存中…(img-bgfPeh5e-1715798313515)]

[外链图片转存中…(img-gr3wEYVB-1715798313515)]

[外链图片转存中…(img-NW59GAMP-1715798313515)]

[外链图片转存中…(img-LuRfMABh-1715798313516)]

[外链图片转存中…(img-jOamHKNA-1715798313516)]

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

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

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

  • 18
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
京东是中国最大的综合性电子商务网站之一,拥有庞大的用户数量和丰富的用户行为数据。为了更好地理解和分析用户行为模式,可以使用Python结合SQL来进行京东用户行为分析。 首先,我们需要从京东的数据库中提取所需的数据。使用Python中的SQL库(如pymysqlsqlite3),连接到数据库,并编写SQL查询语句来获取有关用户行为的数据。查询可以包括用户ID、浏览商品、下单、购买、评价等各种行为信息。通过执行SQL查询,可以将数据结果存储在Python中的数据结构中,如列表或Pandas数据框,以供后续分析使用。 接下来,可以使用Python中的数据分析和可视化库,如Pandas、Matplotlib和Seaborn,对用户行为数据进行分析和可视化。可以统计每个用户不同行为的次数、频率和占比,探索用户行为的变化趋势和规律。通过绘制柱状图、折线图、饼图等图表,可以更直观地展示数据分析结果。 此外,还可以使用Python中的机器学习和数据挖掘技术,如聚类分析、关联规则挖掘等,对用户行为数据进行更深入的挖掘。可以利用聚类分析用户划分为不同的群体,了解不同用户群体的行为特征和偏好,从而为个性化推荐和营销策略提供依据。可以使用关联规则挖掘来发现不同用户行为之间的关联性,如哪些商品经常一起被浏览或购买。 最后,将分析结果进行总结和应用。通过对京东用户行为分析,可以洞察用户的购物习惯、兴趣爱好和需求,为京东提供个性化的推荐服务和精准的营销策略。同时,还可以帮助京东改进产品和服务,提高用户的满意度和忠诚度。 总之,PythonSQL结合可以对京东用户行为进行面、深入的分析,为京东提供有力的数据支持和决策参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值