R语言之实战分析

Python021

R语言之实战分析,第1张

采编自 DataMiningWithR

2.1 观察各个变量数据的规范性

几乎每个变量都有异常值存在,多是异常大值

2.2 观察变量间的相关性

2.3 双变量间的相关性

由上可知,"oPO4"和"PO4"高度相关,达到0.91

2.4 观察单个变量的数据分布情况

左图可明显判断异常值的存在,右图可展现数据在不同范围内的分布集中度

3.1 了解缺失值的基本分布情况

3.2 直接删除缺失值,在缺失值占比很少的情况采用

3.3 基于一定的规则填充缺失值

4.1 数据准备和聚类预览

初步判断,可分为4组

4.2 层次聚类

4.3 kmeans均值聚类 (1)

4.3 kmeans均值聚类 (2)

4.1 盖帽法处理异常值

即分别设定数据的上下限,高于上限的用上限替换,低于下限的用下限替换

4.2 盖帽法处理异常值后重现考察数据的分布情况

第一步:获取要绘图的整洁数据(涉及到数据整洁和操作的知识)

第二步:整洁数据做映射操作,确定x,y,color,size,shape,alpha等

第三步:选择合适的几何对象(根据画图的目的、变量的类型和个数)

第四步:坐标系和刻度配置

第五步:标签信息和图例信息

第六步:选择合适的主题

ggplot2的语法包括10个部件。

数据(data)

映射(mapping)

几何对象(geom)

标度(scale)

统计变换(stats)

坐标系(coord)

位置调整(Position adjustments)

分面(facet)

主题(theme)

输出(output)

前3个是必须的,其它部件ggplot2会自动配置,也可以手动配置

ggplot2基本绘图模板:

注意:

1)添加图层的加号(+)只能放在行末尾

2)红色方框里面mapping是全局域,绿色方框里面mapping是局部域,执行先后顺序,先局部域,后全局域

ggplot2画图必要部件-数据,映射和几何对象

2.1 数据

数据(Data)用于画图的整洁数据

library(tidyverse

ggplot()先只提供数据,创建一个空图形。

# ggplot()先提供整洁数据,生成一个空图形

2映射

映射,把数据变量集与图形属性库建立关联。

最常用的映射有:

x:x轴

y:y轴

color:颜色

size:大小

shape:形状

fill:填充

alpha:透明度

以mpg数据集为例,把变量displ和hwy分别映射到x和y,变量drv映射到color,此时图形就有了坐标轴和网格线,color需要在有了几何对象后才能体现出来。

# 映射操作

ggplot(data = mpg, mapping = aes(x = displ,

y = hwy, color = drv))

2.3 几何对象

几何对象是表达数据的视觉对象

不同类型的几何对象是从不同的角度表达数据。

pgglot2提供了50多种“几何对象”,均以geom_xxxx()的方式命名,常用的有:

几何对象很简单,只需要添加图层即可。

例如,以mpg数据集为例,画散点图。

ggplot(data = mpg, mapping = aes(x = displ,

y = hwy,

color = drv)) +

geom_point()层依次叠加,在上图的基础上,再添加一个几何对象:光滑曲线。

#继续增加一个几何对象:光滑曲线

# 写法1

ggplot(data = mpg, mapping = aes(x = displ,

y = hwy,

color = drv)) +

geom_point() +

geom_smooth(se=FALSE)

# 写法2

ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +

geom_point(aes(color = drv)) +

geom_smooth(se=FALSE)

思考题:

1)写法1和写法2的差异?(全局域和局部域的使用差异)

2)写法2若是要实现写法1的功能,怎么编写代码?

03

标度

ggplot2会自动根据输入变量选择最优的坐标刻度方法,若要手动设置或调整,就需要使用标度函数

标度函数用来控制几何对象中的标度映射(x轴,y轴或者由color,fill,shape,size产生的图例)。

ggplot2提供丰富的标度函数,常用的有:

拓展功能:scales包提供很多设置刻度标签风格的函数,比如百分数、科学计数法法、美元格式等。

3.1 修改坐标轴刻度及标签

连续变量使用scale_*_continuous()函数,参数breaks设置各个刻度的位置,参数labels设置各个刻度对应的标签。

离散变量使用scale_*_discrete()函数,修改离散变量坐标轴的标签。

时间变量使用scale_x_date()函数设置日期刻度,参数date_breaks设置刻度间隔,date_labels设置标签的日期格式

以mpg数据集为例,修改连续变量坐标轴刻度及标签。

# scale_y_continuous函数

# 对比分析和观察

# 图1

ggplot(mpg, aes(displ, hwy)) +

geom_point()

# 图2

ggplot(mpg, aes(displ, hwy)) +

geom_point() +

scale_y_continuous(breaks = seq(15, 40, by = 10))

# 图3

ggplot(mpg, aes(displ, hwy)) +

geom_point() +

scale_y_continuous(breaks = seq(15, 40, by = 10),

labels = c(" 一五 "," 二五 "," 三五 "))

以mpg数据集为例,修改离散变量的标签

# scale_x_discrete函数

# 对比分析和观察

# 图1

ggplot(mpg, aes(x = drv)) +

geom_bar()

# 图2

ggplot(mpg, aes(x = drv)) +

geom_bar() +

scale_x_discrete(labels = c("4" = " 四驱 ", "f" = " 前驱 ",

"r" = " 后驱 "))

以ggplot2自带的economics数据集为例,修改日期变量。

# scale_x_date函数

# 以ggplot2自带的economics为例

economics %>% glimpse()

# 图1

ggplot(tail(economics, 45), aes(date, uempmed / 100)) +

geom_line()

# 图2

ggplot(tail(economics, 45), aes(date, uempmed / 100)) +

geom_line() +

scale_x_date(date_breaks = "6 months", date_labels = "%Y-%b") +

scale_y_continuous(labels = scales::percent)

3.2 修改坐标轴标签、图例名及图例位置

用labs()函数参数x,y或者xlab(),ylab(),设置x轴,y轴标签。

若用参数color生成了图例,可以在labs()函数用参数color修改图例名。

用theme图层的参数legend.position设置图例的位置。

以mpg数据为例。

# 修改坐标轴标签,图例名和图例位置

mpg

# 图1

ggplot(mpg, aes(displ, hwy)) +

geom_point(aes(color = drv)) +

labs(x = " 引擎大小 (L)", y = " 高速燃油率 (mpg)",

color = " 驱动类型 ") +

theme(legend.position = "top")

# 图2

ggplot(mpg, aes(displ, hwy)) +

geom_point(aes(color = drv)) +

xlab(" 引擎大小 (L)") +

ylab(" 高速燃油率 (mpg)") +

labs(color = " 驱动类型 ") +

theme(legend.position = "top")

# 图3 不需要图例

ggplot(mpg, aes(displ, hwy)) +

geom_point(aes(color = drv)) +

xlab(" 引擎大小 (L)") +

ylab(" 高速燃油率 (mpg)") +

theme(legend.position = "none")

3.3 设置坐标轴的范围

用coord_cartesian()函数参数xlim和ylim,或者用xlim(),ylim()设置x轴和y轴的范围。

以mpg数据集为例。

# 修改坐标轴的范围

# 图1 coord_cartesian()的参数xlim和ylim

ggplot(mpg, aes(displ, hwy)) +

geom_point(aes(color = drv)) +

coord_cartesian(xlim = c(5, 7), ylim = c(10, 30))

# 图2 xlim()和ylim()函数

ggplot(mpg, aes(displ, hwy)) +

geom_point(aes(color = drv)) +

xlim(5, 7) +

ylim(10, 30)

3.4 变换坐标轴

用scale_x_log10()函数变换坐标系,可以保持原始数据的坐标刻度。

# 修改坐标轴的范围

# 图1 coord_cartesian()的参数xlim和ylim

ggplot(mpg, aes(displ, hwy)) +

geom_point(aes(color = drv)) +

coord_cartesian(xlim = c(5, 7), ylim = c(10, 30))

# 图2 xlim()和ylim()函数

ggplot(mpg, aes(displ, hwy)) +

geom_point(aes(color = drv)) +

xlim(5, 7) +

ylim(10, 30)

3.5 设置图形标题

用labs()函数设置图形标题。

参数title 设置正标题

参数subtitle 设置副标题

参数caption 设置脚注标题(默认右下角)

# 设置标题

# mpg数据集为例

p <- ggplot(mpg, aes(displ, hwy)) +

geom_point(aes(color = drv)) +

geom_smooth(se = FALSE) +

labs(title = " 燃油效率与引擎大小的关系图 ",

subtitle = " 两座车 ( 跑车 ) 因重量小而符合预期 ",

caption = " 数据来自 fueleconomy.gov")

p

标题若要居中,采用theme图层设置。

p + theme(plot.title = element_text(hjust = 0.5),

plot.subtitle = element_text(hjust = 0.5))

3.6 设置color、fill颜色

数据的某个维度信息可以通过颜色来表示。

可以直接使用颜色值,建议使用RColorBrewer(调色板)或者colorspace包。

1)连续变量

- 用scale_color_gradient()设置二色渐变色。

# 连续变量

# 图1 scale_color_gradient()函数

ggplot(mpg, aes(displ, hwy, color = hwy)) +

geom_point() +

scale_color_gradient(low = "green", high = "red")

- 用scale_color_distiller()设置调色板中的颜色

# 图2 scale_color_distiller()函数

ggplot(mpg, aes(displ, hwy, color = hwy)) +

geom_point() +

scale_color_distiller(palette = "Set1")

2)离散变量

- 用scale_color_manual()手动设置颜色,还可以修改图例及其标签信息

# 离散变量

# 图1 scale_color_manual()函数

ggplot(mpg, aes(displ, hwy, color = drv)) +

geom_point() +

scale_color_manual(" 驱动方式 ",

values = c("red", "blue", "green"),

breaks = c("4", "f", "r"))

ggplot(mpg, aes(displ, hwy, color = drv)) +

geom_point() +

scale_color_manual(" 驱动方式 ",

values = c("red", "blue", "green"),

labels = c(" 四驱 ", " 前驱 ", " 后驱 "))

-用scale_fill_brewer()调用调色板中的颜色

# 图2 scale_fill_brewer()函数

ggplot(mpg, aes(x = class, fill = class)) +

geom_bar() +

scale_fill_brewer(palette = "Dark2")

.7 添加文字标注

ggrepel包提供了geom_label_repel()函数或者geom_text_repel()函数,为图形添加文字标注。

操作步骤:

第一步:先准备好标记点的数据

第二步:增加文字标注图层,包括标记点的数据和标注的文字给label参数

# 设置文字标注信息

library(ggrepel)

# 选取每种车型 hwy 值最大的样本

best_in_class <- mpg %>%

group_by(class) %>%

slice_max(hwy, n = 1)

best_in_class %>% select(class, model, hwy)

ggplot(mpg, aes(displ, hwy)) +

geom_point(aes(color = class)) +

geom_label_repel(data = best_in_class,

aes(label = model))

04

计变换、坐标系和位置调整

.1 统计变换

统计变换是构建新的统计量而画图。

例如,条形图或直方图,是对数据分组的频数做画图;平滑曲线是对数据拟合模型的预测值画图。

gplot2可以把统计变换直接融入画图中,不必先在对数据做统计变换后再画图。

gplot2提供30多种统计,均以stats_xxx()的方式命名。

1)可在几何对象中直接使用的统计变换,直接使用几何对象就可以了。

能在几何对象创建的,而需要单独使用。

mpg数据集为例。

stat_summary()做统计绘图并汇总。

# 图1 stat_summary()做统计绘图并汇总

p <- ggplot(mpg, aes(x = class, y = hwy)) +

geom_violin(trim = FALSE, alpha = 0.5, color = "green")

p

p + stat_summary(fun = mean,

fun.min = function (x) {mean(x) - sd(x)},

fun.max = function (x) {mean(x) + sd(x)},

geom = "pointrange",

color = "red")

tat_smooth()添加光滑曲线,与geom_smooth()相同。

参数method设置平滑曲线的拟合方法,如lm线性回归、glm广义线性回归、loess多项式回归、gam广义加法模型(mgcv包)、rlm稳健回归(MASS包)等。

参数formula指定平滑曲线方程,如y ~ x, y ~ poly(x, 2), y ~ log(x)等。

参数se设置是否绘制置信区间。

# 图2 stat_smooth()添加平滑曲线

ggplot(mpg, aes(displ, hwy)) +

geom_point() +

stat_smooth(method = "lm",

formula = y ~ splines::bs(x, 3),

se = FALSE)

ggplot(mpg, aes(displ, hwy)) +

geom_point() +

geom_smooth(method = "lm",

formula = y ~ splines::bs(x, 3),

se = FALSE)

4.2 坐标系

ggplot2默认是直角坐标系。

- coord_cartesian()

常用的其它坐标系:

以mpg数据集为例,坐标轴翻转。

# 图1 坐标轴翻转coord_flip()

p <- ggplot(mpg, aes(class, hwy)) +

geom_boxplot()

p

p + coord_flip()

直角坐标下条形图转换为极坐标下玫瑰图。

# 图2 直角坐标条形图-->极坐标玫瑰图

p <- ggplot(mpg, aes(class, fill = drv)) +

geom_bar()

p

p + coord_polar()

4.3 位置调整

条形图的位置调整

# 图1:条形图条形位置调整

ggplot(mpg, aes(class, fill = drv)) +

geom_bar()

ggplot(mpg, aes(class, fill = drv)) +

geom_bar(position = "dodge")

ggplot(mpg, aes(class, fill = drv)) +

geom_bar(position = position_dodge(preserve = "single"))

散点图的散点位置调整

# 图1:散点图的散点位置调整

ggplot(mpg, aes(displ, hwy)) +

geom_point()

ggplot(mpg, aes(displ, hwy)) +

geom_point(position = "jitter")

用patchwork包排布多个图形

library(patchwork)

p1 <- ggplot(mpg, aes(displ, hwy)) +

geom_point()

p2 <- ggplot(mpg, aes(drv, displ)) +

geom_boxplot()

p3 <- ggplot(mpg, aes(drv)) +

geom_bar()

p1 | (p2 / p3)

p1 | p2 | p3

p1 / p2 / p3

p1 / (p2 | p3)

05

分面

利用分类变量把图形分成若干“子图”(面),实际上就是对数据分组后再画图,属于数据分析里面细分和下钻的思想。

5.1 用facet_wrap()函数

封装分面,先生成一维的面板系列,再封装到二维中。

语法形式:~ 分类变量 或者 ~ 分类变量1 + 分类变量2

参数scales设置是否共用坐标刻度,fixed 默认 共用, free 不共用,还可以额通过free_x,free_y单独设置。

《R语言实战》百度网盘pdf最新全集下载:

链接: https://pan.baidu.com/s/1l4j98ELscMCHhfUd9Qxn2w

?pwd=2zte 提取码: 2zte

简介:本书注重实用性,是一本全面而细致的R指南,高度概括了该软件和它的强大功能,展示了使用的统计示例,且对于难以用传统方法处理的凌乱、不完整和非正态的数据给出了优雅的处理方法。作者不仅仅探讨统计分析,还阐述了大量探索和展示数据的图形功能。新版做了大量更新和修正,新增了近200页内容,介绍数据挖掘、预测性分析和高级编程。