Chapter 8 分群分析group_by()

cheatsheet截圖對照

第一部分

分群分析與群內排序

group_by()函數會由原本資料集產生一個新的分群過的資料集,通常會與summarise函數一起運用。可以直接理解為group by certain variable。

  1. 用group_by函數看看「哪一家航空公司(carrier)」的「平均起飛延遲」最嚴重?
flights %>% group_by(carrier) %>%
summarise_at(vars(dep_delay), funs(mean), na.rm = T) %>%
arrange(desc(dep_delay)) %>% rename(dep_delay_mean = dep_delay)
## # A tibble: 16 x 2
##    carrier dep_delay_mean
##    <chr>            <dbl>
##  1 F9               20.2 
##  2 EV               20.0 
##  3 YV               19.0 
##  4 FL               18.7 
##  5 WN               17.7 
##  6 9E               16.7 
##  7 B6               13.0 
##  8 VX               12.9 
##  9 OO               12.6 
## 10 UA               12.1 
## 11 MQ               10.6 
## 12 DL                9.26
## 13 AA                8.59
## 14 AS                5.80
## 15 HA                4.90
## 16 US                3.78
  1. 可以設定多個分組依據
# 我想要知道個別`航空公司(carrier) `,哪些`航班路線(Flight number)`起飛通常比較容易遇到延遲?
flights %>% group_by(carrier, flight) %>%
summarise_at(vars(dep_delay), funs(mean), na.rm = T) %>%
arrange(desc(dep_delay)) %>% rename(dep_delay_mean = dep_delay)
## # A tibble: 5,725 x 3
## # Groups:   carrier [16]
##    carrier flight dep_delay_mean
##    <chr>    <int>          <dbl>
##  1 WN         521            346
##  2 DL         390            334
##  3 DL         809            298
##  4 UA        1510            278
##  5 EV        5478            242
##  6 EV        5117            219
##  7 9E        3760            217
##  8 EV        5855            209
##  9 WN        1019            203
## 10 WN         217            195
## # ... with 5,715 more rows
  1. 我想要知道1~12月份,「每個月份」的「各個日期」,航班「平均起飛延遲」嚴重程度比較?(group_by + arrange組合技)
#意思就是,群內(或者說組內)排序怎麼做?
#請查詢 Help,重點是arrange函數裡面的 .by_group 參數
flights %>% group_by(month, day) %>%
summarise_at(vars(dep_delay), funs(mean), na.rm = T) %>%
arrange(desc(dep_delay), .by_group = T)
## # A tibble: 365 x 3
## # Groups:   month [12]
##    month   day dep_delay
##    <int> <int>     <dbl>
##  1     1    31      28.7
##  2     1    30      28.6
##  3     1    16      24.6
##  4     1    25      21.9
##  5     1    13      19.9
##  6     1    24      19.5
##  7     1    28      15.1
##  8     1     2      13.9
##  9     1    22      12.5
## 10     1     1      11.5
## # ... with 355 more rows

範例

若完成,請直接貼到open chat

  1. 若有一位買家對於這32台車子很有興趣,特別是在省油表現(Miles/(US) gallon, mpg),以及馬力表現(hp, Gross horsepower)有很大的興趣,你要整理哪些資料?

  2. 後來他希望能夠買到馬力性能比較強的車,他要求你將馬力表現高於平均的車款額外整理給他,應該怎麼做呢?

  3. 假設這位買家最近試駕了很多台車款,閒聊時候偶然跟你分享他獨家的選車know-how,標準是省油表現(Miles/(US) gallon,mpg)數字的十倍,再加上馬力表現的總和,越高越好,請問哪一台車應該是他的心頭好?

  4. 要成交前,該位買家因為莫名原因心情好,決定要買他挑選標準該數據的前三名,請問你應該給他哪三台車的最終報價?

  5. 服務完這位客戶後,發現自己累積了不少經驗,也留意到汽缸數多寡與馬力有一定關聯性,閒來之餘想要整理一下相同汽缸數下,不同車款的馬力比較表作為往後參考,請問該怎麼做?

mtcars
mtcars %>% group_by(cyl) %>% arrange(desc(hp), .by_group = T)

自主練習

  1. (延續上一題)休士頓火箭隊,各個守備位置各有多少人?
  1. 隊(Team)、守備位置(Position)是兩個分組條件
  2. 計算row(或者說樣本個數),可以用n(), number of values/rows,可參考dplyr cheatsheet