美文网首页数据分析
淘宝用户行为分析

淘宝用户行为分析

作者: 一纸行 | 来源:发表于2019-03-04 23:16 被阅读0次

    淘宝用户行为分析

    淘宝是中国深受欢迎的电商平台,经常网购的人少不了逛逛淘宝,随便看看有什么想买的或者有目的想买什么,在逛淘宝的过程中,我们会留下足迹。通过这些足迹,也就是用户的行为,我们可以对这些行为进行分析挖掘。

    使用的工具是Python,主要用到了Pandas,Matplotlib,Seaborn和Pyeacharts这几个包。

    数据来源于阿里云天池:https://tianchi.aliyun.com/dataset/dataDetail?dataId=46

    1 提出问题

    本文主要围绕这几个点展开:

    1. 每天的浏览量(PV)
    2. 每天的访客量(UV)
    3. 每天的人均访问量
    4. 用户行为的转化漏斗
    5. 从时间的维度分析用户行为

    2 数据读取与数据探索

    2.1 数据说明

    数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。

    数据主要包括5个字段,用户ID,商品ID,商品类目ID,行为类型,时间戳。一共有100,150,807条记录。

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

    2.2 数据读取

    总共的数据有1亿左右,虽然pandas可以处理这么多的数据,但是电脑配置不够,所以这里只取了1千万条数据。使用pandas读取数据只需要几秒钟的时间,Excel大半天都打不开。

    df = pd.read_csv('UserBehavior.csv', header=None, names=['用户ID', '商品ID', '商品类目ID', '行为类型', '时间戳'], nrows=10000000)
    

    2.3 数据探索

    查看数据信息

    df.info()
    

    1千万的数据大小有381.5M,要是全部数据大小差不多有4G

    查看是否有缺失值

    df.isnull().any()
    

    没有缺失值,数据还是挺干净的。

    查看数据的总体情况

    df.describe()
    

    时间戳最小值存在负值,这个是有问题,在数据清洗阶段,需要清洗。

    查看前5行的数据

    df.head(5)
    

    3 数据清洗

    由于数据还是比较干净,这里对时间进行处理就好了。

    start_time = datetime.datetime(2017,11,25)
    end_time = datetime.datetime(2017,12,4)
    start_ts = time.mktime(start_time.timetuple())
    end_ts = time.mktime(end_time.timetuple())
    
    df = df[(int(start_ts) <= df['时间戳']) & (df['时间戳'] <= int(end_ts))]
    

    数据在2017年11月25日至2017年12月3日之间,在这个区间之外的不要,负值自然也就排除掉了。

    4 数据分析

    4.1 每天的流量

    df['时间'] = df['时间戳'].apply(lambda unix_ts: datetime.datetime.fromtimestamp(unix_ts))
    df['日期'] = pd.to_datetime(df['时间'].apply(lambda unix_ts: unix_ts.strftime('%Y-%m-%d')))
    s_flow = df[df['行为类型'] == 'pv'].groupby(['日期'])['行为类型'].count()
    
    plt.figure(figsize=(10, 6))
    plt.subplot(1, 1, 1)
    plt.plot(s_flow)
    plt.xlabel('日期', fontsize=16)
    plt.ylabel('浏览量', fontsize=16)
    plt.tick_params(labelsize=12)
    plt.xticks(s_flow.index, rotation=30)
    plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y/%m/%d'))
    plt.grid(axis='x')
    plt.title('每天浏览量折线图', fontsize=18)
    plt.show()
    
    ![
    ![

    从图中可以看出,点击量在11月25日到12月1日这7天中,访问量在70000左右,12月2日和12月3日这两天浏览量显然高于其他几天,虽然这两天是星期六和星期日,但是不能直接判定是周末的原因,因为11月25日和11月26日这两天也是周末,浏览量只是略高,具体需要进一步分析。

    4.2 每天的访客数

    s_pv = df[df['行为类型'] == 'pv'].drop_duplicates(subset=['日期', '用户ID']).groupby(['日期'])['用户ID'].count()
    
    plt.figure(figsize=(10, 6))
    plt.subplot(1, 1, 1)
    plt.plot(s_pv)
    plt.xlabel('日期', fontsize=16)
    plt.ylabel('访客数', fontsize=16)
    plt.tick_params(labelsize=12)
    plt.xticks(s_pv.index, rotation=30)
    plt.yticks(range(0, 110000, 10000))
    plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y/%m/%d'))
    plt.grid(axis='x')
    plt.title('每天访客数折线图', fontsize=18)
    plt.show()
    

    12月2日和12月3日的访客数高于前面一个星期,这两天访问量增加,可能是这两天有活动,带来的访问量。浏览量的增加不一定是访客数的增加,具体的情况还需要进一步进行分析。

    4.3 人均浏览量

    s_mpv = s_flow / s_pv
    
    plt.figure(figsize=(10, 6))
    plt.subplot(1, 1, 1)
    plt.plot(s_mpv)
    plt.xlabel('日期', fontsize=16)
    plt.ylabel('平均流量', fontsize=16)
    plt.tick_params(labelsize=12)
    plt.xticks(s_mpv.index, rotation=30)
    plt.yticks(range(0, 18, 2))
    plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y/%m/%d'))
    plt.grid(axis='x')
    plt.title('每天人均浏览量折线图', fontsize=18)
    plt.show()
    

    每天的人均浏览量在13-14之间,一直都是在这个水平,所以可以确定,浏览量的增加就是新增的访问量带来的。

    4.4 转化率

    pv = df[df['行为类型'] == 'pv']['用户ID'].count()
    cart = df[df['行为类型'] == 'cart']['用户ID'].count()
    fav = df[df['行为类型'] == 'fav']['用户ID'].count()
    buy = df[df['行为类型'] == 'buy']['用户ID'].count()
    
    attr = ["购买:%.2f%%" % (buy / pv * 100), "收藏或加入购物车: %.2f%%" % ((fav+cart) / pv * 100),"点击量:100%"]
    value = [18, 36, 54]
    funnel = Funnel("转化率", width=600, height=400, title_pos='center')
    funnel.add(
        "商品",
        attr,
        value,
        is_label_show=True,
        label_pos="inside",
        label_text_color="#fff",
        is_legend_show = False
    )
    funnel
    

    用户点击后收藏或加购物车的概率为9.51% ,而最后真正购买的只有 2.23%,购买转化率比较低,存在的增长空间。

    4.5 从时间维度分析用户行为

    4.5.1 一天中的用户行为

    df['时间段'] = df['时间'].apply(lambda unix_ts: unix_ts.hour)
    s_hour = df.groupby(['行为类型', '时间段'])['行为类型'].count()
    
    plt.figure(figsize=(12, 8))
    s_hour['pv'].plot(color='r', label='点击')
    plt.legend(fontsize=16, loc='upper right')
    plt.xticks(s_hour['pv'].index, ['0时','1时','2时','3时','4时','5时','6时','7时','8时','9时','10时','11时','12时','13时','14时','15时','16时','17时','18时','19时','20时','21时','22时','23时'], fontsize=12)
    plt.yticks(range(100000, 1000000, 100000), fontsize=14)
    plt.grid(b='False')
    plt.xlabel('')
    plt.twinx()
    s_hour['fav'].plot(color='b', label='收藏')
    s_hour['cart'].plot(color='k', label='加入购物车')
    s_hour['buy'].plot(color='g', label='购买')
    plt.xlabel('')
    plt.xticks(s_hour['pv'].index, ['0时','1时','2时','3时','4时','5时','6时','7时','8时','9时','10时','11时','12时','13时','14时','15时','16时','17时','18时','19时','20时','21时','22时','23时'], fontsize=12)
    plt.yticks(range(10000, 110000, 10000), fontsize=14)
    plt.grid(b='False')
    plt.legend(fontsize=16, loc='upper left')
    plt.title('一天中用户行为分布折线图', fontsize=18)
    

    4种行为的趋势都是一样的,主要用户活跃主要集中在10-23点,在19-23这5个小时达到顶峰,有活动可以集中在这个时间段,这个时间段用户活跃度是最高的。凌晨的那段时间大部分人处于睡眠状态,活跃度低是意料之中的。

    4.5.2 一周中的用户行为

    df['星期'] = df['时间'].apply(lambda unix_ts: unix_ts.weekday())
    s_weekday = df['2017-11-27' <= df['时间']].groupby(['行为类型', '星期'])['行为类型'].count()
    
    plt.figure(figsize=(12, 8))
    s_weekday['pv'].plot(color='r', label='点击')
    plt.legend(fontsize=16, loc='upper right')
    plt.xticks(s_weekday['pv'].index, ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'], fontsize=16)
    plt.yticks(range(900000, 1400000, 100000), fontsize=14)
    plt.grid(b='False')
    plt.xlabel('')
    plt.twinx()
    s_weekday['fav'].plot(color='b', label='收藏')
    s_weekday['cart'].plot(color='k', label='加入购物车')
    s_weekday['buy'].plot(color='g', label='购买')
    plt.xlabel('')
    plt.xticks(s_weekday['pv'].index, ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'], fontsize=16)
    plt.yticks(range(20000, 110000, 10000), fontsize=14)
    plt.grid(b='False')
    plt.legend(fontsize=16, loc='upper left')
    plt.title('一周中用户行为分布折线图', fontsize=18)
    

    数据中一共9天,除去两天,剩下是一个完整的星期。我们从图中可以看出,星期六和星期日这两天活跃度明显增高,那么是不是可以就可以得出结论:周末休息,使用淘宝的人数增加。合情合理,周末人们都有时间,但是前面在每天的浏览量分析那里,我们知道了前面两天也是周末,但是浏览量跟后面5个工作日差距不大。并不能得出周末用户活跃度大这个结果,在这个数据集中看不出来。

    结论

    1. 2017-12-02和2017-12-03浏览量骤然上升,对比上一个周末,新增的访问量是明显,说明这两天的活动是有效果的。
    2. 最终的转化率只有2.23%,用户点击后收藏或加购物车的转化率在9.51% ,可用通过活动进一步促进用户的购买。
    3. 从时间看,用户主要活跃在白天的时间和晚上,从10点-23点,顶峰是在19点-23点。但是周末活跃度高,并不能得出结论是周末的原因。

    相关文章

      网友评论

        本文标题:淘宝用户行为分析

        本文链接:https://www.haomeiwen.com/subject/ikcguqtx.html