空飛ぶチンアナゴの統計解析日記

統計解析を嗜むチンアナゴのメモ帳です

3.5 練習問題の解答と解説

注意書き
当該記事には「Rではじめるデータサイエンス」のネタバレを多数含みます。
自分で回答することが一番の力になりますのでなるべく自力で回答するようよろしくお願いいたします。

1. dep_timeとsched_dep_timeとは見やすいが、連続的な数になっていないので、計算するには面倒だ。より便利な深夜0時からの分単位の数に変換しなさい。

new_df= mutate(flights_sml,
               dep_time_min = (dep_time %/% 100) * 60 + dep_time %% 100
)

で求めることができます。

2. air_timeとarr_time - dep_timeと比較しなさい。何がわかると期待するか。何がわかったか。不具合を解決するにはどうするか。

何がわかると期待するか。

air_timeは飛行時間で、arr_timeとdep_timeはそれぞれ到着時刻と出発時刻を表すため飛行時間が算出されることが期待されます。

何がわかったか。

実際に計算して比較してみましょう。

df1 = mutate(flights,
             gap_arr_dep = arr_time - dep_time
             )
df2 = select(df1, air_time, gap_arr_dep)

本来であれば一致しても良さそうですが、実際の所殆ど一致しません。

不具合を解決するにはどうするか。

arr_time、dep_time共に現地のタイムゾーンで記録されているので、タイムゾーンを統一する必要があります。
また、日付をまたぐ便もあるのでそこも修正する必要があるでしょう。

3. dep_time, sched_dep_time, dep_delayを比較しなさい。この3つの数値にはどんな関係があると期待するか。

変数名 変数の内容
dep_time 実際の出発時刻
sched_dep_time 出発予定時刻
dep_delay 出発の遅れ。マイナスの時は早く出発したことを指す

となります。
したがって、

  1. dep_time = sched_dep_time + dep_delay
  2. sched_dep_time = dep_time - dep_delay
  3. dep_delay = dep_time - sched_dep_time

のいずれかの関係が成り立つことが期待されます。

4. 遅延が最も大きかった10便をランク付け関数で求めなさい。同一の値はどう処理したいか。min_rank()のドキュメントを注意して読むこと。

df3 = mutate(flights,
             min_rank(desc(arr_delay))
             )
df4 = filter(df3, 
             min_rank(desc(arr_delay)) <= 10
             )

とすることで(到着時の)遅延が最も大きかった10便を求めることができます。
同一の値の処理についてはR Documentationのrank関数の説明*1と併せてみると良いでしょう。
min_rank()ドキュメント*2ではrank()関数のties.methodが"min"である時と同様の動きをするとあります。rank()関数のties.methodは同一の値を取った時のランク付けを指定する変数で、minである場合は同一の値のインデックスは全て最小の値で統一されます。
「the latter being the typical sports ranking.」とあるようにスポーツの順位付けでよく見られるスタイルになります。

5. 1:3 + 1:10は何を返すか。それはなぜか。

> 1:3
[1] 1 2 3
> 1:10
 [1]  1  2  3  4  5  6  7  8  9 10
> 1:3 + 1:10
 [1]  2  4  6  5  7  9  8 10 12 11
 警告メッセージ: 
 1:3 + 1:10: 
   長いオブジェクトの長さが短いオブジェクトの長さの倍数になっていません 

実際にコンソールに代入するとこのように帰ってきます。
それぞれ1から3までの整数の配列と1から10までの整数の配列を作成し、長い方の配列に短い方の配列を頭から順に足していきます。

6. Rにはどんな三角関数が用意されているか。

stat.ethz.ch
ドキュメントには

They respectively compute the cosine, sine, tangent, arc-cosine, arc-sine, arc-tangent, and the two-argument arc-tangent.

とあるとおり、余弦cosine)、正弦(sine)、正接(tangent)とそれぞれの逆三角関数、アークタンジェント2と呼ばれる関数の計7つです。