本項目教程筆記源自多易教育《Titan綜合數據倉庫與數據運營系統》,在CSDN學院有相關視頻教程購買鏈接,大數據企業級項目實戰–Titan大型數據運營系統
本項目課程是一門極具綜合性和完整性的大型大數據項目實戰課程,課程項目的業務背景源自各類互聯網公司對海量用戶瀏覽行爲數據和業務數據分析的需求及企業數據管理、數據運營需求。
學完本課程,你將很容易就拿到大數據數倉建設或用戶畫像建設等崗位的OFFER
本課程項目涵蓋數據採集與預處理、數據倉庫體系建設、用戶畫像系統建設、數據治理(元數據管理、數據質量管理)、任務調度系統、數據服務層建設、OLAP即席分析系統建設等大量模塊,力求原汁原味重現一個完備的企業級大型數據運營系統。
跟隨項目課程,歷經接近100+小時的時間,從需求分析開始,到數據埋點採集,到預處理程序代碼編寫,到數倉體系搭建…逐漸展開整個項目的宏大視圖,構建起整個項目的摩天大廈。
一、【用戶分析】新用戶留存分析
1、需求分析
次日留存率定義:
1)次日留存用戶:T日新增的用戶,在T+1日再次出現的人,就叫T日的次日留存的用戶
2)次日留存率:(次日留存人數/T日新用戶數)就叫
N日留存定義:
1)T日新增的用戶,在T+N日再次出現的人,就叫T日的N日留存用戶
報表示例1
思路分析
經過分析,發現,新鮮度計算其實本質上就是留存計算!只不過這個報表中,要求算:
1日後留存 2日後留存 3日後留存 … 30日後留存
計算時,上述梯形報表,其實不需要一次性計算所有數據格子,每天只要算梯形中的斜邊上數據格子
比如,在2019-06-15號的數據出來後,就計算
14號的 1日留存
13號的 2日留存
12號的 3日留存
11號的 4日留存
.......
2、ADS新用戶留存明細表模型
DWS_APL_NRT_REC:新用戶留存明細表
如果直接按照OLAP平臺上的可視化形式建表(橫表),計算不方便
我們設計出如下豎表模型,可以同樣表達留存數據,但計算會更加方便:
用戶留存明細表
日期 | 新增數 | 留存天數 | 留存人數 |
---|---|---|---|
6.5 | 4 | 1 | 3 |
6.5 | 4 | 2 | 3 |
6.6 | 2 | 1 | 2 |
6.5 | 4 | 3 | 3 |
6.5 | 2 | 2 | 1 |
6.5 | 2 | 1 | 2 |
-- 留存明細表
drop table if exists ads_apl_nrt_rec;
create table ads_apl_nrt_rec(
first_time string, -- 首登日
dnu_cnts int, -- 當日新增用戶總數
nrt_days int, -- 留存天數
nrt_cnts int -- 留存人數
)
stored as parquet;
3、ADS新用戶留存明細表開發
利用訪問歷史記錄表來實現用戶留存表計算
計算邏輯:
代碼實現:
INSERT INTO TABLE ADS_USR_NRT
SELECT
first_time as dt,
count(1) as new_cnts,
datediff('2019-10-29',first_time) as rt_days,
count(if(end_time ='2019-10-29',1,null)) as rt_cnts
FROM DWS_USR_HSL WHERE dt='2019-10-29'
AND datediff('2019-10-29',first_time)<=30
AND datediff('2019-10-29',first_time)>=1
GROUP BY first_time
;
二、【用戶分析】用戶新鮮度分析
1、需求分析
可視化報表所需求的數據是:
當日所有活躍用戶中,分別屬於1天前、2天前、n天前的新用戶的佔比;
2、ADS新鮮度數據模型
通過分析需求中原型頁面,撇去表象,發現本真:
無非就是需要計算某個日期上的活躍用戶中的“不同日期新增用戶”佔比
然後,發現可以用兩種形式的模型來爲頁面提供數據支持:
方式一:橫表
日期 | 當日活躍總數 | 0天新增佔比 | 1天新增佔比 | 2天新增佔比 | 3天新增佔比 | … |
---|---|---|---|---|---|---|
2019/6/15 | 2014 | 65% | 70% | 48% | 66% | … |
方式二:豎表
計算日期 | 活躍總數 | 新鮮天數 | 人數 |
---|---|---|---|
2019/6/15 | 100 | 1天前新增佔比 | 10 |
2019/6/15 | 100 | 2天前新增佔比 | 20 |
2019/6/15 | 100 | 3天前新增佔比 | 25 |
2019/6/15 | 100 | 4天前新增佔比 | 30 |
2019/6/15 | 100 | 5天前新增佔比 | 2 |
2019/6/15 | 100 | 6天前新增佔比 | 3 |
2019/6/15 | 100 | 7天前新增佔比 | 5 |
2019/6/15 | 100 | … | … |
2019/6/15 | 100 | 30天前新增佔比 | … |
“佔比”可以轉換成“數”來計算,更靈活
豎表建模
CREATE TABLE ads_apl_ufs (
dt string
,act_amt INT
,frs_days INT
,frs_cnts INT
) stored AS parquet;
3、ADS用戶新鮮度報表計算
本報表,基於用戶登錄歷史記錄明細表dws_usr_hsl,可輕鬆得出!
計算邏輯:
從上圖可以看出,新鮮度數據,其實可以從留存明細表中直接提取得出;
比如,要得到12.18號的新鮮度:
比如,要得到12.18號的新鮮度:
12.18號的活躍用戶中,有幾個是1天前新增的 ==> 等價於 12.17號的1日留存數
12.18號的活躍用戶中,有幾個是2天前新增的 ==> 等價於 12.16號的2日留存數
12.18號的活躍用戶中,有幾個是3天前新增的 ==> 等價於 12.15號的3日留存數
12.18號的活躍用戶中,有幾個是4天前新增的 ==> 等價於 12.14號的4日留存數
12.18號的活躍用戶中,有幾個是5天前新增的 ==> 等價於 12.13號的5日留存數
..........
而右邊等價數據,可以從新用戶留存明細中直接查詢而得!
而查詢的條件應該是: 日期+留存天數 =》 當前
《詳見項目代碼》
三、【用戶分析】用戶活躍成分分析
1、需求分析
分析可得,
本報表需求的數據爲:每天的活躍用戶中,連續活躍了1天、2天、N天的用戶的佔比;
實質是:統計用戶的連續活躍行爲;
2、DWS連續活躍區間記錄表模型
連續活躍記錄:dws_apl_uac_rec連續活躍區間記錄表
Uid | 首登日 | 活躍區間起始 | 活躍區間結束 |
---|---|---|---|
U001 | 2019-06-02 | 2019-06-02 | 2019-06-04 |
U001 | 2019-06-02 | 2019-06-07 | 2019-06-04 |
U001 | 2019-06-02 | 2019-06-10 | 9999-12-31 |
U002 | 2019-06-12 | 2019-06-12 | 9999-12-31 |
U003 | 2019-06-15 | 2019-06-15 | 9999-12-31 |
3、DWS連續活躍區間記錄表計算
/*
ETL 開發
計算邏輯:
1.源表:活躍記錄拉鍊表 dws_usr_rac
2.邏輯:先過濾出當日活躍的記錄,然後分別累計(連續1天的,連續2天的....)人數即可
*/
《詳見項目代碼》
4、ADS活躍成分分析報表開發
1)、活躍成分分析報表模型
用戶活躍度報表
日期 | 當日總活躍數 | 活躍天數類別 | 類別人數 | 人數佔比 |
---|---|---|---|---|
16 | 2000 | 1 | 600 | |
16 | 2000 | 2 | 1000 |
建表語句:
drop table if exists ads_usr_cta;
create table ads_usr_cta(
dt string,
act_cnts int comment '當日活躍總數',
continuos int comment '連續天數',
cnts int comment '人數',
per double comment '人數佔比'
)
stored as parquet;
2)、活躍成分分析報表開發
《詳見項目代碼》
四、【用戶分析】用戶訪問間隔分析
1、需求分析
2、ADS訪問間隔分析表模型
訪問間隔分佈報表:ADS_APL_UAI
截止日期 | 隔幾天 | 發生過多少人次 |
---|---|---|
2020-01-18 | 0 | 500 |
2020-01-18 | 2 | 400 |
2020-01-18 | 3 | 800 |
… |
3、ADS訪問間隔分析表開發
1)、方案1:spark
2)、方案2:sql
sql語句:
/*
方式2:用sql實現
*/
with tmp as
(select
uid,
datediff(if(end_dt='9999-12-31','2019-06-19',end_dt),begin_dt) as day1_cnts,
end_dt,
lead(begin_dt,1,null) over(partition by uid order by begin_dt) as jump_dt
from dws_user_active_zip
where dt='2019-06-19')
select
uid,
interval_type,
sum(cnts)
from
(
select
uid,
interval_type,
cnts
from
(
select
uid
,map('隔1天',day1_cnts,if(jump_dt is null,"NA",concat('隔',datediff(jump_dt,end_dt),'天')),1) as m
from tmp
)o
lateral view
explode(m) t as interval_type,cnts
) o2
where interval_type!='NA'
group by uid,interval_type
五、【用戶分析】活躍留存分析
1、需求分析
假設當前是2019-06-19號
2、ADS活躍留存分析表模型
/*
活躍用戶留存分析表
建模:豎表
ads_apl_art_rec
*/
create table ads_apl_art_rec(
dt string,
act_cnts int,
retention_days string,
retention_cnts int
)
stored as parquet;
3、ADS活躍留存報表計算
1)、計算邏輯
每日都只要以當日爲基數
往前推1天、2天、3天、4天、5天、……的留存數計算
/*
方案1:簡單粗暴的日活逐日join
計算邏輯:
1. 源表: 各天的日活表
2. 邏輯: 滾動計算,計算前N天到當天的,活躍留存數
比如,6.6號,算6.5-6.6的1日留存
6.7號,算6.5-6.7的2日留存,算6.6-6.7的1日留存
6.8號,算6.5-6.8的3日留存,算6.6-6.8的2日留存,算6.7-6.8的1日留存
......
將 6.5的日活 join 6.8的日活,求count --》 得到6.5號的3日後活躍留存
6.6的日活 join 6.8的日活,求count --》 得到6.6號的2日後活躍留存
6.7的日活 join 6.8的日活,求count --》 得到6.7號的1日後活躍留存
*/
/*
方案2:通過“用戶活躍區間記錄”表來計算
計算邏輯:
1. 源表: dws_usr_cta
2. 邏輯
一方面:
過濾出區間end_dt = 9999-12-31的且記錄(這些是當日有活躍的,也纔是所謂留存的)
按照 end_dt - start_dt 差來分組(這個差就是 “留存天數”,>7則爲7),求人數
(這裏即得出 “留存天數,留存人數”兩個字段) tmp1
另一方面:
從日活統計表中,查詢7天內的,每天日期及活躍總數 tmp2
最後:
用 tmp2 LEFT JOIN tmp1 on DATE_SUB(當日,tmp1.留存天數)=tmp2.日期
*/
2)、代碼實現
《詳見項目代碼》
六、【終端分析】終端屬性分析
1、需求分析
2、計算方案
本報表的實質就是:
按照各種維度:聯網方式、運營商、app版本
統計“新用戶數”和“活躍用戶數”和“啓動次數”等
上述需求,都可以通過查詢 日活/日新 多維報表 即可得出
《詳見項目代碼》
七、【App分析】app版本用戶分佈
1、版本分佈報表
本報表的實質就是:
按照app版本維度,來統計“新用戶數”和“活躍用戶數”和“啓動次數”等
上述需求,都可以通過查詢 日活/日新 多維報表 即可得出
《詳見項目代碼》
本項目教程筆記源自多易教育《Titan綜合數據倉庫與數據運營系統》,在CSDN學院有相關視頻教程購買鏈接,大數據企業級項目實戰–Titan大型數據運營系統
本項目課程是一門極具綜合性和完整性的大型大數據項目實戰課程,課程項目的業務背景源自各類互聯網公司對海量用戶瀏覽行爲數據和業務數據分析的需求及企業數據管理、數據運營需求。
學完本課程,你將很容易就拿到大數據數倉建設或用戶畫像建設等崗位的OFFER
本課程項目涵蓋數據採集與預處理、數據倉庫體系建設、用戶畫像系統建設、數據治理(元數據管理、數據質量管理)、任務調度系統、數據服務層建設、OLAP即席分析系統建設等大量模塊,力求原汁原味重現一個完備的企業級大型數據運營系統。
跟隨項目課程,歷經接近100+小時的時間,從需求分析開始,到數據埋點採集,到預處理程序代碼編寫,到數倉體系搭建…逐漸展開整個項目的宏大視圖,構建起整個項目的摩天大廈。