美文网首页玩转大数据Cook R大数据
R for data science (第一章)①

R for data science (第一章)①

作者: 柳叶刀与小鼠标 | 来源:发表于2018-10-24 14:40 被阅读141次

    Chapter1 使用ggplot2进行数据可视化

    简介

    “简单的图表为数据分析师提供了比任何其他设备更多的信息。” - John Tukey

    本章将教您如何使用ggplot2可视化您的数据。 R有几个用于制作图形的系统,但ggplot2是最优雅和最通用的系统之一。 ggplot2实现了图形语法,它是一个用于描述和构建图形的系统。如果您想在开始之前了解更多关于ggplot2理论基础的内容,我建议您阅读“The Layered Grammar of Graphics”,

    数据准备

    本章重点介绍ggplot2,它是tidyverse的核心成员之一。 要访问我们将在本章中使用的数据集,请通过运行以下代码加载tidyverse:

    > library(tidyverse)
    -- Attaching packages --------------------------------------- tidyverse 1.2.1 --
    √ ggplot2 3.0.0     √ purrr   0.2.5
    √ tibble  1.4.2     √ dplyr   0.7.7
    √ tidyr   0.8.1     √ stringr 1.3.1
    √ readr   1.1.1     √ forcats 0.3.0
    -- Conflicts ------------------------------------------ tidyverse_conflicts() --
    x dplyr::filter() masks stats::filter()
    x dplyr::lag()    masks stats::lag()
    

    这一行代码加载核心整数。 它还告诉您tidyverse中的哪些函数与基本R(或您可能已加载的其他包)中的函数冲突。

    如果您运行此代码并收到错误消息“没有名为'tidyverse'的软件包”,则需要先安装它,然后再次运行library()。

    install.packages("tidyverse")
    library(tidyverse)
    

    您只需要安装一次包,但每次开始新会话时都需要重新加载它。如果我们需要明确函数(或数据集)的来源,我们将使用特殊形式的包:: function()。 例如,ggplot2 :: ggplot()明确告诉您我们正在使用ggplot2包中的ggplot()函数。

    第一步

    让我们用我们的第一个图表回答一个问题:大型发动机的汽车比小型发动机的汽车使用更多燃料吗? 你可能已经有了答案,但试着让你的答案准确。 发动机尺寸和燃油效率之间的关系是什么样的? 这是积极的吗? 负?线性?非线性?

    • mpg数据框

    您可以使用ggplot2(又名ggplot2 :: mpg)中的mpg数据框测试您的答案。 数据框是变量(列)和观察(行)的矩形集合。 mpg包含美国环境保护局收集的38种汽车型号的观察结果。

    mpg
    # A tibble: 234 x 11
       manufacturer model   displ  year   cyl trans  drv     cty   hwy fl    class
       <chr>        <chr>   <dbl> <int> <int> <chr>  <chr> <int> <int> <chr> <chr>
     1 audi         a4        1.8  1999     4 auto(~ f        18    29 p     comp~
     2 audi         a4        1.8  1999     4 manua~ f        21    29 p     comp~
     3 audi         a4        2    2008     4 manua~ f        20    31 p     comp~
     4 audi         a4        2    2008     4 auto(~ f        21    30 p     comp~
     5 audi         a4        2.8  1999     6 auto(~ f        16    26 p     comp~
     6 audi         a4        2.8  1999     6 manua~ f        18    26 p     comp~
     7 audi         a4        3.1  2008     6 auto(~ f        18    27 p     comp~
     8 audi         a4 qua~   1.8  1999     4 manua~ 4        18    26 p     comp~
     9 audi         a4 qua~   1.8  1999     4 auto(~ 4        16    25 p     comp~
    10 audi         a4 qua~   2    2008     4 manua~ 4        20    28 p     comp~
    # ... with 224 more rows
    

    mpg中的变量包括:汽车的发动机尺寸,以升为单位。一辆汽车在高速公路上的燃油效率,以每加仑英里数计算。 当行驶相同距离时,具有低燃料效率的汽车比具有高燃料效率的汽车消耗更多燃料。

    要了解有关mpg的更多信息,请通过运行?mpg打开其帮助页面。

    • 创建ggplot

    要绘制mpg,请运行此代码将displ放在x轴上,将hwy放在y轴上:

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

    该图显示了发动机尺寸(displ)和燃料效率(hwy)之间的负相关关系。换句话说,大型发动机的汽车使用更多的燃料。这是否证实或驳斥了您关于燃油效率和发动机尺寸的假设?

    使用ggplot2,您可以使用函数ggplot()开始绘图。 ggplot()创建一个可以添加图层的坐标系。 ggplot()的第一个参数是要在图中使用的数据集。所以ggplot(data = mpg)会创建一个空图。

    您可以通过向ggplot()添加一个或多个图层来完成图表。函数geom_point()为绘图添加一层点,从而创建散点图。 ggplot2附带了许多geom函数,每个函数都为绘图添加了不同类型的图层。

    ggplot2中的每个geom函数都采用映射参数。这定义了数据集中的变量如何映射到可视属性。 mapping参数始终与aes()配对,aes()的x和y参数指定要映射到x和y轴的变量。 ggplot2在data参数中查找映射变量,在本例中为mpg。

    ggplot(data = <DATA>) + 
      <GEOM_FUNCTION>(mapping = aes(<MAPPINGS>))
    
    • 问题:

    1.运行ggplot(data = mpg)。 你看到了什么?
    2.mpg中有多少行? 多少列?
    3.drv变量描述了什么? 阅读帮助?mpg找出答案。
    4.制作hwy vs cyl的散点图。
    5.如果你制作一个类vs drv的散点图会发生什么? 为什么情节没用?

    • 答案:

    1.仅仅运行ggplot(data = mpg),将会出现一个只有背景的空图。
    2.运行dim(mpg),发现mpg有234行,14列。
    3.使用?drv,提示我们drv变量是汽车的驱动属性,f =前轮驱动,r =后轮驱动。
    4和5.类属性不适合画散点图

    映射

    “图片的最大价值在于它迫使我们注意到我们从未预料到的东西。” - 约翰图基

    在下图中,一组点(以红色突出显示)似乎超出了线性趋势。 这些车的里程比您预期的要高。 你怎么解释这些车?

    让我们假设汽车是混合动力车。测试这个假设的一种方法是查看每辆车的等级值。 mpg数据集的类变量将汽车分类为组,例如紧凑型,中型和SUV。如果外围点是混合动力车,它们应该归类为紧凑型轿车,或者可能是微型汽车(请记住,这些数据是在混合动力卡车和SUV变得流行之前收集的)。

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


    您可以通过将绘图中的aesthetic映射到数据集中的变量来传达有关数据的信息。 例如,您可以将点的颜色映射到类变量以显示每辆汽车的类。
    
    
    ggplot(data = mpg) + 
      geom_point(mapping = aes(x = displ, y = hwy, color = class))
    

    要将aesthetic映射到变量,请将aesthetic的名称与aes()中的变量名称相关联。 ggplot2将自动为变量的每个唯一值分配唯一级别(这里是一种独特的颜色),这个过程称为缩放。 ggplot2还将添加一个图例,说明哪些级别对应于哪些值。

    颜色显示许多不寻常的点是双座汽车。这些车似乎不像混合动力车,实际上是跑车!跑车有大型发动机,如SUV和皮卡车,但小型车身,如中型和小型车,这提高了他们的汽油里程。事后看来,这些汽车不太可能是混合动力车,因为它们有大型发动机。

    在上面的例子中,我们将类映射到颜色,但我们可以以相同的方式将类映射到大小。在这种情况下,每个点的确切大小将揭示其类别隶属关系。我们在这里得到一个警告,因为将无序变量(类)映射到有序(大小)并不是一个好主意。

    ggplot(data = mpg) + 
      geom_point(mapping = aes(x = displ, y = hwy, size = class))
    #> Warning: Using size for a discrete variable is not advised.
    

    SUV发生了什么事? ggplot2一次只能使用六个形状。默认情况下,使用形状美学时,其他组将进行非开槽。

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

    绘制美学图后,ggplot2会处理其余部分。它选择了一个合理的尺度来与美学一起使用,它构建了一个解释水平和价值之间映射的图例。对于x和y美学,ggplot2不会创建图例,但会创建带有刻度线和标签的轴线。轴线充当传奇;它解释了位置和值之间的映射。

    您还可以手动设置geom的aesthetic属性。例如,我们可以将我们的情节中的所有点都设为蓝色:

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

    这里,颜色不传达有关变量的信息,但只改变绘图的外观。 要手动设置美学,请按名称设置美学作为您的几何函数的参数; 即它超出了aes()。 你需要选择一个对美学有意义的关卡:

    作为字符串的颜色名称。

    以mm为单位的点的大小。

    一个点的形状为数字,如下图所示。



    如图所示R有25个内置形状,由数字标识。 有一些看似重复:例如,0,15和22都是正方形。 不同之处在于颜色的相互作用。 中空形状(0-14)具有由颜色确定的边界; 实心形状(15-18)充满了颜色; 填充的形状(21-24)具有颜色边框并填充填充。

    练习

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

    注意:color映射应该在aes外。

    相关文章

      网友评论

        本文标题:R for data science (第一章)①

        本文链接:https://www.haomeiwen.com/subject/zlottqtx.html