python数据分析电商用户行为,看完这一篇就够了

  • 日消费次数、日活跃人数、日消费人数、日消费人数占比、消费用户日人均消费次数

日活跃人数(有一次操作即视为活跃)

daily_active_user = behavior.groupby(‘date’)[‘user_id’].nunique()

日消费人数

daily_buy_user = behavior[behavior[‘type’] == ‘pay’].groupby(‘date’)[‘user_id’].nunique()

日消费人数占比

proportion_of_buyer = daily_buy_user / daily_active_user

日消费总次数

daily_buy_count = behavior[behavior[‘type’] == ‘pay’].groupby(‘date’)[‘type’].count()

消费用户日人均消费次数

consumption_per_buyer = daily_buy_count / daily_buy_user

复制代码

SQL

日消费总次数

SELECT date, COUNT(type) pay_daily FROM behavior_sql

WHERE type = ‘pay’

GROUP BY date;

日活跃人数

SELECT date, COUNT(DISTINCT user_id) uv_daily FROM behavior_sql

GROUP BY date;

日消费人数

SELECT date, COUNT(DISTINCT user_id) user_pay_daily FROM behavior_sql

WHERE type = ‘pay’

GROUP BY date;

日消费人数占比

SELECT

(SELECT date, COUNT(DISTINCT user_id) user_pay_daily FROM behavior_sql

WHERE type = ‘pay’

GROUP BY date) /

(SELECT date, COUNT(DISTINCT user_id) uv_daily FROM behavior_sql

GROUP BY date)

日人均消费次数

SELECT

(SELECT date, COUNT(type) pay_daily FROM behavior_sql

WHERE type = ‘pay’

GROUP BY date) /

(SELECT date, COUNT(DISTINCT user_id) uv_daily FROM behavior_sql

GROUP BY date)

复制代码

日消费人数占比可视化

柱状图数据

pob_bar = (pd.merge(daily_active_user,daily_buy_user,on=‘date’).reset_index()

.rename(columns={‘user_id_x’:‘日活跃人数’,‘user_id_y’:‘日消费人数’})

.set_index(‘date’).stack().reset_index().rename(columns={‘level_1’:‘Variable’,0: ‘Value’}))

线图数据

pob_line = proportion_of_buyer.reset_index().rename(columns={‘user_id’:‘Rate’})

fig1 = plt.figure(figsize=[16,6])

ax1 = fig1.add_subplot(111)

ax2 = ax1.twinx()

sns.barplot(x=‘date’, y=‘Value’, hue=‘Variable’, data=pob_bar, ax=ax1, alpha=0.8, palette=‘husl’)

ax1.legend().set_title(‘’)

ax1.legend().remove()

sns.pointplot(pob_line[‘date’], pob_line[‘Rate’], ax=ax2,markers=‘D’, linestyles=‘–’,color=‘teal’)

x=list(range(0,16))

for a,b in zip(x,pob_line[‘Rate’]):

plt.text(a+0.1, b + 0.001, ‘%.2f%%’ % (b*100), ha=‘center’, va= ‘bottom’,fontsize=12)

fig1.legend(loc=‘upper center’,ncol=2)

plt.title(‘日消费人数占比’)

复制代码

日活跃人数与日消费人数无明显波动,日消费人数占比均在20%以上。

消费用户日人均消费次数可视化

柱状图数据

cpb_bar = (daily_buy_count.reset_index().rename(columns={‘type’:‘Num’}))

线图数据

cpb_line = (consumption_per_buyer.reset_index().rename(columns={0:‘Frequency’}))

fig2 = plt.figure(figsize=[16,6])

ax3 = fig2.add_subplot(111)

ax4 = ax3.twinx()

sns.barplot(x=‘date’, y=‘Num’, data=cpb_bar, ax=ax3, alpha=0.8, palette=‘pastel’)

sns.pointplot(cpb_line[‘date’], cpb_line[‘Frequency’], ax=ax4, markers=‘D’, linestyles=‘–’,color=‘teal’)

x=list(range(0,16))

for a,b in zip(x,cpb_line[‘Frequency’]):

plt.text(a+0.1, b + 0.001, ‘%.2f’ % b, ha=‘center’, va= ‘bottom’,fontsize=12)

plt.title(‘消费用户日人均消费次数’)

复制代码

日消费人数在25000以上,日人均消费次数大于1次。

dau3_df = behavior.groupby([‘date’,‘user_id’])[‘type’].count().reset_index()

dau3_df = dau3_df[dau3_df[‘type’] >= 3]

复制代码

每日高活跃用户数(每日操作数大于3次)

dau3_num = dau3_df.groupby(‘date’)[‘user_id’].nunique()

复制代码

SQL

SELECT date, COUNT(DISTINCT user_id)

FROM

(SELECT date, user_id, COUNT(type)

FROM behavior_sql

GROUP BY date, user_id

HAVING COUNT(type) >= 3) dau3

GROUP BY date;

复制代码

fig, ax = plt.subplots(figsize=[16,6])

sns.pointplot(dau3_num.index, dau3_num.values, markers=‘D’, linestyles=‘–’,color=‘teal’)

x=list(range(0,16))

for a,b in zip(x,dau3_num.values):

plt.text(a+0.1, b + 300 , ‘%i’ % b, ha=‘center’, va= ‘bottom’,fontsize=14)

plt.title(‘每日高活跃用户数’)

复制代码

每日高活跃用户数在大部分4万以上,2018-04-04之前数量比较平稳,之后数量一直攀升,8号9号达到最高,随后下降,推测数据波动应为营销活动产生的。

高活跃用户累计活跃天数分布

dau3_cumsum = dau3_df.groupby(‘user_id’)[‘date’].count()

复制代码

SQL

SELECT user_id, COUNT(date)

FROM

(SELECT date, user_id, COUNT(type)

FROM behavior_sql

GROUP BY date, user_id

HAVING COUNT(type) >= 3) dau3

GROUP BY user_id;

复制代码

fig, ax = plt.subplots(figsize=[16,6])

ax.set_yscale(“log”)

sns.countplot(dau3_cumsum.values,palette=‘Set1’)

for p in ax.patches:

ax.annotate(‘{:.2f}%’.format(100*p.get_height()/len(dau3_cumsum.values)), (p.get_x() + 0.2, p.get_height() + 100))

plt.title(‘高活跃用户累计活跃天数分布’)

复制代码

统计周期内,大部分高活跃用户累计活跃天数在六天以下,但也存在高达十六天的超级活跃用户数量,对累计天数较高的用户要推出连续登录奖励等继续维持其对平台的黏性,对累计天数较低的用户要适当进行推送活动消息等对其进行召回。

#每日浏览量

pv_daily = behavior[behavior[‘type’] == ‘pv’].groupby(‘date’)[‘user_id’].count()

#每日访客数

uv_daily = behavior.groupby(‘date’)[‘user_id’].nunique()

复制代码

SQL

#每日浏览量

SELECT date, COUNT(type) pv_daily FROM behavior_sql

WHERE type = ‘pv’

GROUP BY date;

#每日访客数

SELECT date, COUNT(DISTINCT user_id) uv_daily FROM behavior_sql

GROUP BY date;

复制代码

每日浏览量可视化

fig, ax = plt.subplots(figsize=[16,6])

sns.pointplot(pv_daily.index, pv_daily.values,markers=‘D’, linestyles=‘–’,color=‘dodgerblue’)

x=list(range(0,16))

for a,b in zip(x,pv_daily.values):

plt.text(a+0.1, b + 2000 , ‘%i’ % b, ha=‘center’, va= ‘bottom’,fontsize=14)

plt.title(‘每日浏览量’)

复制代码

  • 23
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值