public bigdata

R4DS (R for DataScience) 3장 본문

R programming/R4DS (R for DataScience)

R4DS (R for DataScience) 3장

public bigdata 2019. 12. 2. 22:26

3.1 dplyr

  • filter
  • arrange
  • select
  • mutate
  • summarize

해당 함수들은 모두 group_by에 의해서 그룹마다 동작하도록 할 수 있다.

3.2.1 비교연산

> sqrt(2)^2 == 2
[1] FALSE
> 1/49*49 == 1
[1] FALSE

컴퓨터는 유한한 정밀도의 산술을 사용하므로 위와 같은 결과가 도출된다. == 대신 near 함수를 사용하면 아래와 같다

> dplyr::near(sqrt(2)^2, 2)
[1] TRUE
> dplyr::near(1/49*49, 1)
[1] TRUE

3.2.2 논리 연산자

드모르간 법칙을 적용한 R 논리 연산자

  • !(x&y) --> !x|!y
  • !(x|y) --> !x & !y

3.6.4 집계와 논리형 서브셋을 조합하는 것이 유용할 때가 있다.

note_cancelled %>% 
  group_by(year, month, day) %>% 
  summarise(
    avg_delay = mean(arr_delay),
    avg_delay2 = mean(arr_delay[arr_delay > 0]) # 이부분
  )

3.6.4 유용한 요약 함수

산포 측정값 

  • sd() : 표준편차
  • IQR() : 사분위 범위
  • mad() : 이상값이 있을 때 더 유용할 수 있는 로버스트한 대체값

순위측정값

  • min
  • quantile
  • max

자리 측정값

  • first
  • nth
  • last

x[1], x[2], x[length(x)]와 유사하게 동작하지만 자리가 존재하지 않을 때 기본값을 설정할 수 있다.

아래처럼 복잡한 필터링도 가능하다

note_cancelld %>% 
  group_by(year, month,  day) %>% 
  mutate(r = min_rank(desc(dep_time))) %>% 
  filter(r %in% range(r))

year, month, day 그룹별로 dep_time을 내림차순으로 min_rank를 매겨서 r이라는 변수를 만든 뒤에 year, month, day별로 r의 최소, 최대값을 구한 뒤에 해당 r이 최소, 최대 순위에 해당할 때 데이터를 가져오는 코드이다. group_by는 mutate, filter를 만나도 그룹이 벗겨지지 않는다. summarise 함수를 만날 때만 한 꺼풀씩 벗겨진다.

 

카운트

현재 그룹의 크기를 반환하는 n().을 사용하거나, 결측이 아닌 수를 카운트 하려면 sum(!is.na(x)), 유일한 값 개수를 카운트하려면 n_distinct(x)를 사용하라.

논리형 값의 카운트와 비율

수치형 함수와 사용할 경우 TRUE는 1 FALSE는 0으로 바뀌어 mean을 사용하면 조건을 만족하는 비율을 알 수 있다.

> iris %>% 
+   group_by(Species) %>% 
+   summarise(ratio_sepal.widht3 = mean(Sepal.Width>=3))
# A tibble: 3 x 2
  Species    ratio_sepal.widht3
  <fct>                   <dbl>
1 setosa                  0.96 
2 versicolor              0.32 
3 virginica               0.580

3.6.5 여러 변수로 그룹화

여러 변수로 그룹화하면 요약값은 그룹화의 한 수준씩 벗겨낸다. summarise가 한 수준씩 벗겨낸다고 알고 있자.

3.6.7 연습문제

1) mean, lead, lag, min_rank, row_number등의 함수들은 group_by와 함께 mutate또는 filter 내에서 사용될 때 각 그룹 내에서 작동한다. 

+, -, <, ==, %%, %/%, log (산술 연산자, 논리 연산자, 모듈식 산술 연산자, 로그 함수)는 group_by의 영향을 받지 않는다.

2) 그룹화 mutate, filter에서 가장 자연스럽게 동작하는 함수는 윈도 함수들도 있다고 알려져 있다. 해당 함수들은 vignette("window-functions"))에서 알아볼 수 있다.

3.7.1 연습문제

6번

해당 문제에서 표준화를 하는 이유는 scale이 크거나, 분포가 종모양이 아닌 경우에 표준화를 통해서 어느 정도 분포를 종모양과 비슷하게 만들어 준 뒤에 어떤 값이 이상치인지 알아보기 위해 표준화를 하는 것으로 이해 하였다.

 

4장

4.1코드실행하기

  • 컨+shift+s를 통해 코드 전체 실행
  • 스크립트 공유하는 경우 install.packages(), setwd()를 포함하여 다른 살마의 컴퓨터 설정을 변경하게 하는 것은 옳지 않다.