DLF数据探索快速入门-淘宝用户行为分析

更新时间:
复制为 MD 格式

DLF产品(数据湖构建)提供元数据抽取和数据探索的功能,本文介绍如何通过DLF完成对淘宝用户行为样例的分析。

前提条件

已创建OSS Bucket。如未创建,请参见创建存储空间

操作流程

  1. 服务开通:开通阿里云账号及DLFOSS相关服务。

  2. 样例数据集下载和导入:下载样例数据(CSV文件),并上传至OSS。

  3. DLF数据抽取:使用DLF数据抽取,自动识别文件Schema并创建元数据表。

  4. DLF数据探索:使用DLF数据探索,对用户行为进行分析,包括用户活跃度、漏斗模型等。

数据说明

本次测试的数据集来自阿里云天池比赛中使用的淘宝用户行为数据集,为了提高性能,我们做了一定的裁剪。数据集中以CSV的格式存储了用户行为及商品样例数据。

淘宝用户行为数据集介绍:https://tianchi.aliyun.com/dataset/dataDetail?dataId=46

数据范围:2014121日 - 2014127

数据格式:

user

字段

字段说明

提取说明

user_id

用户标识

抽样&字段脱敏(非真实ID)

item_id

商品标识

字段脱敏(非真实ID)

behavior_type

用户对商品的行为类型

包括浏览、收藏、加购物车、购买,对应取值分别是1、2、3、4。

user_geohash

用户位置的空间标识,可以为空

由经纬度通过保密的算法生成

item_category

商品分类标识

字段脱敏 (非真实ID)

time

行为时间

精确到小时级别

item

字段

字段说明

提取说明

item_id

商品标识

抽样&字段脱敏(非真实ID)

item_ geohash

商品位置的空间标识,可以为空

由经纬度通过保密的算法生成

item_category

商品分类标识

字段脱敏 (非真实ID)

详细流程

第一步:开通DLFOSS服务

  1. 登录数据湖构建控制台

  2. 开通DLF服务及其依赖OSS服务,并完成授权。(如已开通可直接跳过)。

    1. 若之前未开通过DLF服务,会提示用户开通服务。单击免费开通数据湖构建

    2. 开通服务后,返回DLF控制台页面。会提示开通OSS服务,以及授予DLF访问依赖数据源的权限。单击开通,完成OSS开通及授权。

  3. 开通完成后,可进入DLF控制台主页

第二步:将需要分析的数据文件上传至OSS

  1. 下载样例代码,放在本地磁盘。

    解压后得到文件夹:user_behavior_data,包含itemuser两个文件夹,里面分别包含了各自的CSV数据文件。本次分析主要集中在user文件中,数据内容如下。

    user_id,item_id,behavior_type,user_geohash,item_category,time
    98047837,232431562,1,,4245,2014-12-06 02
    97726136,383583590,1,,5894,2014-12-09 20
    98607707,64749712,1,,2883,2014-12-18 11
    98662432,320593836,1,96nn52n,6562,2014-12-06 10
    98145908,290208520,1,,13926,2014-12-16 21
    93784494,337869048,1,,3979,2014-12-03 20
    94832743,105749725,1,,9559,2014-12-13 20
    95290487,76866650,1,,10875,2014-11-27 16
    96610296,161166643,1,,3064,2014-12-11 23
    100684618,21751142,3,,2158,2014-12-05 23
    100509623,266020206,3,tfvomgk,4923,2014-12-08 17
    101781721,139144131,1,9rgt162,3424,2014-12-13 21
    103891828,255365467,1,96sjmho,552,2014-12-01 13
    101260672,212072908,1,95q0is4,10984,2014-12-12 11
  2. 将解压后的user_behavior_data文件夹上传至OSS。详情请参见简单上传

    上传后目录结构中,itemuser为两个表的数据文件夹。

    说明

    需删除文件夹中的.DS_Store文件。

第三步:在DLF上抽取元数据

  1. 登录数据湖构建控制台

  2. 创建数据库。

    1. 在左侧菜单栏,选择元数据 > 元数据管理

    2. 单击数据库页签,选择目标数据目录,单击新建数据库

    3. 配置以下数据库信息,单击确定

      • 所属数据目录选择所属数据目录。

      • 数据库名称:输入数据库名称。

      • 数据库描述:可选,输入数据库描述。

      • 选择路径选择上一步中存有用户行为分析数据user_behavior_dataOSS路径。

    4. 数据库创建成功。

      元数据管理页面的数据库页签中,dlf_demo数据目录下显示数据库defaultdemo_db,可通过操作列查看对应的表、函数或进行编辑和删除。

  3. 进行DLF数据抽取。

    1. 在左侧导航栏,单击元数据 > 元数据抽取

    2. 在元数据抽取页面,单击新建抽取任务。参数配置详情请参见元数据抽取

    3. 填写抽取源相关配置,单击下一步

      配置示例:抽取任务名称设置为dif_demo_extractOSS路径选择目标数据路径(如oss://<Bucket名称>/dif/user_behavior_data/),解析格式选择csv。在csv文件配置区域,字段分隔符选择逗号(,)表头发现选择首行为表头引用标识选择英文单引号(')

    4. 选择要使用的目标数据库,单击下一步

      设置目标信息 页面,选择 所属数据目录(例如 dlf_demo)和 目标数据库(例如 demo_db),按需填写 目标数据表前缀。在 抽取任务发现表字段更新时 中选择处理策略(如 忽略更新,不修改任何表);在 如何处理OSS中发现已删除对象 中选择处理策略(如 忽略更新,不删除任何表)。完成后单击 下一步

    5. 设置抽取任务信息。

      • RAM 角色:默认为开通阶段已经授权的“AliyunDLFWorkFlowDefaultRole”。

      • 执行策略:选择手动执行

      • 抽取策略:选择全量抽取扫描全量数据文件,在数据规模比较大时,作业消耗时间长,抽取结果更准确。

    6. 核对信息后,单击保存并立即执行

      确认页面分为三个区块:数据源信息(包括抽取任务名称、OSS路径、解析格式等)、目标信息(包括所属数据目录、目标数据库等)和任务配置(包括RAM角色、抽取策略、执行策略等)。

    7. 系统会跳转到元数据抽取列表页面,新建的任务开始创建并自动运行。在数据规模比较大时,作业消耗时间长。

      待任务运行成功后,鼠标移到状态栏的问号图标,可看到已经成功创建了两张元数据表。

      浮层显示抽取成功的两张表分别为 demo_db.itemdemo_db.user

  4. 查询数据表信息。

    1. 单击浮层中的数据库,单击表列表页签,可查看该库中相关的表信息。

      demo_db 数据库的 表列表 中显示 itemuser 两张表,表格式均为 CSV,数据目录IDdlf_demo,存储位置分别对应 OSS 上的 dlf/user_behavior_data/itemdlf/user_behavior_data/user 路径。

    2. 单击表名,查看并确认抽取出来的表结构是否符合预期。

      本示例中,数据表 user 的表类型为 EXTERNAL_TABLE,所属数据库为 demo_db,存储格式为 CSV。普通列包含6个字段:user_id(int)item_id(int)behavior_type(int)user_geohash(string)item_category(int)time(string),表结构与预期一致即可。

      item 的基本信息显示:表类型为 EXTERNAL_TABLE,所属数据库 demo_db,存储位置为 oss://xxx/dlf/user_behavior_data/item,存储格式为 CSV,SerializationLib 为 org.apache.hadoop.hive.serde2.OpenCSVSerde。普通列包含 3 个字段:item_id(int)item_geohash(string)item_category(int)

第四步:用户行为数据分析

数据分析的过程主要分为三步:

  1. 预览并检查数据信息。

  2. 简单的数据清洗。

  3. 进行用户活跃度、漏斗模型和商品热度分析。

预览并检查数据

在左侧菜单栏,单击数据探索,在SQL查询框中输入以下语句,查看文件中的数据信息。

SET spark.sql.legacy.timeParserPolicy=LEGACY;
-- 预览数据
SELECT * FROM `demo_db`.`user` limit 10;
SELECT * FROM `demo_db`.`item` limit 10;
-- 用户数
SELECT COUNT(DISTINCT user_id) FROM `demo_db`.`user`;
-- 商品数
SELECT COUNT(DISTINCT item_id) FROM `demo_db`.`item`;
-- 行为记录数
SELECT COUNT(*) FROM `demo_db`.`user`;

demo_db.user 表查询结果包含 user_iditem_idbehavior_typeuser_geohashitem_categorytime 六个字段,预览数据显示 behavior_type 值均为 1,user_geohash 大多为空,时间范围为 2014-11-27 至 2014-12-18。demo_db.item 表查询结果包含 item_iditem_geohashitem_category 三个字段,其中 item_geohash 大多为空。此外,统计查询返回去重用户数、去重商品数以及总行为记录数,可用于了解数据集的整体规模。

数据预处理

我们对原始数据进行一定的处理,以提高数据的可读性,并提升分析的性能。

  • 创建新表user_log,表格式为Parquet,按日期分区。

  • behavior_type转换成更易理解的字符串信息:1-click; 2-collect; 3-cart; 4-pay。

  • 将日志的时间列拆分为日期和小时两列,再加上周信息,便于分别做日期和小时级别的分析。

  • 过滤掉不必要的字段,并将数据存入新表user_log。

后续我们会基于新表做用户行为分析。

CREATE TABLE `demo_db`.`user_log` 
USING PARQUET
PARTITIONED BY (date)
AS SELECT 
    user_id, 
    item_id,
    CASE 
      WHEN behavior_type = 1 THEN 'click'
      WHEN behavior_type = 2 THEN 'collect'
      WHEN behavior_type = 3 THEN 'cart'
      WHEN behavior_type = 4 THEN 'pay'
    END AS behavior, 
    item_category, 
    time,
    date_format(time, 'yyyy-MM-dd') AS date,
    date_format(time, 'H') AS hour,
    date_format(time, 'u') AS day_of_week
  FROM `dlf_demo`.`user`;

用户行为分析

  1. 首先,我们基于漏斗模型,对所有用户从点击到加购、收藏、购买的转化情况进行分析。

    -- 漏斗分析耗时13秒
    SELECT
      behavior, COUNT(*) AS total
    FROM `demo_db`.`user_log`
    GROUP BY behavior
    ORDER BY total DESC

    查询结果为:click(点击)共 11550581 次,cart(加购)共 343564 次,collect(收藏)共 242556 次,pay(付款)共 120205 次。

  2. 然后对一周内每天的用户行为做统计分析。

    -- 用户行为分析耗时14秒
    SELECT 
      date, day_of_week,
      COUNT(DISTINCT(user_id)) as uv,
      SUM(CASE WHEN behavior = 'click' THEN 1 ELSE 0 END) AS click,
      SUM(CASE WHEN behavior = 'cart' THEN 1 ELSE 0 END) AS cart,
      SUM(CASE WHEN behavior = 'collect' THEN 1 ELSE 0 END) AS collect,
      SUM(CASE WHEN behavior = 'pay' THEN 1 ELSE 0 END) AS pay
    FROM `demo_db`.`user_log`
    GROUP BY date, day_of_week
    ORDER BY date

    结果如下(由于数据集经过裁剪,对于工作日和非工作日的结果有失真)。

  3. 最后,我们结合商品表,分析出数据集中最受欢迎的是个商品品类

    -- 销售最多的品类耗时110秒
    SELECT item.item_category, COUNT(*) AS times
    FROM `demo_db`.`item` item
      JOIN `demo_db`.`user_log` log
      ON item.item_id = log.item_id
    WHERE log.behavior='pay'
    GROUP BY item.item_category
    ORDER BY times DESC
    LIMIT 10;

  4. (可选)下载分析结果。

    DLF提供将分析结果以CSV文件的形式下载的功能,启用该功能需要提前设置分析结果的保存路径(OSS路径)。设置后,查询结果会被保存到该路径下。

    1. 单击数据探索页面右上方的路径设置,设置结果存储路径,可以选择已有文件夹或者新建文件夹。

      在弹出的 OSS路径选择 对话框中,确认路径后单击 确定

    2. 设置完成后,运行SQL查询,在运行历史页签的下载结果直接下载,也可以直接通过OSS路径访问和下载该文件。

  5. (可选)保存SQL。

    通过单击保存,可以将本次分析用到的SQL进行保存,后续可直接在已存查询中打开,做进一步的调用及修改。

问题解答

如果您有任何问题或希望深入探讨数据湖技术,欢迎在微信中搜索并关注“数据湖技术圈”公众号。