专栏首页庄闪闪的R语言手册R数据科学|5.5.1 习题解答

R数据科学|5.5.1 习题解答

.5.1 习题解答

问题一

前面对比了已取消航班和未取消航班的出发时间,使用学习到的知识对这个对比的可视化结果进行改善。

解答

可以绘制箱线图进行比较

nycflights13::flights %>%
  mutate(
    cancelled = is.na(dep_time),
    sched_hour = sched_dep_time %/% 100,
    sched_min = sched_dep_time %% 100,
    sched_dep_time = sched_hour + sched_min / 60
  ) %>%
  ggplot() +
  geom_boxplot(mapping = aes(y = sched_dep_time, x = cancelled))

问题二

在钻石数据集中,哪个变量对于预测钻石的价格最重要?这个变量与切割质量的关系是怎样的?为什么这两个变量的关系组合会导致质量更差的钻石价格更高呢?

解答

我会先从如下几个变量考虑:carat、clarity、color和cut。我忽略了刻画砖石维度的变量,因为carat测量的是钻石的大小,因此包含了这些变量中的大部分信息。因为price和carat都是连续型变量,可以通过绘制散点图来寻找它们之间的关系:

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

然而,由于数据中有大量的点,我将绘制对carat进行分区的箱线图,需要注意的是,装箱宽度的选择很重要,如果宽度太大,就会模糊任何关系;如果宽度太小,箱中的值可能变化太大,无法揭示潜在的趋势:

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

color与price之间存在微弱的负相关关系。钻石颜色的等级从D(最好)到J(最差)。目前,color的级别顺序是错误的。在绘图之前,我将重排color的顺序,使它们在x轴上的质量顺序递增。

ggplot(data = diamonds, mapping = aes(x = carat, y = price)) +
  geom_boxplot(mapping = aes(group = cut_width(carat, 0.1)), orientation = "x")
```diamonds %>%
  mutate(color = fct_rev(color)) %>%
  ggplot(aes(x = color, y = price)) +
  geom_boxplot()diamonds %>%
  mutate(color = fct_rev(color)) %>%
  ggplot(aes(x = color, y = price)) +
  geom_boxplot()

clarity与price之间也存在微弱的负相关。清晰度的等级从I1(最差)到IF(最好)。

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

就clarity和color而言,每个类别内部的差异要比类别之间的差异大得多。carat显然是预测钻石价格的最佳指标。现在我们已经确定carat似乎是最好指标,它和cut之间的关系是什么?因为这是连续(carat)和分类(cut)变量的示例,所以可以用箱形图将其可视化。

ggplot(diamonds, aes(x = cut, y = carat)) +
  geom_boxplot()

在每种切割类别中,克拉大小的分布有很大的变化。carat与cut之间有轻微的负相关。值得注意的是,克拉最大的钻石上均值最低。这种消极的关系可能是由于钻石被选择出售的方式。较大的钻石可以通过较简单的切割就可获利出售,而较小的钻石需要较精细的切割。

问题三

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

解答

  • 使用coord_flip()函数
ggplot(data = mpg) +
  geom_boxplot(mapping = aes(x = reorder(class, hwy, FUN = median), y = hwy)) +
  coord_flip()
  • 安装ggstance
library("ggstance")

ggplot(data = mpg) +
  geom_boxploth(mapping = aes(y = reorder(class, hwy, FUN = median), x = hwy))

【注】会发现得到的两幅图是一样的,但是x和y表示的变量却不同。现在的ggplot2可以直接通过设置参数orientation来改变图形朝向。

ggplot(data = mpg) +
  geom_boxplot(mapping = aes(y = reorder(class, hwy, FUN = median), x = hwy), orientation = "y")

问题四

箱线图存在的问题是,在小数据集时代开发而成,对于现在的大数据集会显示出数量极其庞大的异常值。解决这个问题的一种方法是使用字母价值图。安装lvplot包,并尝试使用geom_lv()函数来显示价格基于切割质量的分布。你能发现什么问题?如何解释这种图形?

解答

像箱形图一样,字母值图的箱形图对应于分位数。然而,它们包含的分位数远比箱形图多。它们对于大型数据集非常有用,因为, 更大的数据集可以给出超过四分位数的精确估计。并且更大的数据集应该有更多的异常值(以绝对值计算)。

ggplot(diamonds, aes(x = cut, y = price)) +
  geom_lv()

问题五

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

解答

geom_freqpoly()更适合查找:这意味着给定价格,很容易知道哪个切割密度最高。然而,重叠的线使得区分总体分布如何相互关联变得困难。 geom_violin()geom_histogram()有相似的优点和缺点。很容易从视觉上区分分布整体形状的差异(偏斜度、中心值、方差等)。然而,由于我们不能轻易地比较分布的垂直值,因此很难查找给定价格下哪一类别的密度最高。所有这些方法都依赖于调整参数来确定分布的平滑程度。

ggplot(data = diamonds, mapping = aes(x = price, y = ..density..)) +
  geom_freqpoly(mapping = aes(color = cut), binwidth = 500)
ggplot(data = diamonds, mapping = aes(x = price)) +
geom_histogram() +
facet_wrap(~cut, ncol = 1, scales = "free_y")
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
ggplot(data = diamonds, mapping = aes(x = cut, y = price)) +
geom_violin() +
coord_flip()

问题六

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

解答

有两种方法:

  • geom_quasirandom()生成混合了抖动和小提琴图像的图像。有几种不同的方法可以精确地确定点的随机位置是如何生成的。
  • geom_beeswarm()生成一个类似于小提琴绘图的绘图,但是通过抵消这些点。我将使用mpg盒图示例,因为这些方法显示单独的点,它们更适合于较小的数据集。
ggplot(data = mpg) +
  geom_quasirandom(mapping = aes(
    x = reorder(class, hwy, FUN = median),
    y = hwy
  ))
ggplot(data = mpg) +
 geom_quasirandom(
   mapping = aes(
     x = reorder(class, hwy, FUN = median),
     y = hwy
   ),
   method = "tukey"
 )
ggplot(data = mpg) +
  geom_quasirandom(
    mapping = aes(
      x = reorder(class, hwy, FUN = median),
      y = hwy
    ),
    method = "tukeyDense"
  )
ggplot(data = mpg) +
geom_quasirandom(
  mapping = aes(
    x = reorder(class, hwy, FUN = median),
    y = hwy
  ),
  method = "frowney"
)
ggplot(data = mpg) +
  geom_quasirandom(
    mapping = aes(
      x = reorder(class, hwy, FUN = median),
      y = hwy
    ),
    method = "smiley"
  )
ggplot(data = mpg) +
  geom_beeswarm(mapping = aes(
    x = reorder(class, hwy, FUN = median),
    y = hwy
  ))

本文分享自微信公众号 - 庄闪闪的R语言手册(Zss_R4ds),作者:我才是赵西西

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-12-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • R数据科学|3.6习题解答

    这个问题是数据分析的一个基本问题:成本函数。作为分析人员,我们之所以对航班延误感兴趣,是因为对乘客来说代价高昂。在许多情况下,到达延迟更重要。在大多数情况下,迟...

    庄闪闪
  • R数据科学|第十一章内容介绍

    因子在 R 中用于处理分类变量。从历史上看,因子远比字符串更容易处理。因此,R 基础包中的很多函数都自动将字符串转换为因子。

    庄闪闪
  • R数据科学|5.3课后习题解答

    研究 x、y 和 z 变量在 diamonds 数据集中的分布。你能发现什么?思考一下,对于一条钻石数据,如何确定表示长、宽和高的变量?

    庄闪闪
  • R数据科学|5.5.1 内容介绍

    如果变动描述的是一个变量内部的行为,那么相关变动描述的就是多个变量之间的行为。相关变动是两个或多个变量以相关的方式共同变化所表现出的趋势。查看相关变动的最好 方...

    庄闪闪
  • R数据科学|3.4内容介绍及习题解答

    通过基于变量名的操作,select()函数可以让你生成一个有用的变量子集。基本用法如下:

    庄闪闪
  • R数据科学|3.7内容介绍及习题解答

    虽然与summarize()函数结合起来使用是最有效的,但分组也可以与mutate()和filter()函数结合,以完成非常便捷的操作。示例如下:

    庄闪闪
  • R数据科学|3.5内容介绍及习题解答

    上节我们对选择现有的列进行了介绍与习题解答,现在对数据框添加新列进行介绍,这里使用mutate()函数,注意:mutate()总是将新列添加在数据集的最后。

    庄闪闪
  • R数据科学|5.4内容介绍及习题解答

    我们不建议使用这种方式,因为一个无效测量不代表所有测量都是无效的。此外,如果数据质量不高,若对每个变量都采取这种做法,那么你最后可能会发现数据已经所剩无几!

    庄闪闪
  • R数据科学|5.5.2内容介绍及课后习题解答

    要想对两个分类变量间的相关变动进行可视化表示,需要计算出每个变量组合中的观测数量。常用的两种方法有:

    庄闪闪
  • R数据科学|3.2.4课后习题

    《R数据科学》是一本很好的R学习教材,这里给出第三章3.2.4[1]习题解答,仅供参考。如有误,望指正。

    庄闪闪
  • R数据科学|3.3课后习题

    《R数据科学》是一本很好的R学习教材,小编学习过程中,把作业题做了一下,今天给出第三章3.3[1]习题解答,仅供参考。如有误,可留言。

    庄闪闪
  • 【数据科学】数据科学能回答什么样的问题?

    机器学习是数据科学的发动机。每种机器学习方法(也称为算法)获取数据,反复咀嚼,输出结果。机器学习算法负责数据科学里最难以解释又最有趣的部分。数学的魔法在此发生。...

    陆勤_数据人网
  • 数据科学&机器学习常见面试题答案,建议收藏

    技术的不断进步使得数据和信息的产生速度今非昔比,并且呈现出继续增长的趋势。此外,目前对解释、分析和使用这些数据的技术人员需求也很高,这在未来几年内会呈指数增长。...

    华章科技
  • 想转行人工智能?机会来了!!!

    昱良
  • 想转行人工智能?机会来了!!!

    2018年1月 教育部印发的《普通高中课程方案和语文等学科课程标准》新加入了数据结构、人工智能、开源硬件设计等 AI 相关的课程。

    Java团长
  • 机器学习最受欢迎的语言:Python、Java 还是 R ?

    【新智元导读】要想获得机器学习或数据科学的工作机会,什么编程语言是最应该学习的呢? 要想获得机器学习或数据科学的工作机会,什么编程语言是最应该学习的呢?这是一个...

    新智元
  • 面对来势汹汹的AI大潮,你该如何应对?

    2018年1月 教育部印发的《普通高中课程方案和语文等学科课程标准》新加入了数据结构、人工智能、开源硬件设计等 AI 相关的课程。

    abs_zero
  • 机器学习和数据科学领域,最流行的语言是什么?

    在开展数据分析项目或职业生涯规划时,应选哪一种编程语言?对此问题,不同职业背景的人给出的答案各不相同。让我们从数据角度来看看,人们在机器学习和数据科学方面所选的...

    陆勤_数据人网
  • 用Spark做数据科学

    我们与Exaptive的数据科学家Frank Evans就Spark在数据科学中的地位进行了非常愉快的交流。

    此中剑无涯

扫码关注云+社区

领取腾讯云代金券