python 淘宝用户行为数据集 分析与数据源

2 篇文章 0 订阅
2 篇文章 0 订阅

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

源数据来源于: https://tianchi.aliyun.com/dataset/dataDetail?dataId=649&userId=1

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

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

链接: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内部的接口转换。

已经找到解决方法了,重新参考了网上的代码,用: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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值