利用Python对淘宝用户行为进行分析


可以注册他的账号之后,免费下载。

以下是我下载的数据分享:

链接:https://pan.baidu.com/s/1uGddx2BzRdNencKnyN4quQ 
提取码:puam

 

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

 

数据集介绍

文件名称

说明

包含特征

UserBehavior.csv

包含所有的用户行为数据

用户ID,商品ID,商品类目ID,行为类型,时间戳

UserBehavior.csv

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

列名称

说明

用户ID

整数类型,序列化后的用户ID

商品ID

整数类型,序列化后的商品ID

商品类目ID

整数类型,序列化后的商品所属类目ID

行为类型

字符串,枚举类型,包括('pv', 'buy', 'cart', 'fav')

时间戳

行为发生的时间戳

注意到,用户行为类型共有四种,它们分别是

行为类型

说明

pv

商品详情页pv,等价于点击

buy

商品购买

cart

将商品加入购物车

fav

收藏商品

关于数据集大小的一些说明如下

维度

数量

用户数量

987,994

商品数量

4,162,024

商品类目数量

9,439

所有行为数量

100,150,807

活跃度整理:
按一日的时刻来统计哪个时间段活动程度,从所有的数据里面取了:1万条数据进行统计:

如下图所示:

def time_data():
    data=get_data()
    #转换时间
    data['time']=pd.to_datetime(data['timestamp'],unit='s')
    # 先设置索引再清洗数据
    data.set_index('time',inplace=True)
    data=data.drop(['timestamp'],axis=1)
    data=data['2017-11-25':'2017-12-3']
    data.reset_index(inplace=True)
    # 提取,周,日,时
    data['week']=data['time'].dt.weekday
    data['day']=data['time'].dt.day
    data['hour']=data['time'].dt.hour
    data['date']=data['time'].dt.date
    data.drop_duplicates(['user_id','time','category_id'],keep='first',inplace=True)
    return data

# 天不同时间段的活跃度
def day_report():
    data=time_data()
    # 根据hour分组,以用户id为主计算每个用户活跃次数
    day_active=data.groupby('hour')['user_id'].count().reset_index().rename(columns={'user_id':'Count'})
    # user_id 表名?
    day_data=day_active
#     打印柱状图
    x=day_data.hour.tolist()
    y=day_data.Count.tolist()

    plt.figure(figsize=(20,8),dpi=80)
    day_plt=plt.bar(range(len(x)),y,width=0.3)
    # x刻度
    x_ticks=('{}点'.format(i) for i in x)
    plt.xticks(x)
    plt.xlabel('时间点')
    plt.ylabel('用户活跃数')
    plt.title('日活跃度统计分析表')
    # 设置每一柱的具体值
    for dd in day_plt:
        d_pat=dd # type: matplotlib.patches.Rectangle
        height_value = d_pat.get_height()
       
    plt.text(d_pat.get_x()+d_pat.get_width()/2,height_value+10,str(height_value),ha='center',color='r')
    plt.show()

按以上的时刻统计出来的活跃程序不正常,晚上下班的活跃程序不如三更半夜。不知道哪里出错了。?????

问题分析 :时间戳按子午线时间存储,需要转换成北京时间东8区的,需要加8个小时。调用python内部的接口转换。

基于Java的电商用户行为分析_时间戳

已经找到解决方法了,重新参考了网上的代码,用:time.localtime,这个方法转换时间如下:重写的time_data()方法:

def time_data():
    data=get_data()
    data.drop_duplicates(subset=['user_id','goods_id','timestamp'],
                          keep='first',inplace=True)


    def stramp2time(x):
        return time.strftime('%Y-%m-%d %H',time.localtime(x))

    data['date']=data['timestamp'].apply(stramp2time) #将时间戳转化为时间元组,再转换为标准的时间:time.localtime
    data['date']=pd.to_datetime(data['date']) # 转换为datetiem格式
    data['week']=data['date'].dt.weekday
    data['day'] = data['date'].dt.day
    data['hour'] = data['date'].dt.hour
    #  获取时间是17.11.25至17.12.3之间的数据,去掉无效数据
    tl=datetime.datetime(year=2017,month=11,day=25)
    th = datetime.datetime(year=2017,month=12,day=3)
    data = data[(data.date>=tl) & (data.date<=th)]
    return data

生成的日活跃度的数据流正常了。