일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 핵개발
- 수학적 사고
- 찬물샤워
- 산입범위
- R4DS
- 인터스텔라
- 유닛테스트
- 최저 시급
- 비선형성
- 동전 던지기
- 멘탈관리
- 핵 개발
- t-test
- R 프로그래밍
- 자기관리
- 조던피더슨
- 이기적 유전자
- 아인슈타인
- 비율
- R 기초
- 큰수의 법칙
- 선형성
- 티모시페리스
- 통계 오류
- 성악설
- t검정
- 통계오류
- 산입 범위
- 최저시급 개정안
- 비행기 추락
- Today
- Total
public bigdata
R4DS (R FOR DATASCIENCE) 10장 dplyr로 하는 관계형 데이터 본문
R4DS (R FOR DATASCIENCE) 10장 dplyr로 하는 관계형 데이터
public bigdata 2020. 7. 13. 16:0510.1
데이터 분석 시에 테이블을 하나만 사용하는 경우는 거의 없고 이들을 적절하게 결합 해야 하는 상황이 발생한다. 관계는 두 개의 테이블 사이에서 정의된다. 이런 관계형 데이터에 동작하도록 설계된 세 가지 유형의 함수가 dplyr 패키지 안에 있다고 한다.
- 뮤테이팅 조인 : 다른 데이터프레임에 있는 관측값에서 값을 가져와 테이블의 새로운 변수로 추가
- 필터링 조인 : 다른 테이블의 관측값과 일치하는지에 다라 관측값을 걸러낸다.
- 집합 연산 : 관측값을 집합 원소로 취급한다.
dplyr 패키지는 SQL보다 쉽고 데이터 분석에 특화되었기 때문에 일반적인 데이터 분석 작업을 하기는 더 쉽지만, 일반적으로 필요하지 않은 작업을 수행하기에는 더 어렵다.
10.2 연습문제 - pass
10.3 키
테이블에 기본키가 없다면 mutate와 row_number를 이용하여 기본키를 추가할 수 있다.
> iris %>% mutate(key = row_number()) %>% head()
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
key
1 1
2 2
3 3
4 4
5 5
6 6
10.3.1 연습문제 - pass
10.4 뮤테이팅 조인
fligths 테이블에 carrier 컬럼을 이용해서 airlines테이블에 있는 name 컬럼을 가져오려고 한다. 아래처럼 할 수 있다.
flights %>%
select(-origin, -dest) %>%
mutate(name = airlines$name[match(flights$carrier, airlines$carrier)]) %>%
view()
그러나 여러 변수를 매치시켜야 하는 경우 일반화하기 어렵다. 그래서 뮤테이팅 조인이 필요한 것이다. 뮤테이팅 조인은 1개의 내부 조인(inner join)과 3개의 외부 조인(outer join)이 존재한다.
각 조인의 원리는 따로 정리하기에는 복잡하니 복습 시 책을 참고하자.
10.4.4 중복키
- 하나의 테이블에 왜래키, 하나의 테이블에 기본키가 있다면 일대다 관계를 가진다.
- 그런데 두 개의 테이블 어느 곳에도 기본키가 없다면 이런 상황은 일반적으로 오류인 상황이다. 둘 모두 key 값으로 사용하려는 컬럼이 중복이라면 가능한 모든 조합에 대해 테이블이 매칭된다.
10.4.5 키 열 정의하기
left_join등을 실행할 때 by = c("tailnum"="tailnum2")로 지정하면 해당 변수들끼리 매칭하여 조인한다. 여러개의 변수들이 조인에 필요한 경우 by = c("변수1"="변수2", ...계속...) ','(콤마)로 구분하여 추가로 지정하면 된다.
10.4.6 연습문제
중요한 문제들이 많지만 정리하는데 시간이 오래 걸리므로 다음에 해당 포스트를 복습할때 링크를 타고 들어가 코딩해보면서 복습하도록 하자. 문제, 정답
10.4.7 기타 구현
dplyr 패키지는 4가지 조인함수를 제공한다.
- inner_join
- left_join
- right_join
- full_join
dplyr의 조인은 빠르고 행 순서를 어지럽히지 않는다. SQL은 dplyr보다 폭넓은 조인 유형을 지원한다. 등식이 아닌 다른 제약 조건을 사용해서 테이블을 연결할 수도 있다고 한다.(non-equisjoin)
10.5 필터링 조인
필터링 조인은 뮤테이팅 조인과 같은 방식으로 관측값을 매칭하지만 변수가 아닌 관측값에 영향을 준다?
- semi_join(x, y) : y와 매칭되는 x의 모든 관측값을 보존한다.
- anti_join(x, y) : y와 매치되는 x의 모든 관측값을 삭제한다.
1) semi_join
semi_join은 필터링된 요약 테이블을 다시 원래 행과 매치시키는 데 유용하다.
원데이터에서 조건에 따라 테이블을 요약하고 필터링 했을 때, 해당 행들에 해당하는 원 데이터가 궁금할 할 때 사용한다.
필터링 조인을 사용하지 않는 경우(아래 코드), 그러나 단순히 dest 컬럼만 사용해 매칭하는 것이 아닌 경우에 복잡한 코드를 작성해야 한다.
### 조건에 따라 요약된 데이터 ###
> top_dest <- flights %>%
+ count(dest, sort = TRUE) %>%
+ head(10)
> top_dest
# A tibble: 10 x 2
dest n
<chr> <int>
1 ORD 17283
2 ATL 17215
3 LAX 16174
4 BOS 15508
### 요약된 데이터의 원 데이터를 찾는 방법 ###
> flights %>%
+ filter(dest %in% top_dest$dest)
# A tibble: 141,145 x 19
year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay
<int> <int> <int> <int> <int> <dbl> <int> <int> <dbl>
1 2013 1 1 542 540 2 923 850 33
2 2013 1 1 554 600 -6 812 837 -25
3 2013 1 1 554 558 -4 740 728 12
4 2013 1 1 555 600 -5 913 854 19
세미조인을 사용한 경우(아래 코드)
> flights %>%
+ semi_join(top_dest)
Joining, by = "dest"
# A tibble: 141,145 x 19
year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay
<int> <int> <int> <int> <int> <dbl> <int> <int> <dbl>
1 2013 1 1 542 540 2 923 850 33
2 2013 1 1 554 600 -6 812 837 -25
3 2013 1 1 554 558 -4 740 728 12
4 2013 1 1 555 600 -5 913 854 19
단. 세미조인, 안티 조인은 뮤테이팅 조인처럼 행을 복제하여 생성하지는 않는다. 원 데이터에서 매칭되는 경우만 보여주는 역할을 한다.
안티조인은 세미조인과 역할만 다를뿐 사용방법은 동일하다.
10.5.1 연습문제
10.6 - pass
10.7 집합연산
'R programming > R4DS (R for DataScience) ' 카테고리의 다른 글
R4DS (R FOR DATASCIENCE) 11장 stringr로 하는 문자열 (3) | 2020.07.19 |
---|---|
R4DS (R FOR DATASCIENCE) 9장 tidyr로 하는 타이디 데이터 (0) | 2020.07.12 |
R4DS (R FOR DATASCIENCE) 8장 readr로 하는 데이터 불러오기 (0) | 2019.12.25 |
R4DS (R FOR DATASCIENCE) 7장 tibble로 하는 티블 (0) | 2019.12.23 |
R4DS (R FOR DATASCIENCE) 6장 (0) | 2019.12.23 |