【学习记录】探索性数据分析(二)

接上文

缺失值 Missing Value

在数据集中我们经常会遇到异常值,但是异常值并不能阻止我们对数据进行下一步的分析,此时我们有两个选择:

1. 将具有异常值的数据记录全部删除;

diamonds2 <- diamonds %>% 
  filter(between(y, 3, 20))

2. 将某条记录中的异常值替换为缺失(NA);ifelse()有三个参数:第一个参数应该是一个逻辑判断test。当test为真时,结果将包含第二个参数的值yes,当test为假时,结果将包含第三个参数的值no。

diamonds2 <- diamonds %>% 
  mutate(y = ifelse(y < 3 | y > 20, NA, y))

我们并不推荐使用第一种做法, 因为当我们对每一列内容进行异常值判断并删除后,很有可能发现,一些质量较低的数据集中的大部分记录都被删除了,极端情况下可能得到一个空的数据集。因此我们推荐使用第二种做法, 使用缺失值NA来代替异常值。

ggplot在对空值进行绘制时会进行提示,告知部分数据已经被替换为空值无法进行绘制,此处我们使用geom_point绘制过滤后的(x,y)散点图。

ggplot(data = diamonds2) + geom_point(mapping = aes(x = x, y = y))

Warning message:
Removed 9 rows containing missing values (geom_point). 

如果我们需要查看缺失值的其余字段数值分布与非缺失值的其余字段的分布时,则需要额外创建一个字段用于判断。此处可以使用is.na()方法构造一个新的字段。比如查看Y值缺失的钻石的X与其余钻石X的数值分布差异。(该用例与原书不同,原书使用了flight数据集,为避免引入额外的数据集,本文直接在diamonds数据集中进行了类似的操作)

diamonds2 %>% mutate(ymissing = is.na(y), nx = x) %>% 
ggplot(mapping = aes(nx)) + 
geom_freqpoly(mapping = aes(colour = ymissing), binwidth=0.3)

由于该数据中仅存在9个异常值,因此ymissing=True的折线数值较低,此时使用(一)中提到的方法将y轴值域减小,查看分布。

diamonds2 %>% mutate(ymissing = is.na(y), nx = x) %>% 
ggplot(mapping = aes(nx)) + 
geom_freqpoly(mapping = aes(colour = ymissing), binwidth=0.3) +
coord_cartesian(ylim = c(0, 20))

 

协变 Covariation

如果变差描述变量内部的行为,那么协变就用于描述变量之间的关系。协变是指两个或多个变量的值以一种相关的方式一起变化的趋势。发现协变变的最好方法是观察两个或多个变量之间的关系。如何观察协变做同样取决于所涉及变量的类型。

1. 一个离散量和一个连续量

通常,我们想要探索一个被分类变量分解的连续变量的分布,就像(一)中表示频率的直方图一样(geom_freqpoly)。但是其形态对于这类比较用处有限,因为高度是由计数给出的。这意味着,如果一个群体比其他群体小得多,就很难看出形状上的差异。例如,让我们探索一下钻石的价格如何随其质量变化:

ggplot(data = diamonds, mapping = aes(x = price)) + 
geom_freqpoly(mapping = aes(colour = cut), binwidth = 500)

由于每一类切割方式的钻石在数量上差异很大,所以我们无法直观的看出价格上的数值分布差异。但是我们可以转换一下思路,将绝对数量转变为相对数量,即查看每个价格间隔上钻石的数量占该切割类型总数量的比例,即将各类钻石价格曲线中的数值归一化至了[0,1]内,且各分量数值之和等于1。

ggplot(data = diamonds, mapping = aes(x = price, y = ..density..)) + 
  geom_freqpoly(mapping = aes(colour = cut), binwidth = 500)

这张图中表现出的内容相当的有趣,可以发现与其余4类切割程度不同的最普通的钻石,在平均售价上居然是最高的(紫色线),这似乎违背了常理。同样我们可以使用箱线图对该现象进行进一步探索,箱线图中的每个类别用一个箱线进行表示,箱线中包含了平均值、最大最小值、25、50、75百分位数等数值统计信息。

ggplot(data = diamonds, mapping = aes(x = cut, y = price)) +
  geom_boxplot()

箱线图中包含了更少的分布信息,但是其对统计数值具有更好的表达能力,在图中我们可以明确的看出在平均售价方面平平无奇的钻石是最高的,第二是优质的钻石,完美的钻石平均售价居然最便宜。此时我们可以使用排序函数对箱型图进行排序。

ggplot(data = diamonds, mapping = aes(x = reorder(cut, price, FUN=median), y = price)) +
     geom_boxplot()

2. 两个离散变量

两个离散变量的协变需要统计同时发生两种情况的次数,此时可以使用geom_count函数进行统计,此处我们计算钻石切割类型于颜色之间的协变关系。图中每个圆的大小显示在每个值的组合中发生了多少次重复。协变表现为特定x值和特定y值之间的强相关性。

ggplot(data = diamonds) +
  geom_count(mapping = aes(x = cut, y = color))

同样我们可以换一种可视化方式,使用网格与颜色的深浅进行度量:

diamonds %>% 
  count(color, cut) %>%  
  ggplot(mapping = aes(x = color, y = cut)) +
    geom_tile(mapping = aes(fill = n))

3. 两个连续变量

一种可视化两个连续变量之间的协变的好方法是使用geom_point绘制散点图。此处可以看到钻石的克拉大小与价格之间存在的指数关系。

ggplot(data = diamonds) +
  geom_point(mapping = aes(x = carat, y = price))

但是随着数据集的增长,散点开始相互覆盖后,散点图的表现形式存在了问题,会形成堆积均匀的黑色区域。解决这个问题的一种方法是根据叠加的次数在alpha通道中添加透明度,为散点图增加更多的美学特性,即点数较少的区域透明度高,反之透明度低。

ggplot(data = diamonds) + 
  geom_point(mapping = aes(x = carat, y = price), alpha = 1 / 100)

或者我们使用统计离散变量的思路,将整个空间划分为规则格网或规则六边形,统计落在多边形内的点数,并根据点数赋予多边形不同的颜色。

ggplot(data = smaller) +
  geom_bin2d(mapping = aes(x = carat, y = price))

另一种思路是将一个连续变量转为离散变量,这样可以使用箱线图的方式对每一类进行统计。

ggplot(data = smaller, mapping = aes(x = carat, y = price)) + 
  geom_boxplot(mapping = aes(group = cut_width(carat, 0.1)))

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据清洗数据分析数据挖掘全文共4页,当前为第1页。数据清洗数据分析数据挖掘全文共4页,当前为第1页。数据清洗 数据清洗数据分析数据挖掘全文共4页,当前为第1页。 数据清洗数据分析数据挖掘全文共4页,当前为第1页。 1.基本概念 数据清洗从名字上也看的出就是把"脏"的"洗掉",指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。因为数据仓库中的数据是面向某一主题的数据的集合,这些数据从多个业务系统中抽取而来而且包含历史数据,这样就避免不了有的数据是错误数据、有的数据相互之间有冲突,这些错误的或有冲突的数据显然是我们不想要的,称为"脏数据"。我们要按照一定的规则把"脏数据""洗掉",这就是数据清洗。而数据清洗的任务是过滤那些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉还是由业务单位修正之后再进行抽取。不符合要求的数据主要是有不完整的数据、错误的数据、重复的数据三大类。数据清洗是与问卷审核不同,录入后的数据清理一般是由计算机而不是人工完成。 主要类型 残缺数据 这一类数据主要是一些应该有的信息缺失,如供应商的名称、分公司的名称、客户的区域信息缺失、业务系统中主表与明细表不能匹配等。对于这一类数据过滤出来,按缺失的内容分别写入不同Excel文件向客户提交,要求在规定的时间内补全。补全后才写入数据仓库。 折叠错误数据 数据清洗数据分析数据挖掘全文共4页,当前为第2页。数据清洗数据分析数据挖掘全文共4页,当前为第2页。这一类错误产生的原因是业务系统不够健全,在接收输入后没有进行判断直接写入后台数据库造成的,比如数值数据输成全角数字字符、字符串数据后面有一个回车操作、日期格式不正确、日期越界等。这一类数据也要分类,对于类似于全角字符、数据前后有不可见字符的问题,只能通过写SQL语句的方式找出来,然后要求客户在业务系统修正之后抽取。日期格式不正确的或者是日期越界的这一类错误会导致ETL运行失败,这一类错误需要去业务系统数据库用SQL的方式挑出来,交给业务主管部门要求限期修正,修正之后再抽取。 数据清洗数据分析数据挖掘全文共4页,当前为第2页。 数据清洗数据分析数据挖掘全文共4页,当前为第2页。 折叠重复数据 对于这一类数据--特别是维表中会出现这种情况--将重复数据记录的所有字段导出来,让客户确认并整理。 数据清洗是一个反复的过程,不可能在几天内完成,只有不断的发现问题,解决问题。对于是否过滤,是否修正一般要求客户确认,对于过滤掉的数据,写入Excel文件或者将过滤数据写入数据表,在ETL开发的初期可以每天向业务单位发送过滤数据的邮件,促使他们尽快地修正错误,同时也可以做为将来验证数据的依据。数据清洗需要注意的是不要将有用的数据过滤掉,对于每个过滤规则认真进行验证,并要用户确认。 数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。这一过程也是质量管理体系的支持过程。在实用中,数据分析可帮助人们作出判断,以便采取适当行动。 数据清洗数据分析数据挖掘全文共4页,当前为第3页。数据清洗数据分析数据挖掘全文共4页,当前为第3页。类型 数据清洗数据分析数据挖掘全文共4页,当前为第3页。 数据清洗数据分析数据挖掘全文共4页,当前为第3页。 在统计学领域,有些人将数据分析划分为描述性统计分析、探索性数据分析以及验证性数据分析;其中,探索性数据分析侧重于在数据之中发现新的特征,而验证性数据分析则侧重于已有假设的证实或证伪。 探索性数据分析是指为了形成值得假设的检验而对数据进行分析的一种方法,是对传统统计学假设检验手段的补充。该方法由美国着名统计学家约翰·图基(John Tukey)命名。 定性数据分析又称为"定性资料分析"、"定性研究"或者"质性研究资料分析",是指对诸如词语、照片、观察结果之类的非数值型数据(或者说资料)的分析。 数据挖掘(英语:Data mining),又译为资料探勘、数据采矿。它是数据库知识发现(英语:Knowledge-Discovery in Databases,简称:KDD)中的一个步骤。数据挖掘一般是指从大量的数据中自动搜索隐藏于其中的有着特殊关系性(属于Association rule learning)的信息的过程。数据挖掘通常与计算机科学有关,并通过统计、在线分析处理、情报检索、机器学习、专家系统(依靠过去的经验法则)和模式识别等诸多方法来实现上述目标。 数据挖掘的基本步骤 数据挖掘的步骤会随不同领域的应用而有所变化,每一种数据挖掘技术也会有各自的特性和使用步骤,针对不同问题和需求所制定的数据挖掘过程也会存在差异。此外,数据的完整程度、专业人员支持的程度等都会对建立数据挖掘过程有所影响。这些因素造

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值