資料湖構建DLF資料探索快速入門-淘寶使用者行為分析
簡介
本教程通過使⽤資料湖構建(DLF)產品對於淘寶⽤戶⾏為樣例資料的分析,介紹DLF產品的資料發現和資料探索功能。教程內容包括:1. 服務開通:開通阿⾥雲賬號及DLF/OSS相關服務2. 樣例資料集下載和導⼊:下載樣例資料(csv⽂件),並上傳⾄OSS3. DLF資料發現:使⽤DLF⾃動識別⽂件Schema並建立元資料表4. DLF資料探索:使⽤DLF資料探索,對⽤戶⾏為進⾏分析,包括⽤戶活躍度、漏⽃模型等
資料說明
本次測試的資料集來⾃阿⾥雲天池⽐賽中使⽤的淘寶⽤戶⾏為資料集,為了提⾼效能,我們做了⼀定的裁剪。資料集中以csv的格式儲存了⽤戶⾏為及商品樣例資料。資料範圍:2014年12⽉1⽇ - 2014年12⽉7⽇資料格式:
開通DLF和OSS服務(如已開通,直接跳轉⾄第⼆步)
1.1 登入阿⾥雲賬號,點選進⼊DLF控制檯⻚⾯。
1.2 開通DLF及其依賴OSS服務,並完成授權。(如果已開通可直接跳過)
若之前未開通過DLF服務,會提示⽤戶開通服務。點選“開通服務”,進⼊服務開通⻚⾯。
開通服務後,返回DLF控制檯⻚⾯。會提示開通OSS服務,以及授予DLF訪問依賴資料來源的許可權。點選按 鈕完成OSS開通及授權。回到DLF控制檯⻚⾯,點選重新整理檢查狀態。⻚⾯⾃動跳轉⾄DLF控制檯主⻚⾯。
1.3 開通完成後,進⼊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。
在DLF控制檯中,進⼊元資料庫⻚⾯,建立元資料庫。
填⼊資料庫名稱。並選擇剛才存有⽤戶⾏為分析的
如下圖所示,元資料庫建立成功。
3.2 發現OSS⽂件中的元資料表資訊
進⼊DLF元資料抽取⻚⾯,點選“新建抽取任務”
填寫資料來源相關配置,點選下⼀步
選擇過程中需要⽤到的RAM⻆⾊,預設為開通階段已經授權的“AliyunDLFWorkFlowDefaultRole”。運⾏模式 選擇“⼿動執⾏”。抽取策略選擇“快速模式”以最快的速度完成元資料發現。
核對資訊後,點選“儲存並⽴即執⾏”。
系統會跳轉到元資料抽取列表⻚⾯,新建的任務開始建立並⾃動運⾏。
約10秒後任務運⾏完成。約10秒後任務運⾏完成。⿏標移到狀態列的問號圖示,會看到已經成功建立了兩張元資料表。
點選浮層中的“元資料庫”連結,可直接檢視該庫中相關的表資訊。
點選浮層中的“元資料庫”連結,可直接檢視該庫中相關的表資訊。
點選表詳情,檢視並確認抽取出來的表結構是否符合預期。
⾄此,我們通過DLF⾃動發現數據湖CSV⽂件Schema的過程已經完成。下⼀步我們開始針對資料湖內的數 據做分析。
⽤戶⾏為資料分析
4.1 資料分析概述
在DLF控制檯⻚⾯,點選選單“資料探索”-“Spark SQL”,進⼊資料探索頁面。
資料分析的過程主要分為三步:
-
預覽並檢查資料資訊。
-
簡單的資料清洗。
-
進⾏⽤戶活躍度、漏⽃模型和商品熱度分析。
4.2 預覽並檢查資料
在查詢框輸⼊下⾯的語句,檢視⽂件中的資料資訊。
-- 預覽資料
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格式,按⽇期分割槽
-- 導⼊資料,拆分⽇期和⼩時,並將behavoior轉換成可讀性更好的值
-- 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)產品的元資料發現和資料 探索功能。
有任何問題,或希望進⼀步探討資料湖技術,歡迎掃碼加⼊資料湖技術群,關注資料湖技術圈。
參考
天池 淘寶⽤戶⾏為資料集:https://tianchi.aliyun.com/dataset/dataDetail?dataId=46
Spark SQL ⽇期型別轉換:https://spark.apache.org/docs/latest/sql-ref-datetime-pattern.html
近期資料湖活動
2021年6月24日至7月2日工作日期間 完成該場景,即可領取polo衫一件。先到先得
領取地址:https://developer.aliyun.com/adc/series/activity/dlf