电商用户行为数据分析
项目背景
根据淘宝APP平台2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、收藏),对淘宝用户行为进行分析,从而探索淘宝用户的行为模式。
数据来源
https://tianchi.aliyun.com/dataset/dataDetail?dataId=649&userId=1
分析目标
- 用户行为分析
- 用户复购分析
- 漏斗分析
- 用户价值分类
- 销售品类分析
数据读取与展示
#导入库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
from pyecharts.globals import CurrentConfig, NotebookType
from pyecharts import options as opts
from pyecharts.charts import Line
from pyecharts.charts import Bar
数据预处理
import datetime
# 时区转换to_datetime的默认时区不是中国,所以要加8小时
df['time']=pd.to_datetime(df['timestamp'],unit='s')+datetime.timedelta(hours=8)
# 保留2017.11.25-2017.12.3期间的数据
startTime = datetime.datetime.strptime("2017-11-25 00:00:00","%Y-%m-%d %H:%M:%S")
endTime = datetime.datetime.strptime("2017-12-03 23:59:59","%Y-%m-%d %H:%M:%S")
df = df[(df.time>=startTime)&(df.time<=endTime)]
df = df.reset_index(drop=True)
# 按照日期和小时进行时间拆分
df['date'] = df.time.dt.date
df['hour'] = df.time.dt.hour
# 删除时间戳节约内存
df.drop('timestamp', inplace=True, axis=1)
数据分析与可视化
用户行为分析
总体分析
# 9天总用户量,有操作的商品及商品类目
total_unique_users = df.userid.nunique() # 独立访客数UV
total_unique_itemid = df.itemid.nunique() # 有操作的商品
total_unique_categoryid = df.categoryid.nunique() # 有操作的商品类目
user_bought_count = df[df['type']=='buy'].userid.nunique() # 付费用户数
user_nobought_count = total_unique_users - user_bought_count # 非付费用户数
print(f" UV:{total_unique_users}")
print(f" 商品数:{total_unique_itemid}")
print(f" 类目数:{total_unique_categoryid}")
print(f" 付费用户数:{user_bought_count}")
print(f"付费用户占比:{user_bought_count/total_unique_users*100:.2f}%")
UV:97810
商品数:1560525
类目数:7966
付费用户数:66452
付费用户占比:67.94%
在2017年11月25日至2017年12月3日之间的九天内,从中挑选了10000000万行数据,其中在这九天内的用户浏览量为97810次,一共浏览了1560525件商品,可分为7966类。
其中付费的用户数为66452,占所有用户数的67.92%。
操作类型分析
#用户操作类型
type_series = df.type.value_counts()
plt.figure()
plt.pie(x=type_series,labels=type_series.index,autopct='%1.2f%%')
plt.show()
# 9日内各个行为的操作总数,每日平均操作数,每日平均操作用户数记录
type_df=pd.DataFrame([type_series,type_series/9,type_series/total_unique_users],
index=['total','avg_day','avg_user'])
# 付费用户行为记录
type_df.loc['paying_user']=dataframe[dataframe['userid'].isin(dataframe[dataframe['type']=='buy']['userid'])].type.value_counts()
跳失率和复购率
跳失率=只有点击行为的用户/总用户数
其实真正的跳失率应该是只浏览一个页面就离开的访问次数 / 该页面的全部访问次数
这边只是为了突出这些有待发展的客户
复购率=购买2次及以上用户数/总购买用户数
复购率可以分为按客户计算和按交易计算,这里我采用的是按客户计算(周期为9天)
groupby_userid = df.groupby(by='userid')
user_type = groupby_userid.type.value_counts().unstack() # 使用unstack进行不堆叠操作,列方向上的索引转成行方向的索引
# 跳失率
# sum(axis=1)对DataFrame进行横向相加,如果一个userid的pv值==横向相加的和,那就表明他只有点击行为
only_pv_users = user_type[user_type['pv']==user_type.