まずは蝋の翼から。

学んだことを書きながら確認・整理するためのメモブログ。こういうことなのかな?といったことをふわっと書いたりしていますが、理解が浅いゆえに的はずれなことも多々あると思うのでツッコミ歓迎

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

続き。

Rではじめるデータサイエンス

Rではじめるデータサイエンス

なお、目的は思い出すためなので割と省略している。

knknkn.hatenablog.com

knknkn.hatenablog.com

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)

(省略)