写在前言
数据说明:
用户在商品全集上的移动端行为数据(D),表名为tianchi_fresh_comp_train_user_2w,包含如下字段:
字段 字段说明 提取说明
user_id 用户标识 抽样&字段脱敏
item_id 商品标识 字段脱敏
behavior_type 用户对商品的行为类型 包括浏览、收藏、加购物车、购买,对应取值分别是1、2、3、4。
user_geohash 用户位置的空间标识,可以为空 由经纬度通过保密的算法生成
item_category 商品分类标识 字段脱敏
time 行为时间 精确到小时级别
了解数据
加载必要库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
读取数据
# 读取数据
data = pd.read_csv('./tianchi_fresh_comp_train_user.csv')
快速查看数据类型和结构
统计缺失值
删除user_geohash 列,这里不做地理分析
处理数据
删除重复值
将time转换为datetime
提取日期和时间
转换数据类型
查看数据
数据分析-----可视化(pyecharts)
统计每日pv和uv数据
这里对uv进行去重才能得到每一天的人数,因为一天一个人可以多次浏览。
分析每天的pv和uv趋势
1.导包
import pyecharts.options as opts
from pyecharts.charts import Line,Grid,Bar,Funnel
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB
可视化代码
date1 = list(pv_day.index) # 取出日期,作为横轴的数据
pv=(
Line(init_opts = opts.InitOpts(width='1000px',height='500px')) # 画折线图,设置图的大小
# 为横轴添加数据
.add_xaxis(date1)
# 添加展示的pv数据,
.add_yaxis('pv', np.round(pv_day.values/10000,2), label_opts=opts.LabelOpts(is_show=False))
# 添加展示的uv数据
.add_yaxis('uv', yaxis_index=1, y_axis=np.round(uv_day.values/10000,2), label_opts=opts.LabelOpts(is_show=False))
# 添加额外的y轴来接收uv的数据
.extend_axis(yaxis = opts.AxisOpts(name='uv', type_='value', min_=0, max_=1.6, interval=0.4, axislabel_opts=opts.LabelOpts(formatter='{value}万人')))
# 设置全局(设置x轴,y轴,提示框tooltip,标题)
.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}万次')
),
title_opts = opts.TitleOpts(title='pv与uv趋势图')
)
)
pv.render_notebook()
看图理解代码
分析得知双十二那一天pv,uv都得到急剧增加。
pv,uv每天的新增分析
通过concat把pv列和uv列连接起来,然后通过diff函数得到差值
diff函数用当前行减去上一行数据赋给当前行
代码如下
data2 = new_day.index
u = new_day.new_uv
p = new_day.new_pv
li=(
Line(init_opts=opts.InitOpts(width='1000px',height='500px'))
.add_xaxis(data2)
.add_yaxis('新增pv', p, 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}')),
title_opts = opts.TitleOpts(title='pv,uv差异分析'))
)
il=(
Line()
.add_xaxis(data2)
.add_yaxis('新增uv',u, yaxis_index=1, label_opts=opts.LabelOpts(is_show=False))
)
c = li.overlap(il)
c.render_notebook()
绘图如下
从图中可以得到,用户在双12那一天达到顶峰,但在13号那一天急剧下滑达到低谷,说明用户在双12期间最容易发生交易的是12号那一天。
不同时期用户行为分析
绘图如下
印证了双12这一天活动最火爆,用户人数最多,购买的人数也最多。
把数据拆分为活动数据和日常数据做不同时段分析
活动期间不同时段用户行为分析
绘图如下
这是三天活动的日均数据,可以发现活动期间是商家在起主导作用大促集中在零点,因此用户的购买高峰也出现在0点,
点击浏览的高峰集中在晚上的21点到22点之间,因此商家可以在20点前改好促销页面吸引顾客参加0点的活动
日常期间不同时间段用户分析
绘图如下:
与大促不同的是日常期间购买人数从上午10点到晚上23点变化都不会太大高峰出现在晚上21点,pv、加购、收藏的高峰出现在晚上21点到22点之间,说明大家都喜欢在晚上这个时间段浏览商品,日常时可以集中在这个时段进行促销活动,浏览高峰也是集中在晚上21点到22点之间。
日常和活动在不同时段购买率分析
绘图如下
日常时的购买率最高的出现在上午10点到下午15点间,还有晚上的21点,和活动期间的购买率不同,但是明显晚上21点已经在分析中出现比较多的峰值,因此可以考虑这个时段做做吸引用户购买的措施。
转化漏斗分析
绘图如下
活动期间日均从点击到加入购物车的转化率只有7.09%,购买的只有2.91%,说明点击浏览量不少但是吸引不了顾客购买,虽然是大的活动,但是转化率还是很低的,
可以从提高加购率和收藏率着手,从而吸引顾客购买
日常期间
日常期间总的点击量中,有5.92%加入购物车,有4.4%收藏,而到最后只有1.83%购买,整体来看,购买的转化率最低,有很大的增长空间;
——就颜色来看,蓝色部分的变化最大,即“点击-加入购物车“这一环节的转化率最低,按照“点击-加入购物车-收藏-购买”这一用户行为路径,我们可通过优化“点击-加入购物车”这一环节进而提升购买的转化率,可以通过鼓励用户收藏加购后可以领券来刺激用户加购收藏从而刺激用户的购买欲望。
对pyecharts不熟悉的小伙伴可以看看我发的关于pyecharts的相关博客。