数据分析 第一篇:数据质量分析(值分析)

数据质量一般是指数据值的质量,包括准确性、完整性和一致性。数据的准确性是指数据不包含错误或异常值、完整性是指数据不包含缺失值、一致性是数据在各个数据源中都是相同的。广义的数据质量还包括数据总体的有效性,例如,数据总体是不是可信的、数据的取样是否合理等。本文的数据质量分析,是指对原始数据值的质量进行分析,以检查数据的质量。没有可信的数据,数据分析将是空中楼阁,所以,数据分析的前提就是要保证数据质量是可信的。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,箱型图分析

箱线图提供了识别异常值的一个标准方法:

异常值一般被定义为小于 Q- l.5 IQR 或者 大于 Q+ 1.5 IQR的值,QL称为下四分位数, Qu称为上四分位数,IQR称为四分位数间距,是Qu上四分位数和QL下四分位数之差,其间包括了所有观察值的一半。

4,异常值的处理

在数据处理时,异常值的处理方法,需视具体状况而定。有时,异常值也多是正常的值,只不过异常的大或小,因此,不少状况下,要先分析异常值出现的可能缘由,再判断如何处理异常值。

处理的异常值的经常使用方法有:

  • 删除含有异常值的记录;
  • 插补,把异常值视为缺失值,使用缺失值的处理方法进行处理,好处是利用现有数据对异常值进行替换,或插补;
  • 不处理,直接在含有异常值的数据集上进行数据分析;

三,一致性分析

数据不一致性是指数据的矛盾性,主要是因为数据源不一样,致使数据编码的不一致;例如,对于一组数据,性别是M和F,而其余数据源中使用Male和Female表示性别,那么这两种数据就产生编码不一致性的问题。

另外,数据更新不一样步也容易致使的数据不一致性,例如,同一我的的工做地点,在不一样的数据表中,多是不一样的,这就是在更新数据时,因为更新的不一样步致使数据出现不一致性。

当数据出现不一致性时,须要对数据进行清洗和集成操做,去除冗余数据、统一变量名、统一数据的计量单位等,并使用最新的数据来消除不一致性。

 

 

参考文档:

数据分析中的缺失值处理

Dealing with Missing Values