淘宝APP用户行为数据分析案例——Python

一. 项目介绍

1.1 分析背景

多年以来,电子商务业务发展迅速,逐渐地成为人们生活购物的一部分,移动互联网的普及更是让网上购物变得更加迅速、便捷。淘宝作为国内最大的电商交易平台之一,更是具有巨大的流量优势。淘宝APP给用户提供了搜索、商品分类导航、用户个性化推荐及广告等系统和功能,引导用户高效地了解钟意的商品,促成用户消费。上述系统和功能很好的分发了首页的巨大流量,同时又可以通过收集、分析用户数据,不断调整系统和功能的升级,从而不断地提高用户的消费体验,形成一个良好的循环。此外,淘宝提供的收藏、加入购物车等功能的出现,更是给用户提供了便捷的通道。
本文基于数据集内容特征,通过分析用户在APP的行为路径,了解目前业务的基本形势以及用户的行为习惯,针对可能存在的问题进行更深层次的挖掘和分析,并提出对应的解决策略。

1.2 数据集介绍

数据集来源于阿里云天池官方数据集: User Behavior Data from Taobao for Recommendation.
数据集中包含了2017年11月25日至2017年12月3日之间,约一百万随机用户的所有行为 (行为包括点击、购买、加购、收藏),共有1亿多条记录,数据集的每一行表示一条用户行为,由用户ID、商品 ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。关于数据集中每一列的详细描述如下:

列名称 说明
用户ID:user_id 整数类型,序列化后的用户id
商品 ID:item_id 整数类型,序列化后的商品ID
商品类目ID:category_id 整数类型,序列化后的商品所属类目ID
行为类型:behavior 字符串,枚举类型,包括(“pv”,“buy”,“cart”,“fav”)
时间戳:timestamp 行为发生时的时间戳

以下为行为类型说明

行为类型 说明
pv 商品详情页pv,等价于点击
buy 商品购买
cart 将商品加入购物车
fav 收藏商品

1.3 数据理解

  1. 数据集只涵盖了9天的用户行为,时间较为短;
  2. 数据集内容只包括了:用户ID、商品 ID、商品类目ID、行为类型和时间戳,有很大的局限性,有分析价值的是行为、商品ID、时间、商品类目ID这四个维度。
  3. 数据集有1亿多条记录,数据量过大,本文只抽取了其中200万条数据作为代表分析,这部分数据中包含了19544名用户的行为记录。为了避免读者对后续数据的理解出现错误,因此先声明:后续文中所表述的数据都是基于这19544名用户在2017年11月25号~2017年12月03号共9天的行为数据,而不是所有的用户行为数据。

二. 明确问题&搭建分析框架

2.1 提出问题

根据数据集的数据内容和特征,本次主要针对以下几个方面进行分析:

  1. 分析淘宝APP常见的流量类指标。
  2. 分析淘宝APP常见的用户类指标。
  3. 研究在不同时间尺度下,用户在淘宝APP的行为分布,分析用户行为是否存在一定的时间规律。
  4. 分析用户使用APP的行为路径(点击、收藏、加购物车、购买)。
  5. 分析用户购买的商品中,是否存在热销“爆款”。

2.2 分析框架搭建

在这里插入图片描述

三. 数据处理

3.1 导入库

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import time
import pyecharts.options as opts
from pyecharts.charts import Funnel
import copy

%matplotlib inline
# 设置matplolib有关参数
plt.rcParams["font.sans-serif"]=["SimHei"]     #用来正常显示中文标签
plt.rcParams["axes.unicode_minus"] = False   #用来正常显示负号
plt.style.use("ggplot")

3.2 导入数据

# 设置字段名
columns = ["user_id","item_id","category_id","behavior","timestamp"]

# 读取数据,用get_chunk获取两百万条数据
data = pd.read_csv("E:/数据分析/数据集/UserBehavior.csv",header=None,sep=",",iterator=True,names=columns)
user_behavior = data.get_chunk(2000000)

# 数据初预览
user_behavior.head(10)

在这里插入图片描述

3.3 数据清洗

3.3.1 查看数据整体信息

user_behavior.info()

在这里插入图片描述
数据维度200万×5,各字段数据类型符合要求,筛选后数据集大小76.3M。

3.3.2 缺失值处理

查看有多少条记录存在缺失值。

user_behavior.isnull().sum()

在这里插入图片描述
运行代码,结果显示没有缺失值,数据比较完整干净。

3.3.3 重复值处理

查看有多少记录重复。

user_behavior.duplicated().sum()

在这里插入图片描述
运行代码,结果显示数据集中没有重复记录,不需要进一步处理。

3.3.4 时间维度拆解,增添新列

# 时间戳保持原数据形式,新添加一列日期,一列小时
# localtime 的作用是格式化时间戳为本地的时间

user_behavior = user_behavior.assign(time=user_behavior["timestamp"].map(lambda x: time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(x))))
user_behavior = user_behavior.assign(date=user_behavior["timestamp"].map(lambda x: time.strftime("%Y-%m-%d",time.localtime(x))))
user_behavior = user_behavior.assign(hour=user_behavior["timestamp"].map(lambda x: time.strftime("%H",time.localtime(x))))
user_behavior.head()

在这里插入图片描述

3.3.5 去除异常值

根据源数据集介绍,可知道数据的日期包含在2017年11月25日至2017年12月3日之间,因此可根据这条规则对数据进行异常处理。

# 过滤时间,排除不在要求时间区间的记录
user_behavior = user_behavior[(user_behavior["date"]>"2017-11-24")&(user_behavior["date"]<"2017-12-04")]

# 处理完成后,再次查看整体数据维度
user_behavior.shape

输出结果:(1999009, 7),说明原数据集中包含了不在2017年11月25日~2017年12月3日区间的用户行为记录。现在数据完成了清洗工作,进入数据分析环节。

四. 流量类指标分析

4.1 流量类绝对指标

根据数据集内容,本次分析的流量类绝对指标主要包括以下4项:

  1. 每日pv:当天淘宝APP页面的浏览量或者点击量;
  2. 每日uv:当天进入淘宝APP的用户数量(需要去重);
  3. 每日活跃用户数:在这里定义当天在淘宝APP上产生3次及以上行为数据的用户数量(需要去重);
  4. 每日支付用户数:当天在淘宝APP上产生购买行为(buy)的用户数量(需要去重)。

具体代码如下:

# 每日pv
daily_pv = user_behavior[user_behavior["behavior"]=="pv"][["user_id","date"]].groupby("date").count()
daily_pv.rename(columns={
   "user_id":"pv"},inplace=True)

# 每日uv
daily_uv = user_behavior[["user_id","date"]].groupby("date").nunique()
daily_uv = daily_uv.drop("date",axis=1)
daily_uv = daily_uv.rename(columns={
   "user_id":"uv"})

# 每日活跃用户:当天用户行为超过2次,则视为活跃
daily_active = user_behavior[["user_id","behavior","date"]].groupby(["date","user_id"]).count()
daily_active = daily_active[daily_active["behavior"]>2]
daily_active = daily_active.count(level=0)
daily_active.rename(columns={
   "behavior":"active_user"},inplace=True)

# 每日支付用户
daily_purchaser = user_behavior[user_behavior["behavior"]=="buy"]
daily_purchaser = daily_purchaser[["user_id","date","behavior"]].groupby(["date","user_id"]).count()
daily_purchaser = daily_purchaser.count(level=0)
daily_purchaser.rename(columns={
   "behavior":"buy_user"},inplace=True)

# 合并数据
df_target = daily_pv.join([daily_uv,daily_active,daily_purchaser])
df_target

在这里插入图片描述
使用matplolib绘制折线图。

plt.figure(figsize=(10,4),dpi=200)  # 设置图的尺寸大小

plt.subplot(111,facecolor="#F0F0F0")
    
plt.xlabel("日期",fontsize=10)
plt.ylabel("单位/万",fontsize=10)

plt.xticks(fontsize=10)
plt.yticks(fontsize=10)

plt.title("流量类绝对指标",fontsize=14)
plt.grid(axis="x")

plt.plot(df_target["pv"]/10000,linewidth = '2',marker="o",color="#00868B",label="pv")
plt.plot(df_target["uv"]/10000,linewidth = '2',marker="o",color="#ff5338",label="uv")
plt.plot(df_target["active_user"]/10000,linewidth="2",marker="o",color="#fe8c00",label="活跃用户")
plt.plot(df_target["buy_user"]/10000,linewidth="2",marker="o",color="#595959",label="支付用户")

plt.legend(loc="best",fontsize=8)

在这里插入图片描述
每天的点击数量比其他数据高出一个量级,排除pv后,其他数据折线图如下:
在这里插入图片描述
流量类绝对指标小结:

  • 1.日pv、日uv、日活跃用户数量和日支付用户数量均呈现了上升趋势,且都在12月2日、3日有了大幅度的提升,日pv提升了33.0%、日uv提升了34.7%、日活跃数量提升了32.0%、日支付用户数量提升了24.0%(数据由后两天均值除以前7天均值得出)。
  • 2.上述指标都在12月2日~ 3日有了大幅度提升,12月2日~ 3日虽然是周末,但是结合上个周末11月25日~ 6日的流量分析,可以排除周末原因;由于12月2日~3日距离双12较近,推测较大可能的原因是双12系列促销活动预热所带来的流量增加。

4.2 流量类相对指标

流量指标可以反映出APP整体的运营情况,而流量的相对指标可以返应出整体更深层次的运营情况,根据上述流量指标,对应的流量相对指标包括以下几项:

  1. 每日人均pv:即人均浏览量,每日pv/每日uv;
  2. 每日活跃用户比例:每日活跃用户数量/每日uv;
  3. 每日支付用户比例:每日支付用户数量/每日uv;
  4. 跳失率:指在统计时间内,只浏览点击一次的用户数量/uv;本文选取的统计时间周期是一天。

具体代码如下:

# 每日人均pv
df_target["pv/uv"] = df_target["pv"]/df_target["uv"]

# 每日活跃用户比例
df_target["active_rate"] = df_target["active_user"]/df_target[
  • 15
    点赞
  • 119
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值