R語言數據質量分析

R語言數據質量分析

數據質量分析是數據挖掘中數據準備過程的重要一環,是數據預處理的前提,也是數據挖掘分析結論有效性和準確性的基礎,沒有可信的數據,數據挖掘構建的模型將是空中樓閣。

數據質量分析的主要任務是檢查原始數據中是否存在髒數據,髒數據一般是指不符合要求,以及不能直接進行相應分析的數據。在常見的數據挖掘工作中,髒數據包括:缺失值、異常值、不一致的值,和重複數據及含有特殊符號(如#、¥、*)的數據。

接下來,我們主要對數據中的缺失值、異常值和一致性進行分析。

缺失值分析

數據的缺失主要包括記錄的缺失和記錄中某個字段信息的缺失,兩者都會造成分析結果的不準確,以下從缺失值產生的原因及影響等方面展開分析。

缺失值一般由以下幾個原因產生:

  1. 有些信息暫時無法獲取,或者獲取信息的代價太大;

  2. 有些信息是被遺漏的。可能是因為輸入時認為不重要、忘記填寫或對數據理解錯誤等一些人為原因而遺漏,也可能是由於數據採集設備的故障、存儲介質的故障、傳輸媒體的故障等非人為原因而丟失;

  3. 屬性值不存在。在某些情況下,缺失值並不意味著數據有錯誤,對一些對象來說某些屬性值是不存在的,如一個未婚者的配偶姓名、一個兒童的固定收入等。

缺失值的存在,將會產生以下一些影響:

  1. 數據挖掘建模將丟失大量的有用信息;

  2. 數據挖掘模型所表現出的不確定性更加顯著,模型中蘊含的規律更難把握;

  3. 包含空值的數據會使建模過程陷入混亂,導致不可靠的輸出。

使用簡單的統計分析,可以得到含有缺失值的屬性的個數,以及每個屬性的未缺失數、缺失數與缺失率等。

缺失值的處理,從總體上來說分為刪除存在缺失值的記錄、對可能值進行插補和不處理三種情況。

異常值分析

異常值分析是檢驗數據是否有錄入錯誤以及含有不合常理的數據。忽視異常值的存在是十分危險的,不加剔除地把異常值包括進數據的計算分析過程中,會給結果帶來不良影響。重視異常值的出現,分析其產生的原因,常常成為發現問題進而改進決策的契機。

異常值是指樣本中的個別值,其數值明顯偏離其餘的觀測值。異常值也稱為離群點,異常值分析也被稱為離群點分析。

簡單統計量分析

可以先對變量作一個描述性統計,進而查看哪些數據是不合理的。最常用的統計量是最大值和最小值,用來判斷這個變量的取值是否超出了合理的範圍。例如,客戶年齡的最大值為199歲,則該變量的取值存在異常。

3σ原則

如果數據服從正態分佈,在3σ原則下,異常值被定義為一組測定值中與平均值的偏差超過三倍標準差的值。在正態分佈的假設下,距離平均值3σ之外的值出現的概率為P(|x-µ|>3σ)<=0.003,屬於極個別的小概率事件。如果數據不服從正態分佈,也可以用遠離平均值的多少倍標準差來描述。

箱線圖分析

箱線圖提供了識別異常值的一個標準:異常值通常被定義為小於QL-1.5IQR或大於QU+1.5IQR的值。QL稱為下四分位數,表示全部觀察值中有四分之一的數據取值比它小;QU稱為上四分位數,表示全部觀察值中有四分之一的數據取值比它大;IQR稱為四分位數間距,是上四分位數QU與下四分位數QL之差,其間包含了全部觀察值的一半。

R語言數據質量分析

箱線圖依據實際數據繪製,沒有對數據作任何限制性要求,如服從某種特定的分佈形式,它只是真實直觀地表現數據分佈的本來面貌;另外,箱線圖判斷異常值的標準以四分位數和四分位距為基礎,四分位數具有一定的魯棒性;多達25%的數據可以變得任意遠而不會很大地擾動四分位數,所以異常值不能對這個標準施加影響。由此可見,箱線圖識別異常值的結果比較客觀,在識別異常值方面有一定的優越性。

某餐飲系統中的銷售額數據可能出現缺失值和異常值,該數據的下載地址為:https://github.com/windform/R/tree/master/R%E8%AF%AD%E8%A8%80%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98/%E6%95%B0%E6%8D%AE%E8%B4%A8%E9%87%8F%E5%88%86%E6%9E%90/chapter3/data

分析餐飲系統日銷量數據可以發現,其中有部分數據時缺失的,但是如果數據記錄和屬性較多,使用人工分辨的方法就很不切合實際,所以這裡需要編寫程序來檢測出含有缺失值的記錄和屬性以及缺失率個數和缺失率等。同時,通過觀察可以看出日銷量額數據也含有異常值,由於這裡數據量較大,所以使用箱線圖來檢測異常值,R語言代碼如下:

>#讀入數據

> saledata

># 缺失值檢測 並打印結果,由於R把TRUE和FALSE分別當作1、0,可以用sum()和mean()函數來分別獲取缺失樣本數、缺失比例

> sum(complete.cases(saledata))

[1] 200

> sum(!complete.cases(saledata))

[1] 1

> mean(!complete.cases(saledata))

[1] 0.004975124

> saledata[!complete.cases(saledata), ]

日期 銷量

15 2015/2/14 NA

># 異常值檢測箱線圖

> sp

> title("銷量異常值檢測箱線圖")

> xi

> sd.s

> mn.s

> points(xi,mn.s,col="red", pch=18)

> arrows(xi,mn.s - sd.s, xi, mn.s + sd.s, code = 3, col = "pink", angle = 75, length=.1)

> text(rep(c(1.05, 1.05, 0.95, 0.95), length = length(sp$out)),

+ labels = sp$out[order(sp$out)], sp$out[order(sp$out)] +

+ rep(c(150, -150, 150, -150), length = length(sp$out)), col = "red")

R語言數據質量分析

由運行代碼結果可以看出,缺失值個數輸出結果為“1”,佔樣本總量的0.497%,缺失值位於第15行,2015年2月14日銷量缺失。

在生成的箱線圖中,粉紅色箭頭表示的是一個標準差的區間,可以看出箱線圖中超過上下界的8個銷售額數據。結合具體業務可以把865、4060.3、4065.2歸為正常值,將60、22、51、6607.4、9106.44歸為異常值。最後確定過濾規則為日銷量在400以下、5000以上則屬於異常數據,編寫過濾程序,進行後續處理。

一致性分析

數據不一致性是指數據的矛盾性、不相容性。直接對不一致的數據進行挖掘,可能會產生與實際相違背的挖掘結果。

在數據挖掘過程中,不一致數據的產生主要發生在數據集成的過程中,肯呢個是由被挖掘數據來自於不同的數據源、對於重複存放的數據未能進行一致性更新造成的。例如,兩張表中都存儲了用戶的電話號碼,但在用戶的電話號碼發生改變時只更新了一張表中的數據,那麼這兩張表中就有了不一致的數據。


分享到:


相關文章: