1. summarize()
- 데이터프레임을 하나의 행으로 축약한다.
summarize(flights,delay = mean(dep_delay,na.rm=TRUE))
# A tibble: 1 × 1
delay
<dbl>
1 12.6
-summarize()는 group_by()와 함께 사용하는게 효율적이다.
-group_by() : 분석의 단위를 전체 데이터셋에서 개별 그룹으로 변경시킴
ex)
by_day <- group_by(flights,year,month,day)
summarize(flights,delay = mean(dep_delay,na.rm=FALSE))
# A tibble: 365 × 4
# Groups: year, month [12]
year month day delay
<int> <int> <int> <dbl>
1 2013 1 1 11.5
2 2013 1 2 13.9
3 2013 1 3 11.0
4 2013 1 4 8.95
5 2013 1 5 5.73
6 2013 1 6 7.15
7 2013 1 7 5.42
8 2013 1 8 2.55
9 2013 1 9 2.28
10 2013 1 10 2.84
# ℹ 355 more rows
# ℹ Use `print(n = ...)` to see more rows
2. 파이프 (%>%)
-ex) 각 위치에 대해 거리와 평균 지연 사이에 관계를 탐색하고 싶다고 해보자
-ex)
by_dest <- group_by(flights, dest)
delay <- summarize(by_dest,
count = n(),
dist = mean(distance, na.rm = TRUE),
delay = mean(arr_delay, na.rm = TRUE))
delay <- filter(delay, count > 20, dest != "HNL")
ggplot(data = delay, mapping = aes(x = dist, y = delay)) +
geom_point(aes(size = count), alpha = 1/3) +
geom_smooth(se = FALSE)
- 세 단계로 이 데이터를 전처리한다.
1. 목적지별로 항공편을 그룹화.
2. 거리, 평균 지연시가느 항공편 수를 계산하여 요약.
3. 잡음이 많은 점과 호놀룰루공항을 제거하는 필터링
- 해당 코드의 단점은 중간 데이터프레임들에 이름을 모두 지어주어야함
--> 이름 짓는 것은 쉽지 않기 때문에 분석 속도가 늦어진다는 단점이 생김
- 해당 문제를 파이프, %>%로 해결할수 있음
delay <- flights %>%
group_by(dest) %>%
summarize(
count = n(),
dist = mean(distance,na.rm=TRUE),
delay = mean(arr_delay, na.rm=TRUE)
)%>%
filter(count>20,dest !="HNL")
- 코드만 보더라도 조금더 최적화 되어 있음을 알 수 있다.
- 해당 방식은 코드를 더 읽기 쉽게 만든다.
- 해당 코드는 다음과 같이 해석할수있다.
- 그룹화하고, 그다음 요약하고, 그다음 필터링하라.
- %>% : 그다음 으로 읽는 것이 효과적이다.
cf)
- x %>% f(y) == f(x,y)
- f(x,y) %>% g(z) == g(f(x,y),z)
3.na.rm
- na.rm을 우리가 TRUE라고 설정을 했었는데 만약 설정하지 않으면 어떻게 될까?
flights %>%
group_by(year,month,day) %>%
summarize(mean = mean(dep_delay))
# A tibble: 365 × 4
# Groups: year, month [12]
year month day mean
<int> <int> <int> <dbl>
1 2013 1 1 NA
2 2013 1 2 NA
3 2013 1 3 NA
4 2013 1 4 NA
5 2013 1 5 NA
6 2013 1 6 NA
7 2013 1 7 NA
8 2013 1 8 NA
9 2013 1 9 NA
10 2013 1 10 NA
# ℹ 355 more rows
- NA가 많이 생긴다는 것을 볼 수 있다.
- 그 이유는 결측값이 있으면 출력도 보편적으로 결측값이 되기 때문이다.
- 이를 해결하기위해 na.rm 인수를 이용하여 계산 전에 결측값들을 제거할 수 있다.
flights %>%
group_by(year,month,day) %>%
summarize(mean = mean(dep_delay, na.rm = TRUE))
# A tibble: 365 × 4
# Groups: year, month [12]
year month day mean
<int> <int> <int> <dbl>
1 2013 1 1 11.5
2 2013 1 2 13.9
3 2013 1 3 11.0
4 2013 1 4 8.95
5 2013 1 5 5.73
6 2013 1 6 7.15
7 2013 1 7 5.42
8 2013 1 8 2.55
9 2013 1 9 2.28
10 2013 1 10 2.84
# ℹ 355 more rows
- 이 경우 NA는 취소된 항공편을 나타낸다.
- 취소된 항공편을 제거하여 문제를 해결할 수 있다.
4.count
- 집계를 수행할 때마다 카운트 n() 혹은, 결측이 아닌 값의 카운트 sum(!is.na(x))를 포함하는 것이 좋다.
- 매우 적은 양의 데이터를 기반으로 결론을 도출하지 않는지 확인할 수 있다.
'DS Study > R4DS(R언어)' 카테고리의 다른 글
[R4DS] [3-2] 결측값 (0) | 2024.04.03 |
---|---|
[R4DS] [3-1] 탐색적 데이터 분석(EDA) (0) | 2024.04.01 |
[R4DS] [2-5] mutate() (0) | 2024.03.31 |
[R4DS] [2-4] select() (0) | 2024.03.31 |
[R4DS] [2-3] arrange() (0) | 2024.03.31 |