五步幫你實現用戶畫像的數據加工
摘要: 企業最終的數據往往都隱藏在日誌背後,如果從日誌背後挖掘出有價值的信息,勾畫出平台或網站的用戶畫像對精準化運營有著重要的幫助。阿里雲技術專家禕休帶來阿里在處理日誌、構建數倉上的最佳實踐分享。主要從數倉開發開始談起,重點講解了數據加工用戶畫像的五大步驟,最後進行了演示解析。
原文:http://click.aliyun.com/m/41650/
企業最終的數據往往都隱藏在日誌背後,如果從日誌背後挖掘出有價值的信息,勾畫出平台或網站的用戶畫像對精準化運營有著重要的幫助。阿里雲技術專家禕休帶來阿里在處理日誌、構建數倉上的最佳實踐分享。主要從數倉開發開始談起,重點講解了數據加工用戶畫像的五大步驟,最後進行了演示解析。
直播視頻回顧請點擊
以下是精彩視頻內容整理:
數據融合加工-數倉開發
大數據倉庫特殊引擎提供我們一站式的PB級大數據倉庫解決方案,那麼,我們如何基於MaxCompute去構建倉庫,如何去幫數據進行清洗加工,然後去挖掘出有價值的信息?MaxCompute2.0推出了一些新功能,比如說非結構化數據的處理, MaxCompute支持非結構化數據存儲在OSS上,以前的方式是通過數據集成工具或者自己去寫一些任務,將這些數據周期性或者一次性同步到MaxCompute上來,既有開發成本,又有運維成本,在2.0裡面我們支持直接創建外部表的方式連接數據源,直接對數據進行處理。
在數倉上的開發規範如圖,從日誌數據、用戶基本信息數據等裡面去挖掘出價值信息,然後涉及到數據開發人員做一些ETL的設計,包括我們的一些開發編碼、設置,將任務提交到線上,在線上我們會遇到過去的一些數據運維工作,這些運維工作是不是可以在Dataworks裡面去完成?下面我們一起來了解操作細節。
1. 需求分析
通常情況下會以一個這樣的鏈路圖去做用戶畫像,可以看到,用戶畫像通常情況下會包含兩個部分,動態數據和靜態數據。動態數據包括行為數據、頁面行為、交易數據,比如說你的用戶點擊瀏覽數據等都可以放在動態的數據裡面去,比如說在我們的網站整個的訪問深度,是不是在頁面上形成了時長有多少,在某一整個鏈路上註冊開通再到數據開發的跳失率是多少等等;靜態數據更多的是關於人的一些屬性,比如說姓名、星座、年齡、長居地以及通常使用什麼樣的設備去訪問我們的網站等等,所以有一些終端設備的偏好信息。
數倉創建
做數倉要進行數倉分層,底層是ODS層,通常情況下將原始的數據先採集到MaxCompute上來,對一些非結構化數據進行一定的結構化,包括一些數據的規範化, DWD層有我們的一些明細數據,我們要在這些數據之間能夠產生一些價值,做一些數據清潔工作、數據交換工作,將數據進行打包,再向上我們要根據數據去做一些公共指標加工和應用指標加工,比如PVUV的訪問、設備的訪問等等。
2. 原始日誌分析
原始數據可以通過這些欄位裡面去獲得什麼樣的信息?一個日誌信息裡面,包含用戶來訪問網站或者平台IP地址、用戶登錄名,然後通過一些欄位可以分析設備信息,比如說我們可以從用戶真實的數據裡面看到IP地址,包括什麼時間去訪問,訪問了我們哪一個頁面,使用了什麼樣的瀏覽器,瀏覽器內容是什麼,有的直接用手機端等等,我們可以通過這些信息去挖掘出更多的信息,比如說可以通過IP地址知道用戶長居住在哪個城市來訪問我們網站,通過user_agent欄位可以獲取設備信息,因為我們去訪問終端一些版本,設置可以通過這些數據進行一個結構化,然後把數據抽象處理。
用戶信息表就是一張結構化的二維表,通常會包含一些用戶的信息、性別、年齡、星座等等。
通過已有的這些數據,再去做用戶畫像時候可以看到,深色是已有數據,可以去刻畫出用戶在我們網站的瀏覽性,比如說整個網站的PVUV等等,通常訪問哪個頁面更高,然後在什麼時候去訪問。
3. 數據開發
接下來進入數據開發階段,數據開發階段要去實現如圖邏輯,左邊ods_log_info_d這張表存著我們的日誌信息,我們要去公開一個結構,將用戶IP地址解析出來一個一個地域信息。右邊ods_log_info_d用戶的基本信息已經是結構化了,這兩個數據通過UID進行關聯,JOIN成一張大表,原封未動的將我們的數據採集到MaxCompute上來,然後在DW層裡面做更多的關聯,關聯出一張用戶去訪問我們廣泛基本信息的寬表,然後基於這個寬表之上,我們有一個IP地址,要知道這個用戶PV的具體數據,比如求平均值或者求在整個網站訪問的最佳深度等。
在創建表的時候怎麼更全面?我們發現,所有工作流任務、節點任務,包括我們的表,命名其實都有一個規則,如果你的數據量很大,通常情況下包含資料庫的倉庫分層、業務域、數據域和數據分析時間,這張表屬於DW層,這張表刻划了一個用戶的基本信息,這就表示這張表的數據是一天更新一次的,通過這樣一張表可以明確知道刻劃什麼樣的業務價值,讓依賴於這張表的下游同學可以快速認識這張表的數據分析時間,描述什麼樣的信息。
另外,我們的IP去轉地域信息,在公共雲版本上面函數是沒有對外開放的,所以需要去解決自定義的函數,但有一些函數不能滿足配置,比如說大寫轉成小寫,將IP轉成region如何去做,通常情況下我們會去寫一些Java去做這樣的事情。將這些函數、資源包註冊到MaxCompute上來,通過堆頭註冊上來,然後去對函數進行解析。
4. 最佳實踐
我們強調每一個節點裡面最多輸出一張表,當你有多張表的時候,比如說任務失敗了,可能是因為其中某一條處理的邏輯失敗了,當你去重跑的時候,可能整個任務都要重新去跑,另外,你的輸出表表格一定要跟你的節點名稱一樣,這樣可以快速從你的輸出運維上,快速找到這張表的數據在哪個節點上沒有產生,是因為哪一些任務失敗了。
大家都知道,大數據裡面可能會有預測的insert overwrite,比如說測試數據任務時候會加資料庫,通常情況下會造成數據重複和數據產生,如果你去使用灰色的overwrite,或者是每一次的任務重跑或失敗之後,你要去手工再把這個任務調動起來,會根據你的分區表數據批量進行。這樣最多的好處是每一張表數據的產生,比如說代碼加一些注釋,比如說整個SQL邏輯是處於什麼樣的,一定要在前面去進行相關的注釋。
在操作過程中,大家盡量去減少Select*操作,因為你的計算成本比較高,在2.0裡面我們已經打開了全表推出,用戶去進行一個選表,上個月去拜訪什麼客戶,通常情況下每個月在平台上消費3千多,在所有查看數據的時候,沒有加分區的全表掃的計算成本很高,所以建議大家在去使用的過程中多加一個分區排檢,可以減少我們的計算成本。
在公共雲上,我們有一些公共雲的服務,還有一些私有化服務,比如說安全行業、金融行業,通常都需要將大數據部署穩定,我們的項目創建的一個或者兩個如何區分?通常情況下會有開發和生成,開發就交給數據開發團隊去把數據任務開發好、調試好,然後發布到生產環境上去,生產環境上更新一些配置的調度信息,比如說按天、周、月等等去運維,對他的數據開發流程要求特別嚴,通常情況下有更多的事情發生,包的開發、測試,還有一些預發環境和生產,整個代碼環境都會去詳細的進行運維,你去創建的時候,可以在項目配置中去調試,比如說在開發項目裡面,通常情況是不打開調度參數,就是說你創建的客戶提交之後,不會每天自動去調度,當你把任務發布到生產的項目上面,根據你的配置更新每天去同步。
調度參數方面,比如說將數據如何去寫到一個最新的分區,比如說分公司24號對應的分區裡面,25是新的一些事情,如何去起到新對應25號的分區裡面去,我們提供這樣的參數,當你配置這樣的系統參數時候,每次在我們調度系統的時候會自動進行切換,一些日期不需要你每次手動去創建分區。
5. 實驗操作
通常情況下,我們先去創建所謂的三張表,每張表簡單去適應如何分層,比方說第一層ODS層,第二層是DW層,從結構上面也可以看出來,每一個節點都是相當規則,當這張數據要同步到MaxCompute上,肯定是要建一個目標表,同樣有一張表可以存儲這張數據。然後創建工作流節點,接著創建自定義UDF,最後配置SQL節點和測試運行。
更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎
推薦閱讀:
※C++性能優化
※有哪些長得像餘弦函數的常見函數?
※算NPV的題目,為什麼excel的npv函數和數學方法算的差別那麼大?
※什麼軟體能畫形如z=3x+4xy這種函數的圖像?
※若f(x)=-k f""(x), k>0, 那麼f(x)一定是正弦曲線嗎?