关注公众号:『AI学习星球
』
回复:电商用户行为可视化分析
即可获取数据下载。
算法学习
、4对1辅导
、论文辅导
或核心期刊
可以通过公众号
或?v:codebiubiubiu
滴滴我
电商平台在所有媒体类型中,具有足够的特殊性,是兼具媒体场景和消费场景两大属性的平台,符合品效合一,也因此衍生出了贴合电商“搜索-购买-评价”链条的多种营销模式。随着电商营销产业链上消费行为数据的积累,海量数据中蕴含着无尽的价值,显现了用户不同的购物方式及爱好,基于此背景,本文利用阿里天池中淘宝电商用户数据进行分析。
字段名称 | 字段描述 |
---|---|
user_id | 用户标识,抽样&字段脱敏 |
item_id | 商品标识,字段脱敏 |
behavior_type | 用户对商品的行为类型,包括浏览、收藏、加购物车、购买,对应取值分别是1、2、3、4。 |
user_geohash | 用户位置的空间标识,可以为空,由经纬度通过保密的算法生成 |
item_category | 商品分类标识,字段脱敏 |
time | 精确到小时级别 |
通过对淘宝App用户行为数据分析,为以下问题提供解释和改进建议:
针对提出的问题,主要从用户行为时间维度、指标转化率、商品购买情况、用户价值等四个方面进行分析。
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
#导入数据并查看头部
user=pd.read_csv('tianchi_mobile_recommend_train_user.csv')
user.head()
df.info()
#查看统计信息
df.describe()
user.isnull().sum()
因为不做地理数据的分析user_geohash 这列的缺失值不做处理。
df.drop_duplicates(keep='last',inplace=True)
df['time'] = pd.to_datetime(df.time)
df['dates'] = df.time.dt.date
df['month'] = df.dates.values.astype('datetime64[M]')
df['hours'] = df.time.dt.hour
df['behavior_type'] = df['behavior_type'].apply(str)
df['user_id'] = df['user_id'].apply(str)
df['item_id'] = df['item_id'].apply(str)
关注公众号:『AI学习星球
』
回复:电商用户行为可视化分析
即可获取数据下载。
算法学习
、4对1辅导
、论文辅导
或核心期刊
可以通过公众号
或?v:codebiubiubiu
滴滴我
可视化内容主要利用的是pyecharts库,其数据交互性较好
import pyecharts.options as opts
from pyecharts.charts import *
提取出每日pv与uv的数据
pv_day=user[user.behavior_type=="1"].groupby("dates")["behavior_type"].count()
uv_day=user[user.behavior_type=="1"].drop_duplicates(["user_id","dates"]).groupby("dates")["user_id"].count()
做趋势图
# 加载库
import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.charts import Grid
import numpy as np
# 做出每天的pv与uv趋势图
attr=list(pv_day.index)
pv=(
Line(init_opts=opts.InitOpts(width="1000px",height="500px"))
.add_xaxis(xaxis_data=attr)
.add_yaxis(
"pv",
np.around(pv_day.values/10000,decimals=2),
label_opts=opts.LabelOpts(is_show=False)
)
.add_yaxis(
series_name="uv",
yaxis_index=1,
y_axis=np.around(uv_day.values/10000,decimals=2),
label_opts=opts.LabelOpts(is_show=False),
)
.extend_axis(
yaxis=opts.AxisOpts(
name="uv",
type_="value",
min_=0,
max_=1.6,
interval=0.4,
axislabel_opts=opts.LabelOpts(formatter="{value} 万人"),
)
)
.set_global_opts(
tooltip_opts=opts.TooltipOpts(
is_show=True,trigger="axis",axis_pointer_type="cross"
),
xaxis_opts=opts.AxisOpts(
type_="category",
axispointer_opts=opts.AxisPointerOpts(is_show=True,type_="shadow"),
),
yaxis_opts=opts.AxisOpts(
name="pv",
type_="value",
min_=0,
max_=100,
interval=20,
axislabel_opts=opts.LabelOpts(formatter="{value} 万次"),
axistick_opts=opts.AxisTickOpts(is_show=True),
splitline_opts=opts.SplitLineOpts(is_show=True),
),
title_opts=opts.TitleOpts(title="pv与uv趋势图"),
)
)
pv.render_notebook()
从趋势图来看,浏览量和浏览人数在双十二活动期间有一个猛烈的上涨,在活动过后趋势又趋于平稳,可利用活动带来的巨大流量,提升用户的购买转化率。
pv_uv = pd.concat([pv_day, uv_day], join='outer', axis=1)
pv_uv.columns = ['pv_day', 'uv_day']
new_day=pv_uv.diff()
new_day.columns=['new_pv','new_uv']
new_day
attr = new_day.index
v = new_day.new_uv
w = new_day.new_pv
li=(
Line(init_opts=opts.InitOpts(width="1000px",height="500px"))
.add_xaxis(xaxis_data=attr)
.add_yaxis(
"新增pv",
w,
label_opts=opts.LabelOpts(is_show=False)
)
.extend_axis(
yaxis=opts.AxisOpts(
name="新增uv",
type_="value",
min_=-2000,
max_=1600,
interval=400,
axislabel_opts=opts.LabelOpts(formatter="{value}"),
)
)
.set_global_opts(
tooltip_opts=opts.TooltipOpts(
is_show=True, trigger="axis", axis_pointer_type="cross"
),
xaxis_opts=opts.AxisOpts(
type_="category",
axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"),
),
yaxis_opts=opts.AxisOpts(
name="新增pv",
type_="value",
min_=-350000,
max_=250000,
interval=100000,
axislabel_opts=opts.LabelOpts(formatter="{value}"),
axistick_opts=opts.AxisTickOpts(is_show=True),
splitline_opts=opts.SplitLineOpts(is_show=True),
),
title_opts=opts.TitleOpts(title="pv、uv差异分析"),
)
)
il=(
Line()
.add_xaxis(xaxis_data=attr)
.add_yaxis("新增uv",v,yaxis_index='1',label_opts=opts.LabelOpts(is_show=False),)
)
c=li.overlap(il)
c.render_notebook()
从新增pv、uv可以看出双十二活动期间更加明显的流量波动。
#转换按小时统计数据
pv_hour = user[user.behavior_type == '1'].groupby('hours')['behavior_type'].count()
uv_hour = user[user.behavior_type == '1'].drop_duplicates(['user_id','hours']).groupby('hours')['user_id'].count()
attr=list(pv_hour.index)
#作图
pvh=(Line(init_opts=opts.InitOpts(width="1000px",height="500px"))
.add_xaxis(xaxis_data=attr)
.add_yaxis("pv",np.around(pv_hour.values/1000,decimals=2),label_opts=opts.LabelOpts(is_show=False))
.add_yaxis(series_name="uv",yaxis_index=1,y_axis=np.around(uv_hour.values/1000,decimals=2),label_opts=opts.LabelOpts(is_show=False),)
.extend_axis(yaxis=opts.AxisOpts(name="uv",type_="value",min_=0,max_=16,interval=4,axislabel_opts=opts.LabelOpts(formatter="{value} 千人"),))
.set_global_opts(tooltip_opts=opts.TooltipOpts(is_show=True,trigger="axis",axis_pointer_type="cross"),
xaxis_opts=opts.AxisOpts(type_="category",axispointer_opts=opts.AxisPointerOpts(is_show=True,type_="shadow"),),
yaxis_opts=opts.AxisOpts(name="pv",type_="value",min_=0,max_=140,interval=20,axislabel_opts=opts.LabelOpts(formatter="{value} 千次"),axistick_opts=opts.AxisTickOpts(is_show=True),splitline_opts=opts.SplitLineOpts(is_show=True),),
title_opts=opts.TitleOpts(title="pv与uv趋势图",subtitle="按小时"),)
)
pvh.render_notebook()
可以发现0点到6点是一个低谷时段,大部分用户在休息,6点到10点是用户访问浏览的一个迅速增长时段,10点到18点访问趋势较平稳,晚上19点到23点是用户最活跃的时段,可以利用这段时间向用户推荐其兴趣爱好的商品,提高转化率。
shopping_cart= user[user.behavior_type == '3'].groupby('dates')['behavior_type'].count()
collect=user[user.behavior_type=='2'].groupby('dates')['behavior_type'].count()
buy=user[user.behavior_type=='4'].groupby('dates')['behavior_type'].count()
attr_a=list(shopping_cart.index)
v_1=shopping_cart.values.tolist()
v_2=collect.values.tolist()
v_3=buy.values.tolist()
b=(
Line()
.add_xaxis(xaxis_data=attr_a)
.add_yaxis(
"加购人数",
v_1,
label_opts=opts.LabelOpts(is_show=False)
)
.add_yaxis(
"收藏人数",
v_2,
label_opts=opts.LabelOpts(is_show=False)
)
.add_yaxis(
"购买人数",
v_3,
label_opts=opts.LabelOpts(is_show=False)
)
.set_global_opts(title_opts=opts.TitleOpts(title="不同时期用户行为数据"))
)
b.render_notebook()
可以看出,加入购物车、收藏、购买等行为与浏览量的量级是不在一个等级的,但趋势是较一致的。
由于数据里面包含双十二大促的数据,因此整理分析用户的不同时段行为可能会导致分析结果与实际差异较大,因此拆分开来做不同的对比分析。
user['dates']=pd.to_datetime(user['dates'])
active=user[user["dates"].isin(["2014/12/11","2014/12/12","2014/12/13"])]
daily=user[~user["dates"].isin(["2014/12/11","2014/12/12","2014/12/13"])]
from pyecharts.charts import Bar
# 活动数据
cart_h= active[active.behavior_type == '3'].groupby('hours')['behavior_type'].count()
collect_h=active[active.behavior_type=='2'].groupby('hours')['behavior_type'].count()
buy_h=active[active.behavior_type=='4'].groupby('hours')['behavior_type'].count()
uv_h=active[active.behavior_type== '1'].groupby('hours')['user_id'].count()
attr_h=list(cart_h.index)
h1=np.around(cart_h.values/3,decimals=0).tolist()
h2=np.around(collect_h.values/3,decimals=0).tolist()
h3=np.around(buy_h.values/3,decimals=0).tolist()
h4=np.around(uv_h.values/3,decimals=0).tolist()
h=(
Line(init_opts=opts.InitOpts(width="1000px",height="500px"))
.add_xaxis(xaxis_data=attr_h)
.add_yaxis(
"加购人数",
h1,
label_opts=opts.LabelOpts(is_show=False)
)
.add_yaxis(
"收藏人数",
h2,
label_opts=opts.LabelOpts(is_show=False)
)
.add_yaxis(
"购买人数",
h3,
label_opts=opts.LabelOpts(is_show=False)
)
.set_global_opts(
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=15)),
title_opts=opts.TitleOpts(title="日均各时段活动用户行为",pos_top="48%"),
legend_opts=opts.LegendOpts(pos_top="48%"),
)
)
bar=(
Bar()
.add_xaxis(xaxis_data=attr_h)
.add_yaxis(
"浏览人数",
h4,
label_opts=opts.LabelOpts(is_show=False)
)
.set_global_opts(
title_opts=opts.TitleOpts(title="活动pv对比数据"),
)
)
ggrid = (
Grid()
.add(bar, grid_opts=opts.GridOpts(pos_bottom="60%"))
.add(h, grid_opts=opts.GridOpts(pos_top="60%"))
)
ggrid.render_notebook()
这是三天活动的日均数据,可以发现活动期间是商家在起主导作用大促集中在零点,因此用户的购买高峰也出现在0点,点击浏览的高峰集中在晚上的21点到22点之间,因此商家可以在20点前改好促销页面吸引顾客参加0点的活动。
#转换日常期间行为数据
cart_d= daily[daily.behavior_type == '3'].groupby('hours')['behavior_type'].count()
collect_d=daily[daily.behavior_type=='2'].groupby('hours')['behavior_type'].count()
buy_d=daily[daily.behavior_type=='4'].groupby('hours')['behavior_type'].count()
uv_d=daily[daily.behavior_type== '1'].groupby('hours')['user_id'].count()
attr_d=list(cart_d.index)
d1=np.around(cart_d.values/28,decimals=0).tolist()
d2=np.around(collect_d.values/28,decimals=0).tolist()
d3=np.around(buy_d.values/28,decimals=0).tolist()
d4=np.around(uv_d.values/3,decimals=0).tolist()
#作图
d=(Line(init_opts=opts.InitOpts(width="1000px",height="500px"))
.add_xaxis(xaxis_data=attr_d)
.add_yaxis("加购人数",d1,label_opts=opts.LabelOpts(is_show=False))
.add_yaxis("收藏人数",d2,label_opts=opts.LabelOpts(is_show=False))
.add_yaxis("购买人数",d3,label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=15)),title_opts=opts.TitleOpts(title="日均各时段活动用户行为",pos_top="48%"),legend_opts=opts.LegendOpts(pos_top="48%"),)
.set_series_opts(markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max",name="最大值"),opts.MarkPointItem(type_="min",name="最小值"),]))
)
y=(Bar().add_xaxis(xaxis_data=attr_d)
.add_yaxis("浏览人数",d4,label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="日常pv对比数据"),)
.set_series_opts(markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max",name="最大值"),opts.MarkPointItem(type_="min",name="最小值"),]))
)
ggrid = (Grid().add(y, grid_opts=opts.GridOpts(pos_bottom="60%")).add(d, grid_opts=opts.GridOpts(pos_top="60%")))
ggrid.render_notebook()
与大促不同的是日常期间购买人数从上午10点到晚上23点变化都不会太大,高峰出现在晚上21点,pv、加购、收藏的高峰出现在晚上21点到22点之间,说明大家都喜欢在晚上这个时间段浏览商品,日常时可以集中在这个时段进行促销活动。
# 活动时购买率
hour_buy_user_num = active[active.behavior_type == '4'].drop_duplicates(['user_id','dates', 'hours']).groupby('hours')['user_id'].count()
hour_active_user_num = active.drop_duplicates(['user_id','dates', 'hours']).groupby('hours')['user_id'].count()
hour_buy_rate = hour_buy_user_num / hour_active_user_num
attr_o = list(hour_buy_user_num.index)
vo_2 =np.around(hour_buy_rate.values,decimals=2)
# 日常时购买率
hour_buy_daily_num = daily[daily.behavior_type == '4'].drop_duplicates(['user_id','dates', 'hours']).groupby('hours')['user_id'].count()
hour_active_daily_num = daily.drop_duplicates(['user_id','dates', 'hours']).groupby('hours')['user_id'].count()
daily_buy_rate = hour_buy_daily_num / hour_active_daily_num
vi_2 =np.around(daily_buy_rate.values,decimals=2)
hbu=(
Line()
.add_xaxis(xaxis_data=attr_o)
.add_yaxis(
"日常购买率",
vi_2,
)
.add_yaxis(
"活动购买率",
vo_2,
)
.set_global_opts(title_opts=opts.TitleOpts(title="不同时段购买率"))
)
hbu.render_notebook()
日常时的购买率最高的出现在上午10点到下午16点间,还有晚上的21点左右,和活动期间的购买率不同,但是明显晚上21点已经在分析中出现比较多的峰值,因此可以考虑这个时段做做吸引用户购买的措施。
from pyecharts.charts import Funnel
# 活动转化
a_pv=active[active.behavior_type=="1"]["user_id"].count()
a_cart=active[active.behavior_type=="3"]["user_id"].count()
a_collect=active[active.behavior_type=="2"]["user_id"].count()
a_buy=active[active.behavior_type=="4"]["user_id"].count()
a_attr=["点击","加入购物车","收藏","购买"]
values=[np.around((a_pv/a_pv*100),2),
np.around((a_cart/a_pv*100),2),
np.around((a_collect/a_pv*100),2),
np.around((a_buy/a_pv*100),2),
]
data = [[a_attr[i], values[i]] for i in range(len(a_attr))]
a=(
Funnel()
.add(
series_name="用户行为",
data_pair=data,
gap=2,
tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/>{b} : {c}%",is_show=True),
label_opts=opts.LabelOpts(is_show=True, position="ourside"),
itemstyle_opts=opts.ItemStyleOpts(border_color="#fff", border_width=1),
)
.set_global_opts(title_opts=opts.TitleOpts(title="用户转化漏斗", subtitle="活动"))
)
a.render_notebook()
活动期间日均从点击到加入购物车的转化率只有5.01%,购买的只有2.12%,说明点击浏览量不少,但是吸引不了顾客购买,虽然是大的活动,但是转化率还是很低的,可以从提高加购率和收藏率着手,从而吸引顾客购买。
# 日常转化
l_pv=daily[daily.behavior_type=="1"]["user_id"].count()
l_cart=daily[daily.behavior_type=="3"]["user_id"].count()
l_collect=daily[daily.behavior_type=="2"]["user_id"].count()
l_buy=daily[daily.behavior_type=="4"]["user_id"].count()
l_attr=["点击","加入购物车","收藏","购买"]
valuel=[np.around((l_pv/l_pv*100),2),
np.around((l_cart/l_pv*100),2),
np.around((l_collect/l_pv*100),2),
np.around((l_buy/l_pv*100),2),
]
datal = [[l_attr[i], valuel[i]] for i in range(len(l_attr))]
dy=(
Funnel()
.add(
series_name="用户行为",
data_pair=datal,
gap=2,
tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/>{b} : {c}%",is_show=True),
label_opts=opts.LabelOpts(is_show=True, position="ourside"),
itemstyle_opts=opts.ItemStyleOpts(border_color="#fff", border_width=1),
)
.set_global_opts(title_opts=opts.TitleOpts(title="用户转化漏斗", subtitle="日常"))
)
dy.render_notebook()
关注公众号:『AI学习星球
』
回复:电商用户行为可视化分析
即可获取数据下载。
算法学习
、4对1辅导
、论文辅导
或核心期刊
可以通过公众号
或?v:codebiubiubiu
滴滴我
本次分析从四个不同的角度提出了问题,下面根据分析数据以及可视化结果给出结论和建议:
从浏览到有购买意向只有1.4%的转化率,当然有一部分用户是直接购买,但也说明大多数用户以浏览页面为主而购买转化较少,此处为转化漏斗中需要改善和提高的环节。针对提高转化率提出一些建议:
针对浏览量高而销量不高的这部分商品,需要提高的是用户从点击进入商品详情页到最终购买的体验。
关注公众号:『AI学习星球
』
回复:电商用户行为可视化分析
即可获取数据下载。
算法学习
、4对1辅导
、论文辅导
或核心期刊
可以通过公众号
或?v:codebiubiubiu
滴滴我