在线观看国产精品va_亚洲国产精品久久网午夜_少妇挑战三个黑人惨叫4p国语_欧美人与物videos另

注冊

驅動力

其他分類其他2022-09-07
292

CONTENTS

目錄

數說

一文看懂數據清洗:缺失值、異常值和重復值的處理

風向

金融領域數據清洗研究

一線

淺談數據分析中的數據清洗方法策略

About us

5大SQL數據清洗方法!

一文看懂數據清洗:缺失值、異常值和重復值的處理

數據缺失分為兩種:一種是行記錄的缺失,這種情況又稱數據記錄丟失;另一種是數據列值的缺失,即由于各種原因導致的數據記錄中某些列的值空缺。
不同的數據存儲和環境中對于缺失值的表示結果也不同,例如,數據庫中是Null,Python返回對象是None,Pandas或Numpy中是NaN。

數說

驅動力

01 數據列缺失的4種處理方法

導讀:在數據清洗過程中,主要處理的是缺失值、異常值和重復值。所謂清洗,是對數據集通過丟棄、填充、替換、去重等操作,達到去除異常、糾正錯誤、補足缺失的目的。

在極少數情況下,部分缺失值也會使用空字符串來代替,但空字符串絕對不同于缺失值。從對象的實體來看,空字符串是有實體的,實體為字符串類型;而缺失值其實是沒有實體的,即沒有數據類型。
丟失的數據記錄通常無法找回,這里重點討論數據列類型缺失值的處理思路。通常有4種思路。
1. 丟棄
這種方法簡單明了,直接刪除帶有缺失值的行記錄(整行刪除)或者列字段(整列刪除),減少缺失數據記錄對總體數據的影響。但丟棄意味著會消減數據特征,以下任何一種場景都不宜采用該方法。
  • 數據集總體中存在大量的數據記錄不完整情況且比例較大,例如超過10%,刪除這些帶有缺失值的記錄意味著會損失過多有用信息。
  • 帶有缺失值的數據記錄大量存在著明顯的數據分布規律或特征,例如帶有缺失值的數據記錄的目標標簽(即分類中的LABEL變量)主要集中于某一類或幾類,如果刪除這些數據記錄將使對應分類的數據樣本丟失大量特征信息,導致模型過擬合或分類不準確。
2. 補全
相對丟棄而言,補全是更加常用的缺失值處理方式。通過一定的方法將缺失的數據補上,從而形成完整的數據記錄,對于后續的數據處理、分析和建模至關重要。常用的補全方法如下。
  • 統計法:對于數值型的數據,使用均值、加權均值、中位數等方法補足;對于分類型數據,使用類別眾數最多的值補足。
  • 模型法:更多時候我們會基于已有的其他字段,將缺失字段作為目標變量進行預測,從而得到最為可能的補全值。如果帶有缺失值的列是數值變量,采用回歸模型補全;如果是分類變量,則采用分類模型補全。
  • 專家補全:對于少量且具有重要意義的數據記錄,專家補足也是非常重要的一種途徑。
  • 其他方法:例如隨機法、特殊值法、多重填補等。

文章來源于大數據DT ,作者宋天龍
原文鏈接://mp.weixin.qq.com/s/raMIIahQ41OugTQ-eSJ0rA

數說

驅動力

缺少字段的值缺失數量有多少)的字段對于模型的影響非常小,那么我們根本就不需要對缺失值進行處理。
因此,后期建模時的字段或特征的重要性判斷也是決定是否處理字段缺失值的重要參考因素之一。
對于缺失值的處理思路是先通過一定方法找到缺失值,接著分析缺失值在整體樣本中的分布占比,以及缺失值是否具有顯著的無規律分布特征,然后考慮后續要使用的模型中是否能滿足缺失值的自動處理,最后決定采用哪種缺失值處理方法。
在選擇處理方法時,注意投入的時間、精力和產出價值,畢竟,處理缺失值只是整個數據工作的冰山一角而已。
在數據采集時,可在采集端針對各個字段設置一個默認值。以MySQL為例,在設計數據庫表時,可通過default指定每個字段的默認值,該值必須是常數。
在這種情況下,假如原本數據采集時沒有采集到數據,字段的值應該為Null,雖然由于在建立庫表時設置了默認值會導致“缺失值”看起來非常正常,但本質上還是缺失的。對于這類數據需要尤其注意。

3. 真值轉換法
在某些情況下,我們可能無法得知缺失值的分布規律,并且無法對于缺失值采用上述任何一種補全方法做處理;或者我們認為數據缺失也是一種規律,不應該輕易對缺失值隨意處理,那么還有一種缺失值處理思路—真值轉換。
該思路的根本觀點是,我們承認缺失值的存在,并且把數據缺失也作為數據分布規律的一部分,將變量的實際值和缺失值都作為輸入維度參與后續數據處理和模型計算中。但是變量的實際值可以作為變量值參與模型計算,而缺失值通常無法參與運算,因此需要對缺失值進行真值轉換。
以用戶性別字段為例,很多數據庫集都無法對會員的性別進行補足,但又舍不得將其丟棄掉,那么我們將選擇將其中的值,包括男、女、未知從一個變量的多個值分布狀態轉換為多個變量的真值分布狀態。
  • 轉換前:性別(值域:男、女、未知)。
  • 轉換后:性別_男(值域1或0)、性別_女(值域1或0)、性別_未知(值域1或0)。
然后將這3列新的字段作為輸入維度替換原來的1個字段參與后續模型計算。
4. 不處理
在數據預處理階段,對于具有缺失值的數據記錄不做任何處理,也是一種思路。這種思路主要看后期的數據分析和建模應用,很多模型對于缺失值有容忍度或靈活的處理方法,因此在預處理階段可以不做處理。
常見的能夠自動處理缺失值的模型包括:KNN、決策樹和隨機森林、神經網絡和樸素貝葉斯、DBSCAN(基于密度的帶有噪聲的空間聚類)等。這些模型對于缺失值的處理思路是:
  • 忽略,缺失值不參與距離計算,例如KNN。
  • 將缺失值作為分布的一種狀態,并參與到建模過程,例如各種決策樹及其變體。
  • 不基于距離做計算,因此基于值的距離做計算本身的影響就消除了,例如DBSCAN。
在數據建模前的數據歸約階段,有一種歸約的思路是降維,降維中有一種直接選擇特征的方法。假如我們通過一定方法確定帶有缺失值(無論

02 不要輕易拋棄異常數據

異常數據是數據分布的常態,處于特定分布區域或范圍之外的數據通常會被定義為異常或“噪音”。產生數據“噪音”的原因很多,例如業務運營操作、數據采集問題、數據同步問題等。
對異常數據進行處理前,需要先辨別出到底哪些是真正的數據異常。從數據異常的狀態看分為兩種:
  • 一種是“偽異常”,這些異常是由于業務特定運營動作產生的,其實是正常反映業務狀態,而不是數據本身的異常規律。
  • 一種是“真異常”,這些異常并不是由于特定的業務動作引起的,而是客觀地反映了數據本身分布異常的分布個案。
大多數數據挖掘或數據工作中,異常值都會在數據的預處理過程中被認為是噪音而剔除,以避免其對總體數據評估和分析挖掘的影響。但在以下幾種情況下,我們無須對異常值做拋棄處理。

數說

驅動力

數據集中的重復值包括以下兩種情況:
  • 數據值完全相同的多條數據記錄。這是最常見的數據重復情況。
  • 數據主體相同但匹配到的唯一屬性值不同。這種情況多見于數據倉庫中的變化維度表,同一個事實表的主體會匹配同一個屬性的多個值。
去重是重復值處理的主要方法,主要目的是保留能顯示特征的唯一數據記錄。但當遇到以下幾種情況時,請慎重(不建議)執行數據去重。
1. 重復的記錄用于分析演變規律
以變化維度表為例。例如在商品類別的維度表中,每個商品對應的同1個類別的值應該是唯一的,例如蘋果iPhone7屬于個人電子消費品,這樣才能將所有商品分配到唯一類別屬性值中。但當所有商品類別的值重構或升級時(大多數情況下隨著公司的發展都會這么做),原有的商品可能被分配了類別中的不同值。如下表所示展示了這種變化。

1. 異常值正常反映了業務運營結果
該場景是由業務部門的特定動作導致的數據分布異常,如果拋棄異常值將導致無法正確反饋業務結果。
例如:公司的A商品正常情況下日銷量為1000臺左右。由于昨日舉行優惠促銷活動導致總銷量達到10000臺,由于后端庫存備貨不足導致今日銷量又下降到100臺。在這種情況下,10000臺和100臺都正確地反映了業務運營的結果,而非數據異常案例。
2. 異常檢測模型
異常檢測模型是針對整體樣本中的異常數據進行分析和挖掘,以便找到其中的異常個案和規律,這種數據應用圍繞異常值展開,因此異常值不能做拋棄處理。
異常檢測模型常用于客戶異常識別、信用卡欺詐、貸款審批識別、藥物變異識別、惡劣氣象預測、網絡入侵檢測、流量作弊檢測等。在這種情況下,異常數據本身是目標數據,如果被處理掉將損失關鍵信息。
3. 包容異常值的數據建模
如果數據算法和模型對異常值不敏感,那么即使不處理異常值也不會對模型本身造成負面影響。例如在決策樹中,異常值本身就可以作為一種分裂節點。
提示:除了拋棄和保留,還有一種思路可對異常值進行處理,例如使用其他統計量、預測量進行替換。但這種方法不推薦使用,原因是這會將其中的關鍵分布特征消除,從而改變原始數據集的分布規律。

03 數據重復就需要去重嗎

此時,我們在數據中使用Full join做跨重構時間點的類別匹配時,會發現蘋果iPhone7會同時匹配到個人電子消費品和手機數碼2條記錄。對于這種情況,需要根據具體業務需求處理。
  • 如果跟業務溝通,兩條數據需要做整合,那么需要確定一個整合字段用來涵蓋2條記錄。其實就是將2條數據再次映射到一個類別主體中。
  • 如果跟業務溝通,需要同時保存兩條數據,那么此時不能做任何處理。后續的具體處理根據建模需求而定。
  • 相關知識點:變化維度表
變化維度表是數據倉庫中的概念。維度表類似于匹配表,用來存儲靜態的維度、屬性等數據,而這些數據一般都不會改變。但是變與

數說

驅動力

  • 如果用戶退貨則會增加反向訂單,并影響物流、配送和倉儲相關的各個運營環節,導致運營資源無端消耗、商品損耗增加、倉儲物流成本增加等問題。
因此,這些問題必須在前期數據采集和存儲時就通過一定機制解決和避免。如果確實產生了此類問題,那么數據工作者或運營工作者可以基于這些重復值來發現規則漏洞,并配合相關部門,最大限度地降低由此而帶來的運營風險。
--END--

不變是一個相對的概念,隨著企業的不斷發展,很多時候維度也會隨著發生變化。因此在某個時間內的維度是不變的,而從整體來看維度也是變化的。
對于維度的變化,有3種方式進行處理:
  • 直接覆蓋原有值。這種情況下每個唯一ID就只對應一個屬性值,這樣做雖然簡單粗暴也容易實現,但是無法保留歷史信息。
  • 添加新的維度行。此時同一個ID會得到兩條匹配記錄。
  • 增加新的屬性列。此時不會新增數據行記錄,只是在原有的記錄中新增一列用于標記不同時期的值。
具體到企業內使用哪種方式,通常由數據庫管理員根據實際情況來決定。
注意:真正的變化維度表或維度表不會以中文做主鍵,通常都會使用數字或字符串類作為唯一關聯ID,本節的示例僅做說明之用。
2. 重復的記錄用于樣本不均衡處理
在開展分類數據建模工作時,樣本不均衡是影響分類模型效果的關鍵因素之一。解決分類方法的一種方法是對少數樣本類別做簡單過采樣,通過隨機過采樣,采取簡單復制樣本的策略來增加少數類樣本。
經過這種處理方式后,也會在數據記錄中產生相同記錄的多條數據。此時,我們不能對其中的重復值執行去重操作。
3. 重復的記錄用于檢測業務規則問題
對于以分析應用為主的數據集而言,存在重復記錄不會直接影響實際運營,畢竟數據集主要是用來做分析的。
但對于事務型的數據而言,重復數據可能意味著重大運營規則問題,尤其當這些重復值出現在與企業經營中與金錢相關的業務場景時,例如:重復的訂單、重復的充值、重復的預約項、重復的出庫申請等。
這些重復的數據記錄通常是由于數據采集、存儲、驗證和審核機制的不完善等問題導致的,會直接反映到前臺生產和運營系統。以重復訂單為例:
  • 假如前臺的提交訂單功能不做唯一性約束,那么在一次訂單中重復點擊提交訂單按鈕,就會觸發多次重復提交訂單的申請記錄,如果該操作審批通過后,會聯動帶動運營后端的商品分揀、出庫、送貨,如果用戶接收重復商品則會導致重大損失;

風向

驅動力

摘 要: 金融行業原本的系統運行處理數據能力較慢,系統內部數據處理加工人員干預較多等多方面因素導致數據不準確、數據質量不高,因此對這些數據進行清洗是必不可少的;本文記錄了對金融行業系統中存在的數據質量問題級數據清洗方法的研究,闡述了影像數據質量的因素,并提出了數據清洗的方法及一般過程.
關鍵詞: 數據質量;數據清洗;清洗方法
1 引言
隨著金融行業的發展,對數據質量的要求變得越來越高,中國人民銀行也對所有金融機構提出了新的報送要求,而金融行業原本使用的系統較多且由不同公司開發完成,數據定義規則也不相同,因此各金融機構要對自己內部的數據進行數據清洗以達到人行的要求、滿足客戶的需要.
2 數據質量與數據清洗
隨著信息化程度的提高,金融機構內部積累了大量的業務數據,這些數據是金融機構進行正確決策的數據基礎,由于“垃圾進,垃圾出”,高質量的數據可以提高金融機構決策的正確性,而質量差的數據則起到相反的作用.所以為了更好的利用這些數據為金融機構服務,很多金融機構紛紛建立了自己的數據中心或者數據倉庫.數據清洗是數據中心或數據倉庫系統的重要環節,是保證數據質量的主要手段
2.1 數據質量
基于信息系統的大背景下,金融機構數據中心中的數據通常是從不同的數據源抽取后存入的.信息系統越大,數據質量的問題就越明顯,給金融機構決策帶來的風險就越高.
2.1.1 數據質量的定義

金融領域數據清洗研究

作者黃成龍

從文獻的角度,數據質量是一個多維的概念,目前還沒有數據質量維度的統一定義,通常的維度包含準確度、完整性、一致性、時效性,而數據對這四個主要維度的滿足程度被定義為數據質量.從滿足業務需求的角度,數據質量被定義為“滿足數據使用者需求的程度”.第一種僅僅從文法的角度進行定義,第二種從實際使用的角度進行定義,都不是很全面和準確.本文將數據質量定義為“通過準確度、完整性、一致性、時效性這四個指標來衡量滿足數據使用者需求的程度”.
2.1.2 數據質量問題的種類
當建立一個信息系統的時候,即使進行了良好的設計和規劃,也不能保證在所有情況下,信息系統中數據的質量都能滿足用戶的要求.用戶錄入錯誤、金融機構合并以及環境隨著時間的推移而改變,這些都會影響所存放數據的質量.信息系統中可能存在的數據質量問題有很多種,從數據質量問題存在范圍的角度分為以下
四種:
1、 屬性(字段)層面.這類錯誤僅局限于單個屬性的值.
例:銀行存儲個人信息中的生日為“2000/02/30”,顯然這是個錯誤的值,因為 2 月沒有 30 號;保險公司的保單系統中,有一個保單記錄,姓名卻是空值;這些都屬于單個屬性錯誤.
2、 記錄層面.這類錯誤表現在一條記錄不同屬性值之間出現的不一致性.
例:證券公司存儲個人信息中的所在省為“山東省”,所在市為“上海市”,省和市明顯不對應;這種就是一條記錄中屬性依賴沖突.
3、 記錄類型.表現為同一數據源中不同的記錄類型之間的不一致性.
例:基金公司記錄張三買了基金的,有兩條記錄,但性別欄卻分別為“男”與“女”兩個不同的值;這種就是記錄與記錄沖突.
4、 數據源層面.表現為數據源中的某些屬性值或記錄與其他數據源中的相關值的不一致性.
例:貸款公司記錄李四的證件號為“1020199004010032”,但實際李四的證件號為“1020199004010036”;這類數據問題就屬于就數據源層面的.

風向

驅動力

清洗程序會處理完所有可以自動處理的數據,對數據清洗程序不能自動處理的情況,產生數據清洗報告,由相應的領域專家手工的處理.這種方式即節約了人力成本,又能保證數據清洗的質量,適用于大數據量的數據源.根據金融機構的情況及要求分析,使用第三種方式——實時人機交互方式進行清洗金融行業的數據是最恰當的方式.
3 金融領域數據清洗的具體方法步驟
一般的清洗方法包括需求分析、信息環境分析、任務定義、方法定義、基本配置,以及基于以上工作獲得數據清洗方案等.通過需求分析明確信息系統的數據清洗需求,通過信息環境分析明確數據所處的信息環境特點,任務定義要明確具體的數據清洗任務目標,方法定義確定合適的數據清洗方法,基本配置完成數據接口等的配置,要形成完整的數據清洗方案,并整理歸檔.
而金融領域的卻有一些區別,為方便本章節介紹,本章以對銀行的征信、貸款類系統進行數據清洗,數據庫用 Oracle,清洗工具用 JE22 開發為例.
3.1 清洗設計與方法
3.1.1 數據模型設計
1、首先要分析情況建立數據清洗的最終模型,即最終要得到的結果
例如:業務號碼|業務種類|發生地點|開戶日期|授信額度|擔保方式|還款方式|剩余還款月數|本月應還款金額|違約次數|姓名|證件號|年收入那么在數據庫中建一張表包含以上的字段;
2、其次要確認各個系統中我們可以得到那些數據,即需進行清洗的數據
例信貸系統中有:業務號碼|業務種類|發生地點|開戶日期|授信額度|擔保方式|還款方式|…
征信系統中有:證件號|還款方式|剩余還款月數|本月應還款金額|違約次數|…
核心系統中有:業務號碼|姓名|證件號|月收入|…
那么需建立分別含有以上字段的三張表;

3、最后我們需要根據初始數據和最終數據,建立許多中間需要的表,用來做數據清理時使用的臨時表,還有建立部分信息的存量表及最終數據的歷史表用來存放基本不變的例如個人信息和為最終數據做備份.
3.1.2 清洗方法設計
在第 2 章結尾我們確認了使用第第三種方式——實時人機交互方式對金融行業的數據進行清洗最為合適,那么接下來以 3.1.1 中例子的內容進行設計:
1、就是要剔除無用的數據,也就是各個系統中|…的部分;
2、要做的是清除的是屬性中的雜質及規范化,確認數據的統一性;
3、就是先在得到的基本表里面做一些基本的格式檢驗,例如檢查日期格式是否正確,姓名是否缺失,發生地是否超長等,如有錯誤通過人工修改后繼續檢驗直到無錯;
4、根據最后需要的結果做一些數據的加工與計算,例如得到的數據是月收入,最終需要的是年收入,則使用月收入*12 等;
5、把基本表中的數據合成跟最終數據一樣的形式的臨時,然后根據業務規則在做一些檢驗,例如還款方式為“一次性”,剩余還款月數>0,那么本月應還款金額就應該為“0.00”等,如有錯誤通過人工修改后繼續檢驗直到無錯;
6、把加工完成的數據提供給人民銀行、業務人員或客戶,并備份到歷史表.
3.2 具體清洗步驟
一般的數據清洗由準備、檢測、定位、修正、驗證五個部分組成,具有靈活、可擴展、交互性好、松耦合的特點;而本文對于金融領域的數據清洗又做了部分調整使其更適用于金融行業,如本章例子中的具體步
驟應為:
3.2.1 數據采集
將各系統文件層的非關系型數據裝載到關系型數據庫接口層表結構中.即將客戶提供的業務數據采集到數

風向

驅動力

據庫接口層的數據層,包括信貸數據的采集與征信數據的采集以及核心提供.通過各個系統進行數據抽取解決了完整性的問題.
此過程通過可 J2EE 編程完成,部分核心代碼如下:

3.2.3 基本數據檢查
檢查數據的正確性,以及相似重復記錄、不完整記錄、邏輯錯誤、異常數據等數據質量問題的檢測,并將其顯示在頁面,且可以通過人工進行修改,修改夠繼續執行檢查直到檢查完全部數據.例如檢查身份信息長度超長,Oracle 中具體存儲過程部分如下:

3.2.2 數據規范化
將數據由接口層表加載到對應的中間接口層表,同時進行數據的規范化工作;例如去除特殊符號和規范英文可通過 JAVA 調用 Oracle 存儲過程完成,具體命令如下類似:

風向

驅動力

修改則通過 J2EE 工程的 JSP 頁面實現,如下類似

3.2.5 高級數據校驗
高級數據校驗也就是最終數據校驗,要檢查數據層計算指標的業務邏輯性.例如之前說的還款方式為“一次性”,剩余還款月數>0,那么本月應還款金額就應該為“0.00”等,若不為“0.00”同 3.2.3 一樣顯示在頁面上,但修改時則需要登錄數據庫進行修改,提示是如下類似:

通過 3.2.2 規范化以及本節的處理,解決了準確度的問題.
3.2.4 數據加工
這一步的主要功能:根據金融機構的業務規則或基礎指標對數據進行一系列的加工計算從而達到要求.
例在信貸系統中還款方式“1”代表每 1 個月還一次,“6”則帶代表每半年還一次,而征信系統中的還款方式“1”代表每年還 1 次;則“2”代表每半年換一次,需要做統一規定,轉換為 1 為每月一還,2 為每季度,3為每半年,4 為每年,通過這種方法解決了一致性的問題.還有例如:要求違約次數最高為兩位數,超過 99 次按 99 次計算,則代碼如下:

3.2.6 整理并歸檔
全部修改完成后,繼續執行,對檢測結果進行統計,以獲得全面的數據質量信息,并將相關信息整理歸檔,最后提示完成.并且通過每天的數據第二日就進行處理解決了時效性的問題,至此決定數據質量的準確度、完整性、一致性、時效性這四個指標的滿足程度基本都達到最高.

經過這一系列的處理之后,得到規范且準備的數據,也就完成了數據清洗.提供給人民銀行也完全可以達到要求;因為有歷史歸檔表,在客戶查詢自己像違約次數這類資料時可以準確提供;客戶新辦貸款時,業務人員也可以輕松確認該客戶的信息以確定是否發放貸款或確定發放金額;充分體現了數據清洗的作用.
4 總結
在本文中,論述了數據質量的概念、種類及影響數據質量問題的因素.并在分析總結已有的數據質量概念的基礎上提出了自己對數據質量的定義.數據清洗是提高數據質量的有效途徑,本文中分析討論了數據清洗的概念和原理,提出了對金融行業進行數據清洗的一般過

風向

驅動力

程.研究了數據清洗的內容和清洗的過程,根據不同的數據質量問題,分析介紹了相應的數據清洗的方法.金融機構中數據具有很強的業務相關性,針對該特點提出了基于業務邏輯的屬性清理方法.清理方法首先分析業務數據的規律和特點,將這些數據的規律和特點作為業務邏輯規則存入規則庫中,清洗工具根據這些業務規則進行數據清洗.這種根據具體業務邏輯規則進行的數據清洗,可以更加有效的對數據進行清洗.
致謝 在此,我們向對本文的工作給予支持和建議的同行,尤其是北京航空航天大學計算學院孫海龍老師所教的信息檢索班上的同學和老師表示感謝.
參考文獻:
[1] 曹建軍,習興春,陳爽,紹衍振.數據清洗及其一般性系統框架.計算機科學,2012-11,39(11A):207-211.
[2] 宋金玉,陳爽,郭大鵬,王內蒙.數據質量與數據清洗方法.指揮信息系統與技術,2013-10,4(5):63-70.
[3] 葉鷗,張璟,李懷軍.中文數據清洗研究綜述.計算機工程與應用, 2012,48(14):121-129.
[4] [美]阿拉派蒂.Oracle Database 11g 數據庫管理藝術.鐘鳴等譯,北京:人民郵電出版社,2010
--END--

導讀:數據分析整個框架里面比較關鍵除了模型本身以外,更多依賴的是豐富高質量的數據源。在數據收集時需要捕獲有關源的關鍵元數據,如來源、大小、時效性和相關內容的額外知識。迭代地識別當前數據資產基礎和這些數據源的差距,使用分析、可視化、 挖掘或其他數據科學方法探索這些數據源,以定義模型算法輸入或模型假設。

? 由于原始數據中或多或少存在一些缺失、損壞的臟數據。如果不處理會導致模型失效。就好比一個水平很高的廚師,給到的原材料如果不衛生不干凈,那也很難做出一道讓人滿意的菜品。因此在整合數據建立模型之前, 應先評估數據的質量,對數據進行清洗。
? 當然,數據清洗除了能保障高質量的數據輸出之外。也能夠同步對數據探索。數據清洗和數據探索的作用是相輔相成的,通過數據探索,檢閱數據的特征描述、分布推斷以及結構上的優化,能更好的為數據清洗選擇合適的清洗方法。而數據清洗后的數據則可以更有效的進行數據探索。本文重點講解數據清洗的一些方法和注意事項。接下來,介紹數據清洗的三個重要部分:異常值判別、缺失值處理以及格式內容清洗。

淺談數據分析中的數據清洗方法策略

轉自老司機聊數據 作者成于念
原文鏈接://mp.weixin.qq.com/s/6g7-v8acuXZkQi8RiXjCSA

一、異常值判別

數據清洗的第一步是識別會影響分析結果的“異常”數據,然后判斷是否剔除。異常值通常有以下幾個表現:
(1)缺乏完整性
? 完整性即記錄數量名稱是否完整,內部數據由于屬于企業內部自己

一線

驅動力

生產的數據,相對而言比較好掌控檢查。而如果是采購的外部數據,例如:城市土地人口宏觀數據或者某城的二手房交易數據,則完整性需要外部數據供應商提出相應保障。
(2)缺乏準確性
? 收集的數據必須要能夠正確反映業務需求,否則分析結論會對業務造成誤導。這方面的檢查,需要首先理解業務背景,第二需要判斷收集的此類數據以及數據項是否可以轉換為分析項目所需數據。如果部分數據不符合業務邏輯,或者數據準確性很差,則對數據分析造成很大的影響。
(3)缺乏唯一性
? 數據的唯一性應該從兩個角度檢查,常見的錯誤是多個數據一個編碼,例如產品住宅,商鋪都是同一編碼,或者同時一個實物對應多個編碼。如果導入系統,系統需要能夠識別,否則將會影響分析主體的唯一性。
目前常用的識別異常數據的方法有物理判別法和統計判別法:

簡而言之,例如導入數值有:10,11,17,9,20,174這幾個,我們可以通過以上判別方法,第一時間發現174這個值存在異常(與均值、標準差等系數進行對比得出異常值)。
? 當然,這種系統判別并進行刪除異常值的方式雖然高效,但也存在風險。因為每個方法不盡相同,得出的異常值也有可能存在偏差。為了減少這種誤刪的概率,可以將多種統計判別方法結合使用,并且要找出異常值出現的原因。是手工錄入錯誤還是數據接收過程中出錯。同時,如果發現有多個異常值,建議逐個刪除,即刪除一個后再進行檢驗。
?在數據缺失嚴重的情況下,分析結果會失真。因此需要將缺失值進行填補,傳統方式檢查出來的空值有人工進行補充,但是需要補充人員找到相關資料檢驗無誤后再進行填補。當然如果對于結果要求并不是特別大,且我們能通過數據找到規律的情況下,可以采用合理的方法自動填補空缺值。例如:可以根據身份證號碼,自動判斷人員的性別。常見的方法有平均值填充、K最近距離法、回歸法、極大似線估計法等。(具體描述查看下圖)

二.缺失值處理

值得注意的是,數據收集的過程中,如果對于某個字段要求必輸,則可以通過系統導入時自動判斷是否為null,如果為null則導入不成功,從源頭控制數據質量。
? 當然,我們在做數據分析的過程中,也要看數據量的大小。一般情況下數據量越大,異常值和缺失值對整體分析結果的影響會逐漸變小。所以,在“大數據”模式下,如果異常值和缺失值較小的情況下,可以忽略減輕部分工作量,而側重對數據結構合理性進行分析。

一線

驅動力

日常工作中,分析師會接到一些專項分析的需求,首先會搜索腦中的分析體悉,根據業務需求構建相應的分析模型(不只是機器學習模型),根據模型填充相應維度表,這些維度特征表能夠被使用的前提是假設已經清洗干凈了。
但真正的原始表是混亂且包含了很多無用的冗余特征,所以能夠根據原始數據清洗出相對干凈的特征表就很重要。
前兩天在Towards Data Science上看到一篇文章,講的是用Pandas做數據清洗,作者將常用的清洗邏輯封裝成了一個個的清洗函數。

三.格式內容清洗

如果數據是由系統日志而來,那么通常在格式和內容方面,會與元數據的描述一致。而如果數據是由人工收集或用戶填寫而來,則有很大可能性在格式和內容上存在一些問題,簡單來說,格式內容問題有以下幾類:
1、時間、日期、數值、全半角等顯示格式不一致
? 這種問題通常與輸入端有關,在整合多來源數據時也有可能遇到,將其處理成一致的某種格式即可。
2、內容中有不該存在的字符
? 某些內容可能只包括一部分字符,比如身份證號是數字+字母,中國人姓名是漢字(趙C這種情況還是少數)。最典型的就是頭、尾、中間的空格,也可能出現姓名中存在數字符號、身份證號中出現漢字等問題。這種情況下,需要以半自動校驗半人工方式來找出可能存在的問題,并去除不需要的字符。
3、內容與該字段應有內容不符
? 姓名寫了性別,身份證號寫了手機號等等,均屬這種問題。但該問題特殊性在于:并不能簡單的以刪除來處理,因為成因有可能是人工填寫錯誤,也有可能是前端沒有校驗,還有可能是導入數據時部分或全部存在列沒有對齊的問題,因此要詳細識別問題類型。
格式內容問題是比較細節的問題,但很多分析失誤都是栽在這個坑上,比如跨表關聯或VLOOKUP失敗(多個空格導致工具認為“成于念”和“成 于 念”不是一個人)、統計值不全(數字里摻個字母當然求和時結果有問題)等等,需要大家重點關注。
? 數據質量是數據經營分析的基礎,如何確保最終導入的數據質量是我們必須要引起重視的問題之一。只有通過解決數據的信度問題和效度的問題,才能為構建分析指標體系夯實數據基礎。
--END--

5大SQL數據清洗方法!

文章來源于數據管道 ,作者寶器原文鏈接://mp.weixin.qq.com/s/6g7-v8acuXZkQi8RiXjCSA

//towardsdatascience.com/the-simple-yet-practical-data-cleaning-codes-ad27c4ce0a38

而公司的業務數據一般存儲在數據倉庫里面,數據量很大,這時候用Pandas處理是不大方便的,更多時候用的是HiveSQL和MySql做處理。
基于此,我拓展了部分內容,寫了一個常用數據清洗的SQL對比版,腳本很簡單,重點是這些清洗場景和邏輯,大綱如圖:

熱點

驅動力

缺失值:NULL做運算邏輯時,返回的結果還是NULL,這可能就會出現一些腳本運行正確,但結果不對的BUG,此時需要將NULL值填充為指定值。

01 刪除指定列、重命名列

場景:
多數情況并不是底表的所有特征(列)都對分析有用,這個時候就只需要抽取部分列,對于不用的那些列,可以刪除。
重命名列可以避免有些列的命名過于冗長(比如Case When 語句),且有時候會根據不同的業務指標需求來命名。

場景:理解用戶行為的重要一項是去假設用戶的心理,這會用到用戶的反饋意見或一些用研的文本數據,這些文本數據一般會以字符串的形式存儲在數據庫中,但用戶反饋的這些文本一般都會很亂,所以需要從這些臟亂的字符串中提取有用信息,就會需要用到文字符串處理函數。

刪除列Python版:
df.drop(col_names, axis=1, inplace=True)
刪除列SQL版:
1、select col_names from Table_Name
2、alter table tableName drop column columnName
重命名列Python版:
df.rename(index={'row1':'A'},columns ={'col1':'B'})
重命名列SQL版:
select col_names as col_name_B from Table_Name

因為一般情況下是沒有刪除的權限(可以構建臨時表),反向思考,刪除的另一個邏輯是選定指定列(Select)。

02 重復值、缺失值處理

場景:比如某網站今天來了1000個人訪問,但一個人一天中可以訪問多次,那數據庫中會記錄用戶訪問的多條記錄,而這時候如果想要找到今天訪問這個網站的1000個人的ID并根據此做用戶調研,需要去掉重復值給業務方去回訪。

重復值處理Python版:
df.drop_duplicates()
重復值處理SQL版:
1、select distinct col_name from Table_Name
2、select col_name from Table_Name group bycol_name
缺失值處理Python版:
df.fillna(value = 0)
df1.combine_first(df2)
缺失值處理SQL版:
1、select ifnull(col_name,0) value from Table_Name
2、select coalesce(col_name,col_name_A,0) as value from Table_Name
3、select case when col_name is null then 0 else col_name end from Table_Name

03 替換字符串空格、清洗*%@等垃圾字符、字符串拼接、分隔等字符串處理

熱點

驅動力

字符串處理Python版:
## 1、空格處理
df[col_name] = df[col_name].str.lstrip()?
## 2、*%d等垃圾符處理
df[col_name].replace(' &#.*', '', regex=True, inplace=True)
## 3、字符串分割
df[col_name].str.split('分割符')
## 4、字符串拼接
df[col_name].str.cat()
字符串處理SQL版:
## 1、空格處理
select ltrim(col_name) from Table_name?
## 2、*%d等垃圾符處理
select regexp_replace(col_name,正則表達式) from Table_name?
## 3、字符串分割
select split(col_name,'分割符') from Table_name?
## 4、字符串拼接
select concat_ws(col_name,'拼接符') from Table_name?

場景:有時候你需要的特征存儲在不同的表里,為便于清洗理解和操作,需要按照某些字段對這些表的數據進行合并組合成一張新的表,這樣就會用到連接等方法。

合并處理Python版:
左右合并
1、pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
? ? ? ? ?left_index=False, right_index=False, sort=True,
? ? ? ? ?suffixes=('_x', '_y'), copy=True, indicator=False,
? ? ? ? ?validate=None)
2、pd.concat([df1,df2])
上下合并
df1.append(df2, ignore_index=True, sort=False)
合并處理SQL版:
左右合并
select A.*,B.* from Table_a A join Table_b B on A.id = B.id
select A.* from Table_a A left join Table_b B on A.id = B.id
上下合并
## Union:對兩個結果集進行并集操作,不包括重復行,同時進行默認規則的排序;
## Union All:對兩個結果集進行并集操作,包括重復行,不進行排序;
select A.* from Table_a A?
union
select B.* from Table_b B?

04 合并處理

熱點

驅動力

# UNION 因為會將各查詢子集的記錄做比較,故比起UNION ALL ,通常速度都會慢上許多。一般來說,如果使用UNION ALL能滿足要求的話,務必使用UNION ALL。

場景:假如現在你是某寶的分析師,要分析今年不同店的不同品類銷售量情況,需要找到那些銷量較好的品類,并在第二年中加大曝光,這個時候你就需要將不同店里不同品類進行分組,并且按銷量進行排序,以便查找到每家店銷售較好的品類。

窗口分組Python版:
df['Rank'] = df.groupby(by=['Sale_store'])['Sale_Num'].transform(lambda x: x.rank(ascending=False))
窗口分組SQL版:
select?
? *?
from
? (
? Select?
? ? *,
? ? row_number() over(partition by Sale_store order by Sale_Num desc) rk
? from?
? ? table_name
? ) b where b.rk = 1

05 窗口函數的分組排序

Demo數據如上,一共a,b,c三家店鋪,賣了不同品類商品,銷量對應如上,要找到每家店賣的最多的商品。

可以很清晰的看到,a店鋪賣的最火的是蔬菜,c店鋪賣的最火的是雞肉,b店鋪?
嗯,b店鋪很不錯,賣了888份寶器狗。
總結,上面的內容核心是掌握這些數據清洗的應用場景,這些場景幾乎可以涵蓋90%的數據分析前數據清洗的內容。而對于分析模型來說,SQL和Python都是工具,如果熟悉SQL,是能夠更快速、方便的將特征清洗用SQL實現。

《驅動力》
聯系電話:15801365057
地址:北京市朝陽區朝外大街甲6號
郵箱:kai.zhao@yeepay.com

數據驅動變革

 Copyright ? 2024 陜西妙網網絡科技有限責任公司 All Rights Reserved

增值電信業務經營許可證:陜B2-20210327 |