R数据科学|3.6习题解答

简介: R数据科学|3.6习题解答

问题一

通过头脑风暴,至少找出 5 种方法来确定一组航班的典型延误特征。思考以下场景。

  • 一架航班 50% 的时间会提前 15 分钟,50% 的时间会延误 15 分钟。
  • 一架航班总是会延误 10 分钟。
  • 一架航班 50% 的时间会提前 30 分钟,50% 的时间会延误 30 分钟。
  • 一架航班 99% 的时间会准时,1% 的时间会延误 2 个小时。哪一种更重要:到达延误还是出发延误?


解答

这个问题是数据分析的一个基本问题:成本函数。作为分析人员,我们之所以对航班延误感兴趣,是因为对乘客来说代价高昂。在许多情况下,到达延迟更重要。在大多数情况下,迟到对乘客来说成本更高,因为这可能会打乱其下一阶段的旅行,例如转机或预定的会议。如果出发在不影响到达时间的情况下延迟,则此延迟不会影响计划,也不会影响旅行总时间。如果在飞机上狭窄的范围内花费更少的时间,如果这种延迟时间仍然花在跑道上的狭窄范围内,那么这种延迟可能是有益的。


问题二

找出另外一种方法,这种方法要可以给出与not_cancelled %>% count(dest) 和 not_ cancelled %>% count(tailnum, wt = distance)同样的输出(不能使用count())。


解答

  • 方法一
not_cancelled %>% 
  count(dest)
  • 方法二
not_cancelled %>%
  group_by(dest) %>%
  summarise(n = length(dest))
  • 方法三
not_cancelled %>%
  group_by(dest) %>%
  summarise(n = n())


问题三

我们对已取消航班的定义(is.na(dep_delay)) | (is.na(arr_delay))稍有欠佳。为什么?哪一列才是最重要的?

解答

如果一架飞机从来没有离开过,那么它就不会到达。如果飞机坠毁,飞机也可能离开而没有到达,或者飞机改道而降落在目的地以外的机场。因此,最重要的列是arr_delay,它表示到达延误次数。


问题四

查看每天取消的航班数量。其中存在模式吗?已取消航班的比例与平均延误时间有关系吗?


解答

一种模式是,取消航班的数量随着每天航班总数的增加而增加。取消航班的比例随着航班的平均延误而增加。从下列代码中可以看出规律:

cancelled_per_day <- 
  flights %>%
  mutate(cancelled = (is.na(arr_delay) | is.na(dep_delay))) %>%
  group_by(year, month, day) %>%
  summarise(
    cancelled_num = sum(cancelled),
    flights_num = n(),
  )
  ggplot(cancelled_per_day) +
  geom_point(aes(x = flights_num, y = cancelled_num))

航班取消的比例和平均起飞延误之间的关系:

cancelled_and_delays <- 
  flights %>%
  mutate(cancelled = (is.na(arr_delay) | is.na(dep_delay))) %>%
  group_by(year, month, day) %>%
  summarise(
    cancelled_prop = mean(cancelled),
    avg_dep_delay = mean(dep_delay, na.rm = TRUE),
    avg_arr_delay = mean(arr_delay, na.rm = TRUE)
  ) %>%
  ungroup()
  ggplot(cancelled_and_delays) +
  geom_point(aes(x = avg_dep_delay, y = cancelled_prop))


问题五

哪个航空公司的延误情况最严重?挑战:你能否分清这是由于糟糕的机场设备,还是航空公司的问题?为什么能?为什么不能?(提示:考虑一下flights %>% group_by(carrier, dest) %>% summarize(n())。)


解答

延误情况最严重的航空公司:

1:3 + 1:10
flights %>%
 group_by(carrier) %>%
 summarise(arr_delay = mean(arr_delay, na.rm = TRUE)) %>%
 arrange(desc(arr_delay))

通过比较每个航空公司的平均延误和同一航线内航班的平均延误(从同一出发地到同一目的地的航班),你可以弄清机场和航空公司的影响。比较承运人之间和每条航线内的延误,可以理清承运人和机场的影响。更好的分析方法是将一家航空公司航班的平均延误与同一航线内所有其他航空公司航班的平均延误进行比较。

flights %>%
  filter(!is.na(arr_delay)) %>%
  group_by(origin, dest, carrier) %>%
  summarise(
    arr_delay = sum(arr_delay),
    flights = n()
  ) %>%
  group_by(origin, dest) %>%
  mutate(
    arr_delay_total = sum(arr_delay),
    flights_total = sum(flights)
  ) %>%
  ungroup() %>%
  mutate(
    arr_delay_others = (arr_delay_total - arr_delay) /
      (flights_total - flights),
    arr_delay_mean = arr_delay / flights,
    arr_delay_diff = arr_delay_mean - arr_delay_others
  ) %>%
  filter(is.finite(arr_delay_diff)) %>%
  group_by(carrier) %>%
  summarise(arr_delay_diff = mean(arr_delay_diff)) %>%
  arrange(desc(arr_delay_diff))


问题六

count() 函数中的 sort 参数的作用是什么?何时应该使用这个参数?


解答

排序参数,以对结果进行排序。想对结果排序的时候都可以使用sort。

目录
相关文章
|
索引 Python
【数据科学导论】实验五:循环
【数据科学导论】实验五:循环
62 0
|
数据采集 存储 算法
数据挖掘1——课后习题
数据挖掘1——课后习题
322 0
|
数据可视化 大数据
|
数据采集 容器
R数据科学|5.4内容介绍及习题解答
R数据科学|5.4内容介绍及习题解答
303 0
R数据科学|5.4内容介绍及习题解答
|
数据可视化
R数据科学|5.5.2内容介绍及课后习题解答
要想对两个分类变量间的相关变动进行可视化表示,需要计算出每个变量组合中的观测数量。常用的两种方法有
501 0
R数据科学|5.5.2内容介绍及课后习题解答
|
容器
R数据科学|3.2.4课后习题
《R数据科学》是一本很好的R学习教材,这里给出第三章3.2.4[1]习题解答,仅供参考。如有误,望指正。
483 0
R数据科学|3.4内容介绍及习题解答
通过基于变量名的操作,select()函数可以让你生成一个有用的变量子集。
417 0
|
数据处理
R数据科学|3.7内容介绍及习题解答
虽然与summarize()函数结合起来使用是最有效的,但分组也可以与mutate()和filter()函数结合,以完成非常便捷的操作。
723 0
面向数据科学的概率论 一、基础
一、基础 原文:prob140/textbook/notebooks/ch01 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 究竟是什么概率,一直是有争议的辩论主题。
930 0