R for Data Science 学习笔记1

安利一下R for Data Science这本书,作为R数据处理的神器。
全文思想就是获得整洁数据(tidydata),并进行后续分析和可视化。

https://r4ds.had.co.nz/data-visualisation.html

学习流程

img

tidydata:每一列都是变量,每一行都是观察值

整洁的数据非常重要,因为一致的结构使您可以将精力集中在有关数据的问题上,而不是为了使数据以正确的形式针对不同的功能而奋斗。

ready

运行本书中的代码,需要四件事:R,RStudio,称为tidyverse的R软件包的集合,以及少数其他软件包。包是可复制R代码的基本单位。它们包括可重用的功能,描述如何使用它们的文档以及示例数据。

 install.packages("tidyverse")

除非您使用加载软件包,否则将无法使用软件包中的函数,对象和帮助文件library()。安装软件包后,可以使用以下library()功能加载该软件包:

library(tidyverse)
 #> ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
 #> ✔ ggplot2 3.3.2     ✔ purrr   0.3.4
 #> ✔ tibble  3.0.3     ✔ dplyr   1.0.2
 #> ✔ tidyr   1.1.2     ✔ stringr 1.4.0
 #> ✔ readr   1.4.0     ✔ forcats 0.5.0
 #> ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
 #> ✖ dplyr::filter() masks stats::filter()
 #> ✖ dplyr::lag()    masks stats::lag()

这告诉您tidyverse正在加载ggplot2,tibble,tidyr,readr,purrr和dplyr软件包。这些被认为是tidyverse的核心,因为您将在几乎所有分析中都使用它们。

在本书中,我们将从tidyverse外部使用三个数据包:

 install.packages(c("nycflights13", "gapminder", "Lahman"))

这些软件包提供了有关航班,世界发展和棒球的数据,我们将用它们来说明关键的数据科学思想。

在整本书中,我们使用一致的约定集来引用代码:

  • 函数采用代码字体,后跟括号,如sum()mean()

  • 其他R对象(如数据或函数参数)采用代码字体,不带括号,如flightsx

  • 如果要弄清楚对象来自哪个包,我们将使用包名称,后跟两个冒号,例如dplyr::mutate()nycflights13::flights。这也是有效的R代码。

1.6获得帮助并了解更多信息

这本书不是一本孤岛。没有任何一种资源可以使您掌握R。在您开始将本书中介绍的技术应用于您自己的数据时,您很快就会发现我们无法回答的问题。本节介绍了有关如何获取帮助以及帮助您继续学习的一些技巧。

如果您遇到困难,请从Google开始。通常,在查询中添加“ R”足以将其限制在相关结果中:如果搜索没有用,则通常意味着没有任何特定于R的结果可用。Google对于出现错误消息特别有用。如果收到错误消息,但不知道它是什么意思,请尝试使用Google搜索。过去可能有人对此感到困惑,并且网络上的某些地方会有所帮助。(如果错误消息不是英语的,请运行Sys.setenv(LANGUAGE = "en")并重新运行代码;您更有可能找到英语错误消息的帮助。)

如果Google没有帮助,请尝试stackoverflow。首先花一点时间搜索现有的答案,包括[R]将搜索范围限制在使用R的问题和答案上。如果找不到有用的东西,请准备一个最小的可复制示例或reprex。好的代表可以使其他人更轻松地为您提供帮助,而且通常您会在解决问题的过程中自己解决问题。

为了使示例可重现,需要包括三件事:所需的程序包,数据和代码。

  1. 程序包应加载到脚本的顶部,因此很容易看到示例所需的程序包。现在是检查每个软件包是否使用最新版本的好时机。自安装软件包以来,您可能已经发现了已修复的错误。对于tidyverse中的软件包,最简单的检查方法是运行tidyverse_update()

  2. 在问题中包含数据的最简单方法是使用dput()生成R代码来重新创建它。例如,要mtcars 在R中重新创建数据集,我将执行以下步骤:

    1. dput(mtcars)在R中运行

    2. 复制输出

    3. 在我的可复制脚本中,键入mtcars <-然后粘贴。

    尝试找到仍能揭示问题的最小数据子集。

  3. 花一点时间来确保您的代码易于他人阅读:

    • 确保您使用了空格,并且变量名简洁明了,但内容丰富。

    • 使用注释来指示您的问题所在。

    • 尽力删除与该问题无关的所有内容。 您的代码越短,越容易理解,也越容易修复。

通过开始一个新的R会话并复制并粘贴脚本来检查您是否确实制作了一个可复制的示例。

您还应该花一些时间为解决问题做准备。从长远来看,每天花一点时间学习R将会获得丰厚的回报。一种方法是在RStudio博客上关注Hadley,Garrett和RStudio其他所有人的行为。我们在这里发布有关新软件包,新IDE功能和现场课程的公告。您可能还希望在Twitter上关注Hadley(@hadleywickham)或Garrett(@statgarrett),或者关注@rstudiotips以跟上IDE中的新功能。

为了更广泛地与R社区保持联系,我们建议阅读http://www.r-bloggers.com:它汇集了来自世界各地的500多个有关R的博客。如果您是活跃的Twitter用户,请遵循(#rstats)标签。Twitter是Hadley用来跟上社区的新发展的主要工具之一。

数据可视化

使用ggplot2,您可以使用函数开始绘图ggplot()ggplot()创建一个可以添加图层的坐标系。的第一个参数ggplot()是要在图形中使用的数据集。因此,ggplot(data = mpg)创建一个空图,但这不是很有趣,因此我将不在这里显示。

您可以通过向中添加一层或多层来完成图形ggplot()。该函数geom_point()在您的绘图上添加了一层点,从而创建了一个散点图。ggplot2附带了许多geom函数,每个函数都会在绘图中添加不同类型的图层。在本章中,您将学到很多。

ggplot2中的每个geom函数都有一个mapping参数。这定义了数据集中的变量如何映射到视觉属性。的mapping参数总是与配对aes(),以及xy的参数aes()指定要映射哪些变量的x和y轴。ggplot2在自data变量(在本例中为)中查找映射的变量mpg

3.2.3图形模板

让我们将此代码转换为可重复使用的模板,以使用ggplot2制作图形。要制作图表,请将下面代码中的方括号部分替换为数据集,geom函数或一组映射。

 ggplot(data = ) + 
  (mapping = aes())

3.3 增加变量

美学映射,第三个变量

您可以class通过将其映射到美感来向二维散点图添加第三个变量,例如。美观是情节中对象的视觉属性。美学包括点的大小,形状或颜色之类的东西。您可以通过更改其美学属性的值,以不同方式显示一个点(如下所示)。由于我们已经使用“值”一词来描述数据,所以让我们使用“水平”一词来描述美学特性。在这里,我们更改点的大小,形状和颜色的级别,以使该点变小,呈三角形或呈蓝色:

gplot2一次只能使用六个形状。默认情况下,使用形状美学时,其他组将不作图。

对于每种美学,您都aes()可以将美学名称与要显示的变量相关联。该aes()函数将图层使用的每个美学映射收集在一起,并将其传递给图层的映射参数。语法突出显示了有关x和的有用见解y:点的x和y本身就是美观,可视化的属性,您可以将其映射到变量以显示有关数据的信息。

一旦绘制了美学图,ggplot2就会处理其余的工作。它选择了一个合理的比例以配合美学,并构造了一个图例来解释级别和值之间的映射。对于x和y美学,ggplot2不会创建图例,但会创建带有刻度线和标签的轴线。轴线充当图例;它说明了位置和值之间的映射。

手动更改图形的美学属性

还可以手动设置几何图形的美学属性。例如,我们可以将图中的所有点设为蓝色:

 ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy), color = "blue")

在这里,颜色不会传达有关变量的信息,而只会改变图形的外观。要手动设置美学,请按名称将美学设置为geom函数的参数;即它去外面aes()。您需要选择一种对于这种美学有意义的水平:

  • 颜色的名称,作为字符串。

  • 点的大小,以毫米为单位。

  • 点的形状为数字,如图3.1所示。

图3.1

R具有25个内置的形状,这些形状由数字标识。 有一些看似重复的对象:例如,0,15和22都是正方形。 区别来自“颜色”和“填充”美学的相互作用。 空心形状(0--14)的边界由“ colour”确定; 实心形状(15--20)填充有“颜色”; 填充的形状(21--24)的边界为“颜色”,并填充为“填充”。

3.4常见问题

当您开始运行R代码时,您可能会遇到问题。

首先,将您正在运行的代码与本书中的代码进行仔细比较。R非常挑剔,并且放错位置的字符可能会有所不同。确保每个(都与匹配,)每个"都与另一个配对"。有时,您将运行代码,但没有任何反应。检查控制台的左侧:如果是a +,则表示R认为您没有键入完整的表达式,它正在等待您完成它。在这种情况下,按ESCAPE中止当前命令的处理通常很容易从头开始。

创建ggplot2图形时,一个常见的问题是将放在+错误的位置:它必须出现在行的末尾,而不是开始。换句话说,请确保您没有意外地编写如下代码:

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

如果仍然遇到问题,请尝试帮助。通过?function_name在控制台中运行,或选择函数名称并在RStudio中按F1,可以获得有关任何R函数的帮助。如果帮助看起来没有帮助,请不要担心-而是跳到示例并查找与您要执行的操作匹配的代码。

如果这样做没有帮助,请仔细阅读错误消息。当然,搜索引擎更是一大利器,多搜索,会得到想要的答案。

3.5子图

添加其他变量的一种方法是图形美学。另一种对分类变量特别有用的方法是将绘图划分为构面(子图),每个子图显示数据的一个子集。

要通过单个变量对图进行分面,请使用facet_wrap()。的第一个参数facet_wrap()应该是公式,在公式中创建~后跟一个变量名(此处的“公式”是R中数据结构的名称,而不是“等式”的同义词)。您传递给的变量facet_wrap()应该是离散的。

 ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy)) + 
  facet_wrap(~ class, nrow = 2)

要在两个变量的组合上显示,请添加facet_grid()到情节调用中。的第一个参数facet_grid()也是一个公式。这次,公式应包含两个变量名,并用a分隔~

 ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy)) + 
  facet_grid(drv ~ cyl)

如果您不希望在行或列维中不使用构面,请使用a.代替变量名,例如 + facet_grid(. ~ cyl)

3.6几何对象

img
img

两个图都包含相同的x变量,相同的y变量,并且都描述相同的数据。但是情节并不相同。每个图都使用不同的视觉对象来表示数据。用ggplot2语法,我们说它们使用不同的geoms

geom是绘图中用来表示数据的几何对象。人们通常根据地块使用的几何类型来描述地块。例如,bar charts use bar geoms, line charts use line geoms, boxplots use boxplot geoms, and so on.散点图打破了趋势。他们使用点几何。如上所述,您可以使用不同的几何图形来绘制相同的数据。上侧的图使用点几何,而下侧的图使用平滑几何,即拟合数据的平滑线。

要更改绘图中的几何图形,请更改添加到的几何图形功能ggplot()。例如,要绘制上面的图,可以使用以下代码:

 # up
 ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy))
 
 # down
 ggplot(data = mpg) + 
  geom_smooth(mapping = aes(x = displ, y = hwy))

要在同一图中显示多个几何图形,请将多个几何图形功能添加到ggplot():

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

进阶:但是,这在我们的代码中引入了一些重复。想象一下,如果您想将y轴更改为cty而不是hwy。您需要在两个地方更改变量,而您可能忘记更新一个。您可以通过将一组映射传递到来避免这种重复ggplot()。ggplot2会将这些映射视为适用于图中每个geom的全局映射。换句话说,此代码将产生与先前代码相同的图:

 ggplot(data = mpg) +
  geom_point() + 
  geom_smooth()

如果将映射放置在geom函数中,则ggplot2会将其视为该图层的本地映射。它将仅使用这些映射来扩展或覆盖该层的全局映射。这使得可以在不同的层中显示不同的图形。

geom_point(mapping = aes(color = class)) + 
  geom_smooth()
 ??geom

练习

#在脑海中运行这段代码,并预测输出结果。然后,在R中运行代码并检查您的预测。
 ggplot(data = mpg, mapping = aes(x = displ, y = hwy, color = drv)) + 
  geom_point() + 
  geom_smooth(se = FALSE)
 
 ggplot(data = mpg) +
  geom_smooth(
  mapping = aes(x = displ, y = hwy, color = drv),
  show.legend = FALSE #不添加标签 )

#这两图是否一致
 ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) + 
  geom_point() + 
  geom_smooth()

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

重新创建生成以下图形所需的R代码。


image.png
image.png

3.7统计转换

接下来,让我们看一下条形图。条形图看起来很简单,但是它们很有趣,因为它们揭示了一些关于图的细微之处。考虑使用绘制的基本条形图geom_bar()。下图显示了diamonds数据集中的钻石总数,按分组cut。该diamonds数据集进来GGPLOT2,并包含〜54000颗钻石,其中包括信息pricecaratcolorclarity,和cut每颗钻石的。图表显示,高质量切割的钻石比低质量切割的钻石更多。

 ggplot(data = diamonds) + 
  geom_bar(mapping = aes(x = cut))

你可能感兴趣的:(R for Data Science 学习笔记1)