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)產品的中繼資料發現和資料探索功能。
有任何問題,或希望進一步探討資料湖技術,在微信中搜尋“資料湖技術圈”,關注“資料湖技術圈-公眾號”。