注意書き
当該記事には「Rではじめるデータサイエンス」のネタバレを多数含みます。
自分で回答することが一番の力になりますのでなるべく自力で回答するようよろしくお願いいたします。
- 1. dep_timeとsched_dep_timeとは見やすいが、連続的な数になっていないので、計算するには面倒だ。より便利な深夜0時からの分単位の数に変換しなさい。
- 2. air_timeとarr_time - dep_timeと比較しなさい。何がわかると期待するか。何がわかったか。不具合を解決するにはどうするか。
- 3. dep_time, sched_dep_time, dep_delayを比較しなさい。この3つの数値にはどんな関係があると期待するか。
- 4. 遅延が最も大きかった10便をランク付け関数で求めなさい。同一の値はどう処理したいか。min_rank()のドキュメントを注意して読むこと。
- 5. 1:3 + 1:10は何を返すか。それはなぜか。
- 6. 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と比較しなさい。何がわかると期待するか。何がわかったか。不具合を解決するにはどうするか。
何がわかったか。
実際に計算して比較してみましょう。
df1 = mutate(flights, gap_arr_dep = arr_time - dep_time ) df2 = select(df1, air_time, gap_arr_dep)
本来であれば一致しても良さそうですが、実際の所殆ど一致しません。
3. dep_time, sched_dep_time, dep_delayを比較しなさい。この3つの数値にはどんな関係があると期待するか。
変数名 | 変数の内容 |
---|---|
dep_time | 実際の出発時刻 |
sched_dep_time | 出発予定時刻 |
dep_delay | 出発の遅れ。マイナスの時は早く出発したことを指す |
となります。
したがって、
- dep_time = sched_dep_time + dep_delay
- sched_dep_time = dep_time - dep_delay
- 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までの整数の配列を作成し、長い方の配列に短い方の配列を頭から順に足していきます。