数据分析3_淘宝用户行为分析_阿里云天池

本文分析了淘宝用户行为数据,包括用户活跃时段、购买间隔、转化率、跳失率和复购率。数据显示,用户在5:00-10:00和18:00-21:00活跃度高,购买行为多发生在1小时内。RFM模型显示,重要发展客户占比高,需提高他们的交易频次。此外,用户加入购物车后购买转化率优于收藏,建议优化购物车功能以提升转化率。
摘要由CSDN通过智能技术生成

淘宝用户行为分析

数据来源

数据链接,我下载的是2018年上传的905.80MB的UserBehavior.csv.zip。
本项目完整源码,提取码9a5v。

为减少篇幅,所以本篇的绘图部分代码没有附上,需要的小伙伴可以点开链接下载完整代码。

项目背景

UserBehavior是阿里巴巴提供的一个淘宝用户行为数据集,用于隐式反馈推荐问题的研究。

本数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。数据集的组织形式和MovieLens-20M类似,即数据集的每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。

分析目标

  1. 用户活跃时段,指标趋势
  2. 用户对哪些产品、类目感兴趣,付费用户和非付费用户区别
  3. 转化率,跳失率、复购率
  4. 用户购买行为特点
  5. 根据RFM模型对用户分类

数据概览

列名称 说明
用户ID 整数类型,序列化后的用户ID
商品ID 整数类型,序列化后的商品ID
商品类目ID 整数类型,序列化后的商品所属类目ID
行为类型 字符串,枚举类型,包括(‘pv’, ‘buy’, ‘cart’, ‘fav’)
时间戳 行为发生的时间戳
行为类型 说明
pv 商品详情页pv,等价于点击
buy 商品购买
cart 将商品加入购物车
fav 收藏商品

数据准备

导包

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from pyecharts import charts as pyc
from pyecharts import options as opts
import warnings
%matplotlib inline
# 忽略警告
warnings.filterwarnings("ignore")
# 修改matplotlib尺寸
plt.rcParams['figure.figsize'] = (20, 8)
# 解决matplotlib中文乱码
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False

数据导入

原数据集有1亿多条,内存不够所以无法全部导入,故此次导入1000万条数据进行分析。

# 数据量过大,这里只选取前1000w行
# 根据官网介绍给定列名
columns = ["userid", 'itemid', 'categoryid', 'type', 'timestamp']
# 使用iterator将数据分块,返回迭代器
data = pd.read_csv("./UserBehavior.csv", iterator=True,
                   chunksize=10000000, names=columns, parse_dates=['timestamp'])
# 将前1000w行数据存放在df                   
df=data.get_chunk(10000000)               

查看一下数据信息,共1000万行,前三个字段都是int,后两个是object,我们需要将时间戳转换为日期格式。
在这里插入图片描述

数据清洗

  1. 将时间戳转为日期。
  2. 数据集说明中写的是本数据集的日期范围是2017年11月25日至2017年12月3日,所以剔除这日期以外的数据。
import time


def get_unixtime(timeStamp):
    formatStr = "%Y-%m-%d %H:%M:%S"
    tmObject = time.strptime(timeStamp, formatStr)
    return int(time.mktime(tmObject))


startTime = get_unixtime("2017-11-25 00:00:00")
endTime = get_unixtime("2017-12-03 00:00:00")

# 保留2017年11月25日至2017年12月3日之间的数据(先减少数据量,再转换可以节省点时间)
df = df[(df.timestamp >= startTime) & (df.timestamp <= endTime)]
# 要注意时区问题,pd.to_datetime转换的默认时区不是中国
df['datetime'] = pd.to_datetime(
    df.timestamp, unit='s', utc=True).dt.tz_convert("Asia/Shanghai")
# 删除时间戳节约内存
df.drop('timestamp', inplace=True, axis=1)
# 将datetime进行拆分成date和hour
df['date'] = df.datetime.dt.date
df['hour'] = df.datetime.dt.hour

保留下来9994427条数据,最早的是2017-11-25 00:00:01,最晚的是2017-12-03 23:59:59。
在这里插入图片描述

数据分析

用户流量类指标

# 取消科学计数法,保留两位小数
pd.set_option("float_format", lambda x: "%.2f" % x)

# 9天总用户量,有操作记录的商品及类目
count_users = df.userid.nunique()
count_itemid = df.itemid.nunique()
count_categoryid = df.categoryid.nunique()
count_user_bought=df[df['type']=='buy'].userid.nunique()
count_user_nobought = count_users-count_user_bought

# 9天总操作记录数
types = ["pv", "cart", "fav", "buy"]
type_s = df.type.value_counts()

# 拼接9天所有、日均、人均指标
type_df = pd.DataFrame([type_s, type_s/9, type_s / count_users],
                       columns=types, index=["all", "aver_day", "aver_user"])

# 购买过的用户总共浏览了几次,购买了几次
type_df.loc['user_bought']=df[df['userid'].isin(df[df['type']=='buy']['userid'].unique())].type.value_counts
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值