全部產品
Search
文件中心

Data Lake Formation:DLF資料探索快速入門-淘寶使用者行為分析

更新時間:Dec 18, 2024

DLF產品(資料湖構建)提供中繼資料抽取和資料探索的功能,本文介紹如何通過DLF完成對淘寶使用者行為範例的分析。

前提條件

已建立OSS Bucket。如未建立,請參見建立儲存空間

操作流程

  1. 服務開通:開通阿里雲帳號及DLF和OSS相關服務。

  2. 範例資料集下載和匯入:下載範例資料(CSV檔案),並上傳至OSS。

  3. DLF資料幫浦:使用DLF資料幫浦,自動識別檔案Schema並建立中繼資料表。

  4. DLF資料探索:使用DLF資料探索,對使用者行為進行分析,包括使用者活躍度、漏鬥模型等。

資料說明

本次測試的資料集來自阿里雲天池比賽中使用的淘寶使用者行為資料集,為了提高效能,我們做了一定的裁剪。資料集中以CSV的格式儲存了使用者行為及商品範例資料。

淘寶使用者行為資料集介紹:https://tianchi.aliyun.com/dataset/dataDetail?dataId=46

資料範圍:2014年12月1日 - 2014年12月7日

資料格式:

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)

詳細流程

第一步:開通DLF和OSS服務

  1. 登入資料湖構建控制台

  2. 開通DLF服務及其依賴OSS服務,並完成授權。(如已開通可直接跳過)。

    1. 若之前未開通過DLF服務,會提示使用者開通服務。單擊免費開通資料湖構建

    2. 開通服務後,返回DLF控制台頁面。會提示開通OSS服務,以及授予DLF訪問依賴資料來源的許可權。單擊開通,完成OSS開通及授權。

  3. 開通完成後,可進入DLF控制台首頁

第二步:將需要分析的資料檔案上傳至OSS

  1. 下載範例代碼,放在本地磁碟。

    解壓後得到檔案夾:user_behavior_data,包含item和user兩個檔案夾,裡面分別包含了各自的CSV資料檔案。本次分析主要集中在user檔案中,資料內容如下。

    image

  2. 將解壓後的user_behavior_data檔案夾上傳至OSS。詳情請參見簡單上傳

    上傳後目錄結構如下所示,item和user為兩個表的資料檔案夾。

    說明

    需刪除檔案夾中的.DS_Store檔案。

    image

第三步:在DLF上抽取中繼資料

  1. 登入資料湖構建控制台

  2. 建立資料庫。

    1. 在左側功能表列,選擇中繼資料 > 中繼資料管理

    2. 單擊資料庫頁簽,選擇目標資料目錄,單擊建立資料庫

    3. 配置以下資料庫資訊,單擊確定

      • 所屬資料目錄選擇所屬資料目錄。

      • 資料庫名稱輸入資料庫名稱。

      • 資料庫描述:可選,輸入資料庫描述。

      • 選擇路徑選擇上一步中存有使用者行為分析資料user_behavior_data的OSS路徑。

    4. 如下圖所示,資料庫建立成功。

      image

  3. 進行DLF資料幫浦。

    1. 在左側導覽列,單擊中繼資料 > 中繼資料抽取

    2. 在中繼資料抽取頁面,單擊建立抽取任務。參數配置詳情請參見中繼資料抽取

    3. 填寫抽取源相關配置,單擊下一步

      image

    4. 選擇要使用的目標資料庫,單擊下一步

      image

    5. 設定抽取任務資訊。

      • RAM角色:預設為開通階段已經授權的“AliyunDLFWorkFlowDefaultRole”。

      • 執行策略:選擇手動執行

      • 抽取策略:選擇全量抽取掃描全量資料檔案,在資料規模比較大時,作業消耗時間長,抽取結果更準確。

      image

    6. 核對資訊後,單擊儲存並立即執行

      image

    7. 系統會跳轉到中繼資料抽取列表頁面,建立的任務開始建立並自動運行。在資料規模比較大時,作業消耗時間長。

      待任務運行成功後,滑鼠移到狀態列的問號表徵圖,可看到已經成功建立了兩張中繼資料表。

      image

  4. 查詢資料表資訊。

    1. 單擊浮層中的資料庫,單擊表列表頁簽,可查看該庫中相關的表資訊。

      image

    2. 單擊表名,查看並確認抽取出來的表結構是否符合預期。

      image

      image

第四步:使用者行為資料分析

資料分析的過程主要分為三步:

  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`;

結果如下:

image

資料預先處理

我們對未經處理資料進行一定的處理,以提高資料的可讀性,並提升分析的效能。

  • 建立新表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`;
  
 -- 查看運行後的資料  
SELECT * FROM `demo_db`.`user_log` limit 10; 

結果如下:

image

使用者行為分析

  1. 首先,我們基於漏鬥模型,對所有使用者從點擊到加購、收藏、購買的轉化情況進行分析。

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

    結果如下:

    image

  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

    結果如下(由於資料集經過裁剪,對於工作日和非工作日的結果有失真)。

    image

  3. 最後,我們結合商品表,分析出資料集中最受歡迎的是個商品品類

    -- 銷售最多的品類耗時1分10秒
    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;

    結果如下:

    image

  4. (可選)下載分析結果。

    DLF提供將分析結果以CSV檔案的形式下載的功能,啟用該功能需要提前設定分析結果的儲存路徑(OSS路徑)。設定後,查詢結果會被儲存到該路徑下。

    1. 單擊資料探索頁面右上方的路徑設定,設定結果儲存路徑,可以選擇已有檔案夾或者建立檔案夾。

      image

    2. 設定完成後,運行SQL查詢,在運行歷史頁簽的下載結果直接下載,也可以直接通過OSS路徑訪問和下載該檔案。

      image

  5. (可選)儲存SQL。

    通過單擊儲存,可以將本次分析用到的SQL進行儲存,後續可直接在已存查詢中開啟,做進一步的調用及修改。

問題解答

如果您有任何問題或希望深入探討資料湖技術,歡迎在微信中搜尋並關注“資料湖技術圈”公眾號。