如何将dataset中的值赋值给datatable_金融行业实战项目:如何理解业务?
【面試題】
下表是某金融App的數據,請結合Excel數據集中的數據完成下列問題(某金融公司面試題,文末有數據下載?)
原始數據如下所示:
為方便后期分析,我們對數據進行分類。數據通常分為3類:用戶數據、行為數據、產品數據。
用戶數據指用戶基本情況,行為數據指用戶做過什么,產品數據是指平臺賣的東西。
原始數據中年齡、性別、手機省份、手機城市、注冊時間、用戶注冊終端、用戶注冊渠道、會員級別等信息為用戶數據,其余數據為行為數據,無產品數據。
因為行為數據過多不利于分析,我們把行為數據中與最近一次登陸相關的信息提取出來,列為最近登錄數據。
把是否...7天內...類的問題提取出來,作為活躍數據。
行為數據如下:
問題:
1.理解數據
如果將該數據建立一個數據庫,有哪些表,各表之間的關系是什么?
2.數據整理
假設該Excel數據是一個數據表(Datatable),請用SQL寫出:
(1)最近一次登錄城市各有多少用戶在表中?
(2)“用戶ID”之間的可能關系?(比如家庭成員,情侶等)
(3)請找出數據表中的異常值,并以此闡述你如何控制數據質量并以本數據為例設計數據質量報表。
【解題思路】
1.理解數據
如果將該數據建立一個數據,有哪些表,各表之間的關系是什么?
和面試官溝通該金融App后,了解了該產品的業務流程,畫出下圖:
拆分為4個表(也就是Excel對應的各個sheet表):
(1)“用戶信息”表中包含用戶id,年齡,性別等基本信息。
其中用戶id已進行加密,手機省份和手機城市是注冊所在地,用戶注冊終端是注冊時的終端(電腦端web、蘋果手機、安卓手機),用戶注冊渠道展示的是渠道ID。
(2)“最近登錄”表中是最近一次登陸ip,展示的是已加密的ip。
(3)“行為數據”表中,投資金額經過等比例放大。
表中字段含義,首投距今時間(天)是固收(含債轉)_首次投資時間距今天的時間。
最近一次投資距今時間(天)是固收(含債轉)_最近一次投資時間 距今天的時間。
首投距注冊時長(天)是首次投資距離注冊時間,以天為單位。
用戶瀏覽產品期限傾向是指固收含轉讓區(產品期限:1-3,4-6,7-12,12以上(PC+H5+APP))。
用戶瀏覽產品利率傾向是指固收含轉讓區(利率:(0,4%],(4%,5.5%],(5.5%,6%],(6%,7.5%],7.5%以上(PC+H5+APP))。
(4)“活躍數據”表中,本月是否有大額回款指本月回款額度1萬及以上。
表中字段含義,
是否訪問7天內未注冊:首次訪問到注冊時間>7天,或有訪問已超過7天但未注冊。
是否注冊7天內未充值:注冊到首次充值時間>7天,或有注冊已超過7天但未充值。
是否注冊7天內未投資:注冊到首次投資時間>7天,或有注冊已超過7天但未投資。
是否托管7天內未充值:托管到首次充值時間>7天,或有托管已超過7天但未充值。
是否托管7天內未投資:托管到首次投資時間>7天,或有托管已超過7天但未投資。
是否充值7天內未投資:最近一次充值到最近一次投資時間>7天,或最近一次充值已超過7天但未投資。
根據上面的業務分析,建立數據庫,建立4個表有用戶數據、行為數據、最近登錄數據、活躍數據表,各表之間以用戶id為主鍵聯結,關系如下圖。
2.數據整理
(1)最近一次登錄城市各有多少用戶在表中?
“最近一次登錄”在“最近登陸數據“表中。
“各有”,翻譯過來就是“每個城市”。涉及到“每個”到業務問題,要想到《猴子 從零學會SQL》里講過的用“分組匯總”來實現。
這里分組按用戶id,匯總使用count函數進行計數。
select?最近一次登錄城市,count(用戶id)?as?人數from?最近登陸數據group by 最近一次登錄城市;輸出結果(數據過多僅展示前8行數據):
(2)“用戶ID”之間的可能關系?(比如家庭成員,情侶等)
使用多維度拆解分析方法來拆解問題:當最近登錄ip相同時,用戶之間可能會存在關系。因此,分兩步解決該業務問題。
(1)找出ip重復的數據;
(2)找出重復ip對應的用戶信息。也就是輸出用戶id、性別、年齡,最近一次登陸ip等信息,并對最近一次登陸ip進行升序排列。
第1步:找出ip重復的數據
“最近一次登錄ip”在“最近登陸數據表“中。
該問題是“找重復數據”類問題,按“最近一次登陸ip”分組(group by),然后使用having來篩選出每組里面次數>1次的就是重復數據。
select 最近一次登陸ipfrom?最近登陸數據group by 最近一次登陸iphaving?count(最近一次登陸ip)>1;第2步:找出重復ip對應的用戶信息
輸出用戶id、性別,年齡,最近一次登陸ip等信息。
select 用戶id,最近一次登陸ipFROM?最近登陸數據where 最近一次登陸ip in(select 最近一次登陸ipfrom 最近登陸數據group by 最近一次登陸iphaving?count(最近一次登陸ip)>1);第3步:聯結用戶數據表,輸出信息
把用戶數據作為臨時表a,第二步得出的結果作為臨時表b,并對所有數據進行升序排列。
select a.用戶id,a.性別,a.年齡,b.最近一次登陸ipfrom?用戶數據?as?a?right?join(select 用戶id,最近一次登陸ipfrom 最近登陸數據where 最近一次登陸ip in(select 最近一次登陸ipfrom 最近登陸數據group by 最近一次登陸iphaving count(最近一次登陸ip)>1)) as bon?a.用戶id=b.用戶idorder?by?b.最近一次登陸ip?asc;查詢結果:
可以看出用戶id(1、2)具有相同ip地址,都為女性,年齡相差20歲,可以推測是母女關系。
用戶id(3、4)具有相同ip地址,性別一男一女,年齡相差6歲,可以推測是夫妻關系。
用戶id(5、6)具有相同ip地址,性別一男一女,年齡相差8歲,可以推測是夫妻關系。
用戶id(7、8)具有相同ip地址,性別一男一女,年齡相差3歲,可以推測是夫妻關系。
(3)請找出數據表中的異常值,并以此闡述你如何控制數據質量并以本數據為例設計數據質量報表。
根據《描述統計分析》里講過的異常值方法,我們可以使用Tukey's test方法找出宜昌至的范圍。
我們以該案例中的“年齡”為例,展示如何找出異常值。
第一步:計算出上四分位數
首先我們增加一列行號,使用“@”自定義“行號”這一變量,并用賦值運算符::=對“@行號”賦值為0。
select?@行號?:=?0;結果如下:
然后,我們使用內聯結把原表格和新增的一列聯結在一起,形成新的表格,記為臨時表r。
select?年齡,@行號?:=?0from?用戶數據inner?join?(?select?@行號?:=?0?)?as?c;結果如下:
然后,用賦值運算符“:=”賦值行號為“@行號:=@行號+1”,并該列名為行號,進行升序排列,把該表結果記為臨時表t。
select?年齡,@行號?:=?@行號?+?1?as?行號?from?用戶數據inner?join?(?select?@行號?:=?0?)?as?corder?by?年齡?asc;最后,使用sql的floor函數來計算下四分位數,floor函數:向下舍入為指定小數位數。
select avg(年齡)?as?下四分位數from(select?年齡,@行號?:=?@行號?+?1?as?行號?from 用戶數據inner?join?(?select?@行號?:=?0?)?as?corder?by?年齡?asc?)?as?dwhere?行號?=?floor((?@行號+1)?/4?);同理,使用3*(n+1)/4可以用來計算上四分位數。查詢結果如下:
第二步,用Tukey's test方法中k=1.5來找出中度異常值。
可以使用where函數找出異常值——在最大估算值和最小估算值之外的數據。
select 年齡,count(*) as 人數,count(*)/5000 as 人數占比from 用戶數據 where 年齡>(48+1.5*(48-32)) or 年齡32group by 年齡;查詢結果如下:
用同樣的方法我們可以計算出投資金額的異常值。結果如下(因數據較多只選取部分數據呈現):
第三步:制作數據質量報表,以年齡數據為例。
把第二步中得到的結果作為臨時表e,用sum函數計算出年齡異常值的總人數與總人數占比。
select?年齡,sum(人數)?as?總人數,sum(人數)/5000?as?總人數占比from?臨時表e?;結果如下:
按照上述步驟可得投資金額異常值的總人數與總人數占比,結果如下:
數據質量報表如下:
異常值的發生原因可以分為兩類:人為異常值和自然異常值。
自然異常值不是由于錯誤產生的,無需避免。
人為異常值可能由于數據輸入錯誤,故意填寫錯誤,數據處理錯誤等原因產生,這些情況是可以盡量避免的,這就要求我們做到以下幾點:
認真細心。避免數據輸入錯誤。
做好用戶宣傳,盡量填寫真實信息。
提高提取數據的正確率,確保數據來源準確。
【本題考點】
1.考察對業務的理解能力,拿到數據以后,不是立馬開始分析,而是要先理解數據,對數據分類。
2.“每個問題”要想到用分組匯總來實現。
3.查找出重復數據。對數據項進行分組,找出數量大于2的數據即為重復值。
4.利用sql計算四分位數,找出異常值。增加一列行號并升序排列,利用公式取出上四分位數和下四分位數,找出最小和最大估計值,在此范圍外的即為異常值。
5.excel觀察數據特征:平均數、中位數、眾數。
6.掌握常用的分析方法解決問題的能力。
推薦:人工智能時代的必學技能
總結
以上是生活随笔為你收集整理的如何将dataset中的值赋值给datatable_金融行业实战项目:如何理解业务?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle左连接数据会对不上吗,一周工
- 下一篇: url存在宽字节跨站漏洞_5分钟速览丨常