zoukankan      html  css  js  c++  java
  • 【数据分析项目】淘宝用户行为分析【SQL+Tableau】

    1. 数据说明

    2. 导入数据

    • 从原始数据集导入100000条数据到Navicat新建数据库“userbehavior”中
    • 通过“设计表”修改字段名
    • 字段名修改

       

    • 字段描述

          

    • 查看表的基本数据
    SELECT * FROM userbehavior;

     

    3. 数据处理

    • 所有字段都有用,不需要选择子集等操作

    3.1 删除重复值

    • 查看是否有记录出现多于1次的情况
    SELECT * FROM userbehavior
    GROUP BY User_ID,Item_ID,Category_ID,Behavior,Time_info
    HAVING COUNT(*)>1;

    •  没有重复值

    3.2 缺失值处理

    • 查看每一列的总数
    SELECT COUNT(User_ID),COUNT(Item_ID),COUNT(Category_ID),COUNT(Behavior),COUNT(Time_info)
    FROM userbehavior;

    •  没有缺失值

    3.3 分列处理

    • 利用FROM_UNIXTIME( )函数将时间戳信息Time_info转换为日期和时间
    • 添加新列Date_Time,记录日期和时间
    ALTER TABLE userbehavior ADD COLUMN Date_Time TIMESTAMP(0) NULL;
    UPDATE userbehavior
    SET Date_time = FROM_UNIXTIME(`Time_info`);

    • 添加新列Date,记录日期
    ALTER TABLE userbehavior ADD COLUMN Date char(10) NULL;
    UPDATE userbehavior
    SET Date = FROM_UNIXTIME(`Timestamp`,'%y-%m-%d');

    • 添加新列time,截取Date_time的时间字段作为记录
    ALTER TABLE userbehavior ADD COLUMN Time char(10) NULL;
    UPDATE userbehavior
    SET Time = SUBSTRING(Date_time FROM 12 FOR 8);

    3.4 异常值处理

    • 查看是否有不属于2017年的11.25到12.03之间的数据
    SELECT MAX(Date),MIN(Date)
    FROM userbehavior;

    • 将不符合条件的数据删除
    DELETE FROM userbehavior WHERE Date >'17-12-03' OR Date <'17-11-25';

    •  有44行数据被删除

    4. 数据分析

    • 分析目的
      • 了解用户的生命周期情况和行为偏好,从而做到更精准化的推荐
      • 分析如何更好的提高购买用户比例
      • 通过RFM模型分析出有价值的客户并提出相应的建议
    • 分析方法
      • 利用SQL分析数据,获得分析结果并导出至Excel,利用Tableau实现数据可视化
    • 分析思路

     

    4.1 数据总览

    (1)数据整体情况

    SELECT COUNT(DISTINCT User_ID) AS 用户数,
    COUNT(DISTINCT Item_ID) AS 商品总数,
    COUNT(DISTINCT Category_ID) AS 商品种类数,
    COUNT(Behavior) AS 行为总数
    FROM userbehavior;

    (2)用户行为整体情况

    • 创建行为数据视图并按每个用户的行为数量倒序排列
    CREATE VIEW 用户行为数据 AS
    SELECT User_ID,COUNT(Behavior) AS 用户行为总数,
    SUM(IF(Behavior='pv',1,0)) AS 点击数,
    SUM(IF(Behavior='fav',1,0)) AS 收藏数,
    SUM(IF(Behavior='cart',1,0)) AS 加购数,
    SUM(IF(Behavior='buy',1,0)) AS 购买数
    FROM userbehavior
    GROUP BY User_ID
    ORDER BY 用户行为总数 DESC;

    • 共有983条数据

    4.2 用户生命周期分析

    (1)用户获取情况

    • 通过查询日新增用户数分析用户的获取情况
    CREATE VIEW 分组 AS
    SELECT User_ID,MIN(Date) AS fd
    FROM userbehavior
    GROUP BY User_ID;
    
    SELECT fd,COUNT(User_ID)
    FROM 分组
    GROUP BY fd;

    • 11.25 日用户新增数量最多,推测有新的促销活动吸引了新用户
    • 整体用户增加数都处于较低的状态,推测目前的推广渠道效果一般,应该制定更加有效的策略

    (2)用户活跃情况

    • 通过计算UV、PV等指标和日变化趋势查看用户的活跃情况

         ① 总体独立访客数UV、点击数PV、人均浏览次数、成交量

    • 人均浏览次数 = 点击数 / 独立访客数
    SELECT COUNT(DISTINCT User_ID) AS 独立访客数,
    SUM(IF(Behavior='pv',1,0)) AS 点击数,
    SUM(IF(Behavior='pv',1,0))/COUNT(DISTINCT User_ID) AS 人均浏览次数,
    SUM(IF(Behavior='buy',1,0)) AS 成交量
    FROM userbehavior;

        ② 日活跃情况

    SELECT Date,COUNT(DISTINCT User_ID) AS 日独立访客数,
    SUM(IF(Behavior='pv',1,0)) AS 日点击数,
    SUM(IF(Behavior='pv',1,0))/COUNT(DISTINCT User_ID) AS 日人均浏览次数,
    SUM(IF(Behavior='buy',1,0)) AS 日成交量
    FROM userbehavior
    GROUP BY Date;

     

    • 日独立访客数和日点击数的增长趋势基本相同,在11.27和11.30号有下降的趋势
    • 日成交量在11.27和11.30号呈现增长的趋势,推测用户在此期间直接购买商品的行为增加

     

    •  日人均浏览趋势在12.01号达到峰值,可能为双12或其他活动宣传导致用户浏览量急速增加

    (3)用户留存情况

        ① 用户次日、3日、5日、7日留存人数

    • 第一天(17-11-25)活跃人数
    CREATE TABLE retention AS 
    SELECT COUNT(DISTINCT User_ID) AS 第一天活跃人数
    FROM userbehavior
    WHERE Date = '17-11-25';
    • 次日留存人数
    ALTER TABLE retention ADD COLUMN 第二天留存人数 INT;
    UPDATE retention
    SET 第二天留存人数 = (SELECT COUNT(DISTINCT User_ID)
                        FROM userbehavior
                        WHERE Date = '17-11-26'
                        AND User_ID IN (SELECT DISTINCT User_ID
                                        FROM userbehavior
                                        WHERE Date = '17-11-25'));
    • 最终留存人数计算结果

        ② 留存率

    SELECT CONCAT(ROUND(100*第二天留存人数/第一天活跃人数,2),'%') AS 次日留存率,
           CONCAT(ROUND(100*第三天留存人数/第一天活跃人数,2),'%') AS 第3日留存率,
           CONCAT(ROUND(100*第五天留存人数/第一天活跃人数,2),'%') AS 第5日留存率,
           CONCAT(ROUND(100*第七天留存人数/第一天活跃人数,2),'%') AS 第7日留存率
    FROM retention;

    • 用户在7日之后还保持75.97%的留存率,处于比较高的状态

        ③ 跳失率

    • 只浏览了一个页面的访客数 / 总访客数
    SELECT User_ID FROM 用户行为数据
    WHERE 用户行为总数=1;

    • 不存在只浏览一次的用户,跳失率为0
    • 结合上述的留存率,说明淘宝的忠实用户比较多

    (4)用户购买情况

        ① 商品、购买数量及次数

    • 商品总数
    SELECT COUNT(DISTINCT Item_ID) AS 商品数
    FROM userbehavior;

    • 购买商品数
    SELECT COUNT(DISTINCT Item_ID) AS 购买商品数
    FROM userbehavior
    WHERE Behavior = "buy";

    • 购买次数和商品数的对应关系
    SELECT a.购买次数,COUNT(a.Item_ID) AS 商品数
    FROM (SELECT Item_ID,COUNT(User_ID) AS 购买次数
          FROM userbehavior
          WHERE Behavior="buy"
          GROUP BY Item_ID) AS a
    GROUP BY 购买次数
    ORDER BY 购买次数 DESC;

    • 商品共有64440个,用户购买的商品有1984个,其中只购买一次的有1881种
    • 只够买一次的商品占很大比例,说明商品销售不是靠爆款

        ② 复购率

    • 购买次数>1 / 购买次数>0
    SELECT SUM(IF(购买数 > 1,1,0)) AS 复购次数,
    SUM(IF(购买数 > 0,1,0)) AS 购买次数,
    CONCAT(ROUND((SUM(IF(购买数 > 1,1,0)) * 100/ SUM(IF(购买数 > 0,1,0))),2),'%')
    AS 复购率
    FROM 用户行为数据;

    • 复购率大约66%,说明淘宝足够吸引人,并且能留住用户 

    4.3 用户行为路径分析

    (1)行为转化漏斗(点击行为到其他行为的转化率分别为多少)

    SELECT 
    SUM(IF(Behavior='pv',1,0)) AS 点击,
    SUM(IF(Behavior='fav',1,0)) AS 收藏,
    SUM(IF(Behavior='cart',1,0)) AS 加购,
    SUM(IF(Behavior='buy',1,0)) AS 购买
    FROM userbehavior;

    • 可以看出,点击过后的行为比例最高的为加购,推测情况为对同一种商品货比三家,倾向于加入购物车
    • 收藏行为少于加购,可能因为收藏行为不能直接结算
    • 购买行为所占比例仅为2.34%,表明点击后用户大量流失,如何减少点击行为到购买行为的流失将作为分析方向

    (2)用户转化漏斗

    SELECT SUM(IF(点击数>0,1,0)) AS 点击用户数,
    SUM(IF(收藏数>0,1,0)) AS 收藏用户数,
    SUM(IF(加购数>0,1,0)) AS 加购用户数,
    SUM(IF(购买数>0,1,0)) AS 购买用户数
    FROM 用户行为数据;

    • 收藏用户数所占比例没有加购高
    • 点击后的用户会有68.47%的付费,购买转化率不错,可以进而分析哪种购物方式促进了购买用户的转化

    (3)四种不同行为路径

    • 购买行为可以由大致四种导致:点击+购买、点击+加购+购买、点击+收藏+购买、点击+收藏加购+购买
    • 点击用户数为980

        ① 点击→购买

    SELECT SUM(IF(购买数>0,1,0)) AS 购买用户数1
    FROM 用户行为数据
    WHERE 收藏数=0 AND 加购数=0;

        ② 点击→加购→购买

    SELECT SUM(IF(购买数>0,1,0)) AS 购买用户数2,
    SUM(IF(加购数>0,1,0)) AS 加购用户数2
    FROM 用户行为数据
    WHERE 收藏数=0 AND 加购数<>0;

        ③ 点击→收藏→购买

    SELECT SUM(IF(购买数>0,1,0)) AS 购买用户数2
    FROM 用户行为数据
    WHERE 收藏数=0 AND 加购数<>0;

        ④ 点击→加购收藏→购买

    SELECT SUM(IF(购买数>0,1,0)) AS 购买用户数4,
    SUM(IF(收藏数>0,1,0)) AS 收藏用户数4,
    SUM(IF(加购数>0,1,0)) AS 加购用户数4
    FROM 用户行为数据
    WHERE 收藏数<>0 AND 加购数<>0;

    (4)不同行为路径的转化漏斗图

    • 可以看出,用户点击后更倾向于加入购物车,直接购买的人比较少
    • 通过“点击+加购+购买”路径,最后的购买人数最多
    • 通过”点击+收藏加购+购买“的最终购买转化效果最高,商家可以通过增加此部分用户所占比例提高销量
    • 比如收藏可有优惠,促进加购消费者进行收藏操作

    4.4 用户偏好分析

    (1)用户行为时间偏好分析

         ① 用户行为习惯(按天)
    CREATE VIEW 用户行为习惯分布(日) AS
    SELECT Date,COUNT(Behavior) AS "用户行为数",
    SUM(IF(Behavior='pv',1,0)) AS "点击",
    SUM(IF(Behavior='fav',1,0)) AS "收藏",
    SUM(IF(Behavior='cart',1,0)) AS "加购",
    SUM(IF(Behavior='buy',1,0)) AS "购买"
    FROM userbehavior
    GROUP BY Date
    ORDER BY Date;

     

    • 点击和加购的趋势基本相同,在12.02号这一天都达到峰值状态
    • 收藏在12.03处于较高的状态
    • 用户的购买行为主要集中在11.27、11.30及12.02之后
         ② 用户行为习惯(按时)
    CREATE VIEW 用户行为习惯分布(时) AS
    SELECT SUBSTRING(Time FROM 1 FOR 2),COUNT(Behavior) AS "用户行为数",
    SUM(IF(Behavior='pv',1,0)) AS "点击",
    SUM(IF(Behavior='fav',1,0)) AS "收藏",
    SUM(IF(Behavior='cart',1,0)) AS "加购",
    SUM(IF(Behavior='buy',1,0)) AS "购买"
    FROM userbehavior
    GROUP BY SUBSTRING(Time FROM 1 FOR 2)
    ORDER BY SUBSTRING(Time FROM 1 FOR 2);

    • 购买用户集中活跃峰值在20时到22时,所有的行为数值都处于比较高的状态
    • 推测20时大多为下班时间,用户都处于休息状态,空闲时间较多,点击和加购行为明显提升,购买行为也处于峰值状态。
    • 商家可以利用此时间段实施一些优惠活动,吸引消费者,获得更好的购买率

    (2)用户行为偏好Top 20产品分析

    SELECT Category_ID,SUM(IF(Behavior="pv",1,0)) AS 点击数
    FROM userbehavior
    GROUP BY Category_ID
    ORDER BY 点击数 DESC
    LIMIT 20;
         ① 点击Top 20产品

      

         ② 加购Top 20产品

     

         ③ 收藏Top 20产品

     

         ④ 购买Top 20产品

     

    • 创建每个行为Top20商品的视图,计算不同行为的商品重叠情况
    CREATE VIEW 点击 AS 
    SELECT Category_ID,SUM(IF(Behavior="pv",1,0)) AS 点击数
    FROM userbehavior
    GROUP BY Category_ID
    ORDER BY 点击数 DESC
    LIMIT 20;
    
    SELECT COUNT(点击.Category_ID) FROM 点击
    INNER JOIN 加购 ON 点击.Category_ID = 加购.Category_ID
    • 点击和加购相同的有15种,点击和收藏相同的有18种
    • 加购和购买相同的有14种,收藏和购买相同的有11种
    • 对于行为重叠的商品种类应该更加关注
    • 根据行为喜欢的Top产品,适时的推出一些优惠活动,可以更加有效的提高用户的收藏加购行为

    4.5 用户价值分析

    (1)RFM模型简介

    •  采用RFM模型进行用户价值分析
    • 由于本数据集不存在金额字段,所以只从RF两个维度进行分析
      • R:最近一次购买时间(采用12.03和最近一次购买的时间间隔作为计算依据)
      • F:消费频次(采用用户购买次数作为计算依据)
    • 一般来说,R和F的值越大,说明用户的价值越高

    (2)R值的计算

    • 数据集的时间跨度为2017年的11.25到12.03,共9天
    • 定义R值的划分规则:
      • 间隔时间 > 7天:1
      • 间隔时间 5-7天:2
      • 间隔时间 3-4天:3
      • 间隔时间 0-2天:4
    SELECT User_ID,
    (CASE WHEN Rtime>7 THEN 1
          WHEN Rtime BETWEEN 5 AND 7 THEN 2
          WHEN Rtime BETWEEN 3 AND 4 THEN 3
          WHEN Rtime BETWEEN 0 AND 2 THEN 4
     ELSE NULL END) AS R值
     FROM (SELECT User_ID,DATEDIFF('17-12-03',MAX(Date)) AS Rtime
           FROM userbehavior
           WHERE Behavior='buy'
           GROUP BY User_ID) AS 购买时间间隔
    ORDER BY R值 DESC;

    (3)F值的计算

    SELECT User_ID,COUNT(Behavior) AS 购买次数
    FROM userbehavior
    WHERE Behavior='buy'
    GROUP BY User_ID
    ORDER BY 购买次数 DESC;

    • 可以看出,购买次数最多的为43次
    • 定义F值的划分规则
      • 购买次数  1-10:1
      • 购买次数11-20:2
      • 购买次数21-30:3
      • 购买次数   >30:4
    SELECT User_ID,
    (CASE WHEN Btime BETWEEN 1  AND 10 THEN 1
          WHEN Btime BETWEEN 11 AND 20 THEN 2
          WHEN Btime BETWEEN 21 AND 30  THEN 3
          WHEN Btime >30 THEN 4
     ELSE NULL END) AS F值
     FROM (SELECT User_ID,COUNT(Behavior) AS Btime
           FROM userbehavior
           WHERE Behavior='buy'
           GROUP BY User_ID) AS 购买次数
     ORDER BY F值 DESC;

    (4)用户划分

    • 将用户按照以下规则进行划分:
    F(3-4) 重要保持用户 重要价值用户
    F(1-2) 重要挽留用户 重要发展用户
      R(1-2) R(3-4)
    • 创建r_value和f_value分别记录之前计算的R值和F值
    • 将R值和F值合并到一起
    CREATE VIEW 用户价值分析 AS
    SELECT r.User_ID,R值,F值
    FROM r_value AS r JOIN f_value AS f
    ON r.User_ID = f.User_ID

    • 计算R值和F值的平均值
    SELECT AVG(R值), AVG(F值)
    FROM 用户价值分析;

    • 查看不同用户对应的份额
    CREATE VIEW 用户类型 AS
    SELECT User_ID,
    (CASE WHEN R值>3.3413 AND F值>1.0298 THEN "重要价值用户"
          WHEN R值<3.3413 AND F值>1.0298 THEN "重要保持用户"
          WHEN R值>3.3413 AND F值<1.0298 THEN "重要发展用户"
          WHEN R值<3.3413 AND F值<1.0298 THEN "重要挽留用户"
     END) AS user_type
     FROM 用户价值分析
    SELECT user_type,COUNT(User_ID) AS 人数
    FROM 用户类型
    GROUP BY user_type

       

    (5)用户价值分析结论

    • 重要发展用户占比最高,这些用户购买时间间隔较短,但购买次数比较低,重点应该提升消费频次
    • 重要挽留客户占比第二,购买次数少,购买时间久远,是潜在客户,应该做精准化的营销
    • 重要价值客户占比第三,需要重点关注,属于忠实买家,应提供定期的VIP服务
    • 重要保持用户占比最少,购买次数多,但最近没有买,应该采取措施及时召回

    5. 总结

    • 日新增用户数不是很多,推广渠道的效果一般,12.02日的增长明显,推测可能为活动影响
    • 用户留存率较高,跳失率为0,复购率也较高,用户的忠诚度较高
    • 购买一次的用户占比最多,说明淘宝的销售情况并不是依靠爆款产品
    • 用户从点击到最后的购买有大量的流失情况,建议通过活动或优惠券的方式吸引用户购买
    • 通过加购收藏方式的用户最终购买的可能性最大,可以通过收藏有礼的方式提高收藏行为
    • 用户多活跃在20时到22时,建议在此时间段内进行推广,使效果最大化
    • 重要价值用户占比较少,大多数为重要发展和重要挽留客户,建议针对不同的人群,进行精准化营销
  • 相关阅读:
    RHEL 6.5 安装Docker
    sar命令
    Linux 安装部署 Redis
    hugepage设置
    pycharm使用
    oracle如何保证数据一致性和避免脏读
    转:数据库实例自动crash并报ORA-27157、ORA-27300等错误
    oracle安装内核参数设置
    外部表
    LNMP环境搭建
  • 原文地址:https://www.cnblogs.com/tuzinn/p/13905690.html
Copyright © 2011-2022 走看看