电商、互联网、金融这三驾马车是对数据分析应用最为广泛的行业,同时也占据了就业市场上绝大多数的数据分析岗位,只因日常业务产生的海量数据蕴含着无尽的价值。
本次就通过电商角度,选取阿里天池项目中的淘宝App用户行为数据利用Python进行数据分析。
通过对用户关键行为的埋点获取的日志数据,包含用户、商品、行为、时间等信息,而看似简单的几个维度,通过数据分析手段,便能从不同角度挖掘蕴含的价值。
本次主要通过以下四个方向探索淘宝用户行为:
PV、UV随时间变化。
留存率模型。
各周期内消费次数统计。
各行为转化模型。
复购率模型。
回购率模型。
RFM模型。
各价值类别用户分布、购买力等。
商品和行为关系。
TOP商品分析。
数据中包含了淘宝App由2019年11月28日至2019年12月3日之间,有行为的随机用户的所有行为(行为包括点击、购买、加购、收藏)。由user_id(用户ID)、goods_id (商品ID)、cat(商品类目ID)、behavior(行为类型)、time(时间戳)、sex(性别)、addr(城市)、device(访问设备)、price(商品单价)、amount(商品销量)组成,并以逗号分隔。
******************** 基本信息
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 757565 entries, 0 to 757564
Data columns (total 10 columns):
user_id 757565 non-null int64
goods_id 757565 non-null int64
cat 757565 non-null int64
behavior 757565 non-null object
time 757565 non-null int64
sex 757565 non-null int64
addr 757565 non-null object
device 757565 non-null object
price 757565 non-null float64
amount 757565 non-null int64
dtypes: float64(1), int64(6), object(3)
memory usage: 57.8+ MB
None
******************** 空值
user_id 0
goods_id 0
cat 0
behavior 0
time 0
sex 0
addr 0
device 0
price 0
amount 0
dtype: int64
******************** 行为项
pv 679668
cart 42714
fav 20601
buy 14582
Name: behavior, dtype: int64
******************** 重复值
False 757565
dtype: int64
数据很干净,只是有些数据类型需要转换,之后随用随改吧。
df["time"]=df["time"].apply(lambda x:datetime.datetime.fromtimestamp(x))
df['date'] = df['time'].dt.date
df['week'] = df['time'].dt.dayofweek+1
df['hour'] = df['time'].dt.hour
pv、uv 按天分析,观察其访问走势
puv_pivot = pd.pivot_table(df, index=['date'], values=['user_id'], aggfunc='count')
uv = df[['user_id','date']].drop_duplicates()['date'].value_counts()
puv_pivot = puv_pivot.join(uv)
puv_pivot.columns = ['pv','uv']
puv_pivot['avg_pv'] = puv_pivot['pv']/puv_pivot['uv']
grid = Grid()
bar = Bar()
grid.theme = ThemeType.PURPLE_PASSION
line = Line()
line.add_xaxis([str(i)[:10] for i in puv_pivot.index.tolist()])
line.add_yaxis("pv", puv_pivot["pv"].tolist(), label_opts=opts.LabelOpts(is_show=False))
line.extend_axis(yaxis=opts.AxisOpts(type_="value",name="uv人数",position="right", axislabel_opts=opts.LabelOpts(formatter="{value}")))
line.set_global_opts(yaxis_opts=opts.AxisOpts(
name="pv人数",
type_="value",
axislabel_opts=opts.LabelOpts(formatter="{value}")
),
xaxis_opts=opts.AxisOpts(name="",axislabel_opts={
"rotate":45}),
title_opts=opts.TitleOpts("pv uv 变化趋势"),
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
) # 交叉指向工具
line.add_xaxis([str(i)[:10] for i in puv_pivot.index.tolist()])
line.add_yaxis("uv", puv_pivot["uv"],yaxis_index = 1,label_opts=opts.LabelOpts(is_show=False))
line.render_notebook()
可以发现,PV与UV的每日变化趋势大致相同:工作日维持在低值,12月2日PV与UV有较大幅度地提升,检索可知正值“双十二”前夕,各类预热活动促进用户访问增长。
behavior_pivot = pd.pivot_table(df,index='date',columns='behavior',values='user_id',aggfunc='count')
构图方式同 pv uv每日变化趋势 ,这里只展示可视化结果
由于浏览量与其他行为不在同一个量级,故将浏览量置于次坐标轴展示。从变化趋势来看,12月第一天迎来了各类行为的峰值。
gp_hour = df.groupby('hour')['user_id'].count()
line = (
Line()
.add_xaxis(gp_hour.index.tolist())
.add_yaxis("访问量", gp_hour.values.tolist(),label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="各时段访问量"),
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
yaxis_opts=opts.AxisOpts(name="访问量