DLF产品(数据湖构建)提供数据发现和数据探索的功能,本文介绍如何通过DLF完成对淘宝用户行为样例的分析。
操作流程
服务开通:开通阿里云账号及DLF和OSS相关服务。
样例数据集下载和导入:下载样例数据(csv文件),并上传至OSS。
DLF数据发现:使用DLF自动识别文件Schema并创建元数据表。
DLF数据探索:使用DLF数据探索,对用户行为进行分析,包括用户活跃度、漏斗模型等。
数据说明
本次测试的数据集来自阿里云天池比赛中使用的淘宝用户行为数据集,为了提高性能,我们做了一定的裁剪。数据集中以csv的格式存储了用户行为及商品样例数据。
淘宝用户行为数据集介绍:https://tianchi.aliyun.com/dataset/dataDetail?dataId=46
数据范围:2014年12月1日 - 2014年12月7日
数据格式:
user表:
Column | Description | Comment |
user_id | Identity of users | Sampled&desensitized |
item_id | Identity of items | Desensitized |
behavior_type | The user behavior type | Including click, collect,add-to-cart and payment, the corresponding values are 1, 2, 3 and 4,respectively. |
user_geohash | Latitude(user location when the behavior occurs, whichmay be null) | Subject to fuzzing |
item_category | The category id of the item | Desensitized |
time | The time of the behavior | To the nearest hours |
item表:
Column | Description | Comment |
item_id | Identity of items | Sampled & desensitized |
item_ geohash | user location where the behavior occurs(may be null) | generated by longitude and altitude through acertain privacy-preserving algorithm |
item_category | The category id of the item | Desensitized |
详细流程
第一步:开通DLF和OSS服务
1.1 登录到DLF控制台页面。
1.2 开通DLF及其依赖OSS服务,并完成授权。(如果已开通可直接跳过)。
若之前未开通过DLF服务,会提示用户开通服务。单击免费开通数据湖构建。
开通服务后,返回DLF控制台页面。会提示开通OSS服务,以及授予DLF访问依赖数据源的权限。点击按钮完成OSS开通及授权。回到DLF控制台页面,点击刷新检查状态。页面自动跳转至DLF控制台主页面。
开通完成后,进入DLF控制台主页:
第二步:在OSS中导入需要分析的数据
2.1 下载样例代码,放在本地磁盘。
解压后得到文件夹:user_behavior_data,包含item和user两个文件夹,里面分别包含了各自的csv数据文件。本次分析主要集中在user文件中,数据内容如下。
2.2 将文件上传至OSS。
进入OSS控制台,上传文件使用已有的Bucket,或创建新的Bucket。
上传解压后的user_behavior_data文件夹。上传后目录结构如下所示,item和user为两个表的数据文件夹。
第三步:在DLF上抽取元数据
3.1 创建元数据表
DLF中元数据库可以理解为在关系型数据库中的Database,其下一级为Table。
a. 在DLF控制台中,进入元数据➡元数据管理页面,创建元数据库。
b. 填入数据库名称。并选择刚才存有用户行为分析数据的路径
如下图所示,元数据库创建成功。
3.2 发现OSS文件中的元数据表信息
a. 进入DLF元数据抽取页面,点击“新建抽取任务”。
b. 填写数据源相关配置,点击下一步。
c. 选择要使用的目标元数据库,点击下一步。
d. 选择过程中需要用到的RAM角色,默认为开通阶段已经授权的“AliyunDLFWorkFlowDefaultRole”。运行模式选择“手动执行”。抽取策略选择“快速抽取”以最快的速度完成元数据发现。
e. 核对信息后,点击“保存并立即执行”。
系统会跳转到元数据抽取列表页面,新建的任务开始创建并自动运行。
约10秒后任务运行完成。鼠标移到状态栏的问号图标,会看到已经成功创建了两张元数据表。
f. 点击浮层中的“元数据库”链接,可直接查看该库中相关的表信息。
g. 点击表详情,查看并确认抽取出来的表结构是否符合预期。
至此,我们通过DLF自动发现数据湖CSV文件Schema的过程已经完成。下一步我们开始针对数据湖内的数据做分析。
第四步:用户行为数据分析
4.1 数据分析概述
在DLF控制台页面,点击菜单“数据探索”-“SQL 查询”,进入数据探索页面。
数据分析的过程主要分为三步:
预览并检查数据信息。
简单的数据清洗。
进行用户活跃度、漏斗模型和商品热度分析。
4.2 预览并检查数据
在查询框输入下面的语句,查看文件中的数据信息。
set spark.sql.legacy.timeParserPolicy=LEGACY;
-- 预览数据
select * from `dlf_demo`.`user` limit 10;
select * from `dlf_demo`.`item` limit 10;
-- 用户数 17970
select COUNT(DISTINCT user_id) from `dlf_demo`.`user`;
-- 商品数 422858
select COUNT(DISTINCT item_id) from `dlf_demo`.`item`;
-- 行为记录数 746024
select COUNT(*) from `dlf_demo`.`user`;
数据内容如下:
4.3 数据预处理
我们对原始数据进行一定的处理,已提高数据的可读性,并提高分析的性能。
将behavior_type修改成更好理解的字符串信息;将日志+时间的格式打平到两个单独的列,再加上周信息,便于分别做日期和小时级别的分析;过滤掉不必要的字段。并将数据存入新表user_log,表格式为Parquet,按日期分区。后续我们会基于新表做用户行为分析。
-- 数据转换耗时约40秒-- 创建新表user_log,parquet格式,按日期分区
-- 导入数据,拆分日期和小时,并将behavior转换成可读性更好的值
-- 1-click; 2-collect; 3-cart; 4-pay
create table `dlf_demo`.`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`;
-- 查看运行后的数据
select * from `dlf_demo`.`user_log` limit 10;
4.4 用户行为分析
首先,我们基于漏斗模型,对所有用户从点击到加购/收藏到购买的转化情况。
-- 漏斗分析耗时13秒
SELECT
behavior, COUNT(*) AS total
FROM `dlf_demo`.`user_log`
GROUP BY behavior
ORDER BY total DESC
结果如下:
然后我们一周内每天的用户行为做统计分析
-- 用户行为分析耗时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 `dlf_demo`.`user_log`
GROUP BY date, day_of_week
ORDER BY date
分析结果如下:(由于数据集经过裁剪,对于工作日和非工作日的结果有失真)
最后,我们结合商品表,分析出数据集中最受欢迎的是个商品品类
-- 销售最多的品类耗时1分10秒
SELECT item.item_category, COUNT(*) AS times
FROM `dlf_demo`.`item` item
JOIN `dlf_demo`.`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.5 下载分析结果
DLF提供将分析结果以CSV文件的形式下载的功能,启用该功能需要提前设置分析结果的保存路径(OSS路径)。设置后,查询结果会被保存到该路径下。用户可以通过DLF页面上的“下载”按钮直接下载,也可以直接通过OSS访问和下载该文件。
通过点击页面上的“路径设置”按钮进行设置。
可以选择已有文件夹或者新建文件夹。
4.6 保存SQL
通过点击“保存”按钮,可以将该次分析用到的sql保存,后续可以直接在“已存查询”中打开做进一步的调用及修改。
总结
本文通过一个简单的淘宝用户行为分析案例,介绍并实践了数据湖构建(DLF)产品的元数据发现和数据探索功能。
有任何问题,或希望进一步探讨数据湖技术,在微信中搜索“数据湖技术圈”,关注“数据湖技术圈-公众号”。