Rではじめるデータサイエンス 演習3章 2,3,7節
続き。

- 作者:Hadley Wickham,Garrett Grolemund
- 発売日: 2017/10/25
- メディア: 単行本(ソフトカバー)
なお、目的は思い出すためなので割と省略している。
3-2.演習
1.次のようなフライトを探す。 a.到着が2時間以上遅れた
?flitghsを見ると、arr_delayが出発。単位は分。
flights %>% filter(arr_delay >= 120)
b.ヒューストン(IAHまたはHOU)へのフライト
flights %>% filter(dest == "IAH" || dest == "HOU")
flights %>% filter(dest %in% c("IAH","HOU") )
でも良い。
c.United、American、またはDeltaによるフライト
flights %>% filter(carrier %in% c("AA", "DL", "UA"))
d.夏期(7~9月)のフライト
flights %>% filter(month >= 7, month <= 9)
e.到着が2時間を超えて遅れたが、出発が遅れなかったフライト
flights %>% filter(dep_delay <= 0, arr_delay > 120)
2.dplyrでフィルタ処理に役立つもう1つのヘルパー関数がbetween()だ。これは何をするか。問 題1の中でこれを使って答を簡単化できるか。
flights %>% filter(between(month, 7, 9))
3.dep_timeが欠損値の便はいくつあるか。他に欠損している変数は何か。これらの行は何を表す か。
flights %>% filter(is.na(dep_time)) %>% summarise(n()) #> 8255
3.3.演習
1. 欠損値を頭に整列させるためにarrange()をどのように使えばよいか(ヒント:is.na()を使 う)。
flights %>% arrange(desc(is.na(dep_time)),dep_time)
is.na(dep_time)でTRUE(1),FALSE(0)になるのでdescで降順。
2. flightsを整列して、遅延が最も大きかった便を探す。最も朝早く出発したフライトを探すには どうするか。
flights %>% arrange(desc(dep_time))
(以下略)
3.7 演習
メモ。group_byしてからsummarise(hoge = 集約関数)はレコードがgroupに対してユニークになり、hogeに集約結果を入れる。
一方で、group_byしてからmutate(hoge = 集約関数) の場合、mutateは各行に対してgroupに応じた集約結果をhogeに入れる。
そのため、レコードはユニークではなく元のレコードとで、同じgroupのレコードはhogeが同じ値が入る。
つまり、この2つはデータに対しての挙動が異なる。なんとなくSQLのGROUP BYでgroup_byを捉えていたが別物で、あくまで集約関数に対する処理としてのメタ情報が付与されるだけ。
ユニークにするのはsummarise関数の機能。そのため、mutate自体にユニークにする機能はなく、あくまでメタ情報に基づいた集約をおこなうだけなのでレコードはそのままになる。
# summarise flights %>% select(year,month,day) %>% group_by(year,month,day) %>% summarise(day_n = n()) %>% arrange(year,month,day)
year | year | month | day_n |
---|---|---|---|
2013 | 1 | 1 | 842 |
2013 | 1 | 2 | 943 |
2013 | 1 | 3 | 914 |
2013 | 1 | 4 | 915 |
2013 | 1 | 5 | 720 |
2013 | 1 | 6 | 832 |
2013 | 1 | 7 | 933 |
2013 | 1 | 8 | 899 |
2013 | 1 | 9 | 902 |
2013 | 1 | 10 | 932 |
# muteta flights %>% select(year,month,day) %>% group_by(year,month,day) %>% mutate(day_n = n()) %>% arrange(year,month,day)
year | month | day | day_n |
---|---|---|---|
2013 | 1 | 1 | 842 |
2013 | 1 | 1 | 842 |
2013 | 1 | 1 | 842 |
2013 | 1 | 1 | 842 |
2013 | 1 | 1 | 842 |
2013 | 1 | 1 | 842 |
2013 | 1 | 1 | 842 |
2013 | 1 | 1 | 842 |
2013 | 1 | 1 | 842 |
2013 | 1 | 1 | 842 |
また、ungroupをおこなわないとgroupのメタ情報は残ったままなので、注意。例えば、arrangeはgroup毎におこなわれるためgroup解除前と挙動が変わる。
2.どの飛行機(tailnum)が定時離着陸記録に関して最悪か。
arr_delayの中央値が大きいものが最悪とすると
flights %>% group_by(tailnum) %>% summarise(avg = mean(arr_delay, na.rm = T)) %>% arrange(-avg)
(省略)