R数据科学(五)探索性数据分析

Python012

R数据科学(五)探索性数据分析,第1张

明确概念:探索性数据分析(exploratory data analysis, EDA),一般过程为:

(1) 对数据提出问题。

(2) 对数据进行可视化、转换和建模,进而找出问题的答案。

(3) 使用上一个步骤的结果来精炼问题,并提出新问题。

确定变量是分类变量还是连续变量,要想检查分类变量的分布,可以使用条形图:

条形的高度表示每个 x 值中观测的数量,可以使用 dplyr::count() 手动计算出这些值:

要想检查连续变量的分布,可以使用直方图:

可以通过 dplyr::count() 和 ggplot2::cut_width() 函数的组合来手动计算结果. binwidth 参数来设定直方图中的间隔的宽度,该参数是用 x 轴变量的单位来度量的。

在同一张图上叠加多个直方图, 用geom_freqploy()代替geom_histogram(),用折线表示。

相似值聚集形成的簇表示数据中存在子组。

coord_cartesian() 函数中有一个用于放大 x 轴的 xlim() 参数。 ggplot2 中也有功能稍有区

别的 xlim() 和 ylim() 函数:它们会忽略溢出坐标轴范围的那些数据。

如果带有异常值和不带异常值的数据分别进行分析,结果差别较大的话要找出异常值的原因,如果差别不大,可以用NA代替。

5.3.4 练习

(1)研究 x、 y 和 z 变量在 diamonds 数据集中的分布。你能发现什么?思考一下,对于一条

钻石数据,如何确定表示长、宽和高的变量?

(2)研究 price 的分布,你能发现不寻常或令人惊奇的事情吗?(提示:仔细考虑一下

binwidth 参数,并确定试验了足够多的取值。)

(3) 0.99 克拉的钻石有多少? 1 克拉的钻石有多少?造成这种区别的原因是什么?

(4)比较并对比 coord_cartesina() 和 xlim()/ylim() 在放大直方图时的功能。如果不设置

binwidth 参数,会发生什么情况?如果将直方图放大到只显示一半的条形,那么又会发

生什么情况?

数据中有异常值,可以将异常值去掉:

一般不建议去掉,建议使用缺失值来代替异常值。

ifelse函数参数1放入逻辑判断,如果为T,结果就是第二个参数的值,如果为F,就是第三个参数的值。

ggplot2会忽略缺失值:

练习

(1) 直方图如何处理缺失值?条形图如何处理缺失值?为什么会有这种区别?

(2) na.rm = TRUE 在 mean() 和 sum() 函数中的作用是什么?

移除缺失值再进行统计

按分类变量的分组显示连续变量分布的另一种方式是使用箱线图

练习

(1) 前面对比了已取消航班和未取消航班的出发时间,使用学习到的知识对这个对比的可视

化结果进行改善。

(2) 在钻石数据集中,哪个变量对于预测钻石的价格最重要?这个变量与切割质量的关系是

怎样的?为什么这两个变量的关系组合会导致质量更差的钻石价格更高呢?

(3) 安装 ggstance 包,并创建一个横向箱线图。这种方法与使用 coord_flip() 函数有何区别?

(4) 箱线图存在的问题是,在小数据集时代开发而成,对于现在的大数据集会显示出数量极

其庞大的异常值。解决这个问题的一种方法是使用字母价值图。安装 lvplot 包,并尝试

使用 geom_lv() 函数来显示价格基于切割质量的分布。你能发现什么问题?如何解释这

种图形?

(5) 比较并对比 geom_violin()、分面的 geom_histogram() 和着色的 geom_freqploy()。每种方法的优缺点是什么?

(6) 对于小数据集,如果要观察连续变量和分类变量间的关系,有时使用 geom_jitter() 函数是特别有用的。 ggbeeswarm 包提供了和 geom_jitter()相似的一些方法。列出这些方法

并简单描述每种方法的作用。

两个分类变量的关系肯定要先计数,可以用geom_count()函数

d3heatmap 或 heatmaply 包可以生成交互式图

练习

(1) 如何调整 count 数据,使其能更清楚地表示出切割质量在颜色间的分布,或者颜色在切

割质量间的分布?

(2) 使用 geom_tile() 函数结合 dplyr来探索平均航班延误数量是如何随着目的地和月份的

变化而变化的。为什么这张图难以阅读?如何改进?

(3) 为什么在以上示例中使用 aes(x = color, y = cut) 要比 aes(x = cut, y = color) 更好?

连续变量之间的关系一般用散点图来表示。geom_point()

对于大数据集,为了避免重合,可以用geom_bin2d() 和 geom_hex()函数将坐标平面分为二维分箱,并使用一种填充颜色表示落入

每个分箱的数据点。

另一种方式是对一个连续变量进行分箱,因此这个连续变量的作用就相当于分类变量。

cut_width(x, width) 函数将 x 变量分成宽度为 width 的分箱。参数 varwidth = TRUE 让箱线图的宽度与观测数量成正比。

cut_number() 函数近似地显示每个分箱中的数据点的数量

练习

(1) 除了使用箱线图对条件分布进行摘要统计,你还可以使用频率多边形图。使用 cut_

width() 函数或 cut_number() 函数时需要考虑什么问题?这对 carat 和 price 的二维分

布的可视化表示有什么影响?

(2) 按照 price 分类对 carat 的分布进行可视化表示。

(3) 比较特别大的钻石和比较小的钻石的价格分布。结果符合预期吗?还是出乎意料?

(4) 组合使用你学习到的两种技术,对 cut、 carat 和 price 的组合分布进行可视化表示。

(5) 二维图形可以显示一维图形中看不到的离群点。例如,以下图形中的有些点具有异常的

x 值和 y 值组合,这使得这些点成为了离群点,即使这些点的 x 值和 y 值在单独检验时

似乎是正常的。

ggplot(data = diamonds) +

geom_point(mapping = aes(x = x, y = y)) +

coord_cartesian(xlim = c(4, 11), ylim = c(4, 11))

数据中的模式提供了关系线索,用于探索两个变量的相关性。

模型是用于从数据中抽取模式的一种工具。

残差(预测值和实际值之间的差别)

阅读推荐:

生信技能树公益视频合辑:学习顺序是linux,r,软件安装,geo,小技巧,ngs组学!

B站链接: https://m.bilibili.com/space/338686099

YouTube链接: https://m.youtube.com/channel/UC67sImqK7V8tSWHMG8azIVA/playlists

生信工程师入门最佳指南: https://mp.weixin.qq.com/s/vaX4ttaLIa19MefD86WfUA

今天我们将通过一个例子来说明如何分析两个定类变量。

文章背景:我们想研究CFPS2010和CFPS2012青少年对自身的职业期望。

如表1,我们将原始的职业期望编码整合成9类(职业编码的大类)和其他。由于我们想分析同一个人在跨轮次调查中职业期望的稳定性情况,故将分析对象定义为在CFPS2010和CFPS2012中都回答了自己对自己职业期望的受访者。如表2所示,进行重编码后的数据是宽数据,样本量是1920,数据集名字为expect。我们在进行后续分析时,要将其转换为绘图所需的其他形式。

⭐分析方式1——列联表、频数与频率

在表3中,我们展示了2010与2012年青少年职业期望的交叉统计情况。同时该表内,也附上了频数(落在各类别中的数据个数)、⽐例(某⼀类别数据占全部数据的⽐值)、百分⽐(将对⽐的基数作为100⽽计算的⽐值,包括百分比、行百分比和列百分比)。

⭐分析方式2——统计图表

分析前色彩讲解:预设渐变色,我们这里介绍2个色彩包。

1)专门生产系列颜色的RColorBrewer包,详见图1中的系列颜色。

library(RColorBrewer)

display.brewer.all()

2)色盲友好的配色方案viridis包,详见图2中的系列颜色。

library(viridis)

?viridis()#可以看到更多对这组包色彩的说明

接下来我们来画图吧~【注:图3-图6中的类目数字的含义:1)国家机关、党群组织、企业、事业单位负责人;2)医生;3)教师;4)专业技术人员(刨除教师和医生);5)办事人员和有关人员;6)商业、服务业人员;7)农、林、牧、渔、水利业生产人员;8)生产、运输设备操作人员及有关人员;9)军人;10)其他。】