數據質量一般是指數據值的質量,包括準確性、完整性和一致性。數據的準確性是指數據不包含錯誤或異常值、完整性是指數據不包含缺失值、一致性是數據在各個數據源中都是相同的。廣義的數據質量還包括數據總體的有效性,例如,數據總體是不是可信的、數據的取樣是否合理等。本文的數據質量分析,是指對原始數據值的質量進行分析,以檢查數據的質量。沒有可信的數據,數據分析將是空中樓閣,所以,數據分析的前提就是要保證數據質量是可信的。git
數據質量分析的主要任務是檢測原始數據中是否存在髒數據,髒數據通常是指不符合要求,以及不能直接進行相應分析的數據,髒數據通常包括:github
一般狀況下,原始數據中都會存在不完整(有缺失值)、不一致、數據異常等問題,這些髒數據會下降數據的質量,影響數據分析的結果,所以,在進行數據分析以前,須要對數據進行清洗、集成、轉換等處理,以提升數據的質量。對於內容未知和不一致的數據,一般須要人工識別,進而才能肯定處理方法,本文重點介紹缺失值和異常值的分析方法。函數
數據的缺失通常是指觀測的缺失和觀測中變量值的缺失,二者都會形成分析結果的不許確。觀測的缺失會致使由樣本數據推斷出的整體數據的性質和特色出現誤差。測試
本小節涉及的是樣本中數據值的分析,使用簡單的統計分析,能夠獲得含有缺失值的屬性的個數和樣本空間的缺失率。缺失的數據可能會對數據分析的結果產生偏差,從而使樣本數據不能很好地表明數據整體。編碼
用做分析缺失值的數據集:spa
df <- data.frame(col1 = c(1,3, NA,7,5), col2 = c("a", NA,"b", "a","d"), col3 = c(TRUE, FALSE, NA, TRUE,FALSE), col4 = c(2.5, 4.2, 3.2, NA,1.4), stringsAsFactors = TRUE)
1,識別缺失數據.net
在R語言中,缺失值一般以NA表示,可使用函數is.na()判斷缺失值是否存在,另外,函數complete.cases()經過識別樣本數據是否完整,從而判斷缺失狀況。code
(1)is.na()標記出現NA的變量blog
is.na()返回邏輯值向量,當變量值爲NA時,把該元素所在的值設置爲TRUE,代表該元素是NA。事件
> is.na(df) col1 col2 col3 col4 [1,] FALSE FALSE FALSE FALSE [2,] FALSE TRUE FALSE FALSE [3,] TRUE FALSE TRUE FALSE [4,] FALSE FALSE FALSE TRUE [5,] FALSE FALSE FALSE FALSE
(2) complete.cases()函數測試觀測是否完整
complete.cases()是stats包中的一個函數,返回一個邏輯向量,向量的每一個元素表示每一個觀測是否完整,完整是指觀測中的全部變量都不包含缺失值。
complete.cases(df) [1] TRUE FALSE FALSE FALSE TRUE
2,缺失值分析
缺失值分析包括:含有缺失值的記錄和屬性,包含缺失值的觀測總數和缺失率。
(1)查看含有缺失值的記錄和屬性
使用complete.cases()函數來查看包含缺失值的觀測
df[!complete.cases(df), ] col1 col2 col3 col4 2 3 <NA> FALSE 4.2 3 NA b NA 3.2 4 7 a TRUE NA
(2)包含缺失值的統計數據
各列包含異常值的數量:
colSums(is.na(df)) col1 col2 col3 col4 1 1 1 1
包含異常值的總行數:
sum(!complete.cases(df)) [1] 3
(3)缺失率
包含缺失值的觀測數量佔比是60%
mean(!complete.cases(df)) [1] 0.6
3,處理缺失值
對缺失值的處理,經常使用的處理方法是刪除缺失值所在的記錄,均值替換和插補。插補法比較複雜,本文暫不討論該主題。
(1)刪除
當缺失值所佔的比例比較少時,可使用刪除法,以減小樣本數據量來換取數據的完整性。
刪除缺失值能夠經過na.omit()函數移除全部含有缺失值的觀測。
df <- na.omit(df)
一般狀況下,字符類型的缺失值能夠不作任何處理;若是缺失值是因子,且佔比較少,能夠直接刪除:
df <- df[!is.na(df$col2),]
(2)均值替換
均值替換法屬於插補法的一種簡單形式,適用於缺失率低的場景。
使用均值來替換缺失值,這是處理缺失值中比較常見的做法。對於數值類型的缺失值,通常用該變量在其餘有效觀測中的均值來替換該缺失值。若是是非數值型變量,則使用該變量其餘所有有效觀測值的衆數來替換。
df$col1[is.na(df$col1)] <- round(mean(df$col1, na.rm = TRUE)) df$col4[is.na(df$col4)] <- mean(df$col4, na.rm = TRUE)
衆數,簡單地說,就是在一組數據中出現次數最多的那個數據,是原數據,而不是出現的次數。例如:一組數據 1,2,3,3,4的衆數是3,而1,2,3,4,5沒有衆數。
不一樣於平均值和中位數,衆數能夠是數字數據,也能夠是字符數據。R沒有標準的內置函數來計算衆數,所以,咱們將建立一個用戶自定義函數來計算數據集的衆數。
該函數將向量做爲輸入,並將衆數值做爲輸出。
getmode <- function(v) { uniqv <- unique(v) uniqv[which.max(tabulate(match(v, uniqv)))] }
對因子數據作衆數處理:
df$col2[is.na(df$col2)] <- getmode(na.omit(df$col2))
(3)不處理缺失值
在數據集中保留缺失值
異常值在統計學上的全稱是疑似異常值,也稱做離羣點,異常值的分析也稱做離羣點分析。異常值是指樣本中出現的「極端值」,數據值看起來異常大或異常小,其分佈明顯偏離其他的觀測值。異常值分析是檢驗數據中是否存在不合常理的數據,在數據分析中,既不能忽視異常值的存在,也不能簡單地把異常值從數據分析中剔除。重視異常值的出現,分析其產生的緣由,經常成爲發現新問題進而改進決策的契機。
1,簡單統計量分析
對變量作一個描述性分析,進而查看哪些數據是不合理的。經常使用的統計量是最大值和最小值,用來判斷變量的取值是否超出了合理的範圍,例如,客戶年齡的最大值是199,該取值就存在異常。
2,3σ原則
若是數據服從正態分佈,在3σ原則下,異常值被定義爲一組測定值中與平均值的誤差超過三倍標準差的值。在正態分佈下,距離平均值3σ以外的值出現的機率爲 P(|x-μ|>3σ)<=0.003,屬於極個別的小几率事件。
若是數據不服從正態分佈,也能夠用遠離平均值的多少倍標準差來描述。
3,箱型圖分析
箱線圖提供了識別異常值的一個標準方法:
異常值一般被定義爲小於 QL - l.5 IQR 或者 大於 Qu + 1.5 IQR的值,QL稱爲下四分位數, Qu稱爲上四分位數,IQR稱爲四分位數間距,是Qu上四分位數和QL下四分位數之差,其間包括了所有觀察值的一半。
4,異常值的處理
在數據處理時,異常值的處理方法,需視具體狀況而定。有時,異常值也多是正常的值,只不過異常的大或小,因此,不少狀況下,要先分析異常值出現的可能緣由,再判斷如何處理異常值。
處理的異常值的經常使用方法有:
數據不一致性是指數據的矛盾性,主要是因爲數據源不一樣,致使數據編碼的不一致;例如,對於一組數據,性別是M和F,而其餘數據源中使用Male和Female表示性別,那麼這兩種數據就產生編碼不一致性的問題。
另外,數據更新不一樣步也容易致使的數據不一致性,例如,同一我的的工做地點,在不一樣的數據表中,多是不一樣的,這就是在更新數據時,因爲更新的不一樣步致使數據出現不一致性。
當數據出現不一致性時,須要對數據進行清洗和集成操做,去除冗餘數據、統一變量名、統一數據的計量單位等,並使用最新的數據來消除不一致性。
參考文檔: