前言
8月份參加的DataWhale組織的組隊學習活動,自以爲是地報了MySQL,數據挖掘和爬蟲,結果只有MySQL完成得還可以了,數據挖掘不厚道地隨便搞了一下,矇混過關,爬蟲搞了一半最後被請出了羣聊。
雖然沒有完成,但好處保留了這些資料和高手們的聊天記錄,現在想把沒做完和做好的事情做完做好,可以照着別人的腳步,跟着做,這叫站在巨人的肩膀上。做的這些,當然都是爲了一份工作。
第一部分是數據集處理,即拿到數據集後,對數據字段的意義和類型、數據的分佈、以及數據的缺失值進行了解和分析,然後做相應的處理。
引用一位羣友的總結,即這一部分包括:1、剔除無用的特徵;2、缺失值的處理;3、異常值和離羣值的處理;4、分類數據的編碼;5、時間類特徵的處理;6、其他特徵的處理。
這一邊日誌,我主要進行數據值的處理,用python的數據可視化包展示一下數據的分佈,這裏也複習一下Matplotlib和seaborn,不然真的過去學的都忘了。至於時間類和其他特徵處理,放在一下篇,專門學習一下特徵工程。
數據集說明
這是DataWhale提供的一個金融數據集,數據集已經做了脫密處理。需要做的是預測用戶的貸款是否會逾期。數據字段"status" 是結果標籤:0表示未逾期,1表示逾期。
數據集將會三七分,三分測試集七分訓練集。隨機種子設置爲2018。
導入常用的工具包
導入數據
導入數據並查看DataFrame結構:總共有4754行數據,90個字段。
字段分析
查看每個字段的唯一值有多少個,如果只有一個唯一值,那麼這個字段特徵沒有什麼用,如果字段的唯一值跟總數據行數相等,那麼也是無關字段
從以上可以看出,'bank_card_no','source','Unnamed: 0','custid','trade_no'是無用特徵
接下來,對每個字段的意義進行探究,從常理上判斷一個特徵字段是否具有意義。
每個字段隨機選取5個數查看
然後逐個看
將字段分類
按照常理去掉一部分無效字段,比如卡號,客戶姓名。一般日期信息應該主要用於做季節性趨勢性分析,或這用戶生命週期的分析,等進步一再看。
刪除無用字段
缺失值處理
對每個字段的缺失值進行統計,再按缺失值數量大小排序:
或者通過計算缺失值的比例來看
可見,student_feature 有2998個缺失值,缺失值佔比63%,這個字段需要刪掉。
對於缺失值的處理,這裏參考一片文章:
http://blog.sina.com.cn/s/blog_1523c35670102xlcf.html
這裏使用最填充法去處理缺失值,即填充均值,衆數或者中位數。
一般來說,如果是數值型變量,若存在的變量值是正態分佈則選擇均值填充,若是偏態分佈,則選擇中位數填充;如果不是數值型變量,則選擇衆數填充。
由於均值又受到異常值和利羣值的影響,所以先看看數值型的數據分佈和離羣數據。
爲了畫圖方便,這裏將所有的數值型字段分層三部分:
異常情況:16,23,25這三個圖出現最左/最右暴增的情況,即data_int1[15,22,24] ==>> rank_trad_1_month, trans_top_time_last_1_month, consume_top_time_last_1_month。。。待以後進一步分析。
第21個圖出現分段情況,即'avg_price_last_12_month'
第二段沒有特殊情況出現。
第18個圖出現分段情況,即 'consfin_credit_limit'
對於出現分段情況的 'avg_price_last_12_month','consfin_credit_limit',很奇怪的是通過畫大圖分析,卻沒有看到它們分段的情況。。。暫時不去探究了。
考慮以上圖形基本都呈偏態分佈,所以最後使用中位數對數值類型的缺失值進行填充。
接下的步驟:
填充數值類缺失值
對於時間日期類特徵的分析,填充時間類缺失值
填充標籤類缺失值
數據類型轉換,將標籤類型的字段轉爲數值類型,參考 https://zhuanlan.zhihu.com/p/87203369
--- 未完待續 ---