Dplyr 튜토리얼: 예제를 사용하여 R에서 데이터 병합 및 조인

데이터 분석 소개

데이터 분석은 세 부분으로 나눌 수 있습니다.

  • 추출: 첫째, 다양한 소스로부터 데이터를 수집하고 결합해야 합니다.
  • 변환: 이 단계에는 데이터 조작이 포함됩니다. 모든 데이터 소스를 통합한 후에는 데이터 정리를 시작할 수 있습니다.
  • 눈에 보이게하다: 마지막 움직임은 데이터를 시각화하여 불규칙성을 확인하는 것입니다.
데이터 분석 과정
데이터 분석 과정

데이터 과학자가 직면한 가장 중요한 과제 중 하나는 데이터 조작입니다. 데이터는 원하는 형식으로 제공되지 않습니다. 데이터 과학자는 업무 시간의 절반 이상을 데이터를 정리하고 조작하는 데 소비해야 합니다. 이는 해당 업무에서 가장 중요한 임무 중 하나입니다. 데이터 조작 프로세스가 완전하고 정확하며 엄격하지 않으면 모델이 올바르게 작동하지 않습니다.

R Dplyr

R에는 데이터 변환을 돕기 위해 dplyr이라는 라이브러리가 있습니다. dplyr 라이브러리는 기본적으로 데이터를 조작하는 XNUMX가지 함수와 데이터를 정리하는 XNUMX가지 동사를 중심으로 만들어졌습니다. 그런 다음 ggplot 라이브러리를 사용하여 데이터를 분석하고 시각화할 수 있습니다.

우리는 dplyr 라이브러리를 사용하여 데이터 프레임.

R Dplyr를 사용하여 데이터 병합

dplyr은 데이터 세트를 결합하는 훌륭하고 편리한 방법을 제공합니다. 입력 데이터의 소스가 많을 수 있으며 어느 시점에서는 이를 결합해야 합니다. dplyr을 사용한 조인은 원본 데이터 세트의 오른쪽에 변수를 추가합니다.

Dplyr 조인

dplyr에서 두 데이터 세트를 병합하는 데 사용되는 네 가지 중요한 조인 유형은 다음과 같습니다.

함수 목표 인수 여러 키
왼쪽_결합() 두 개의 데이터 세트를 병합합니다. 원본 테이블의 모든 관측값을 유지합니다. 데이터, 출발지, 목적지, 기준 = “ID” 출발지, 목적지, 기준 = c(“ID”, “ID2”)
오른쪽_결합() 두 개의 데이터 세트를 병합합니다. 대상 테이블의 모든 관측치를 유지합니다. 데이터, 출발지, 목적지, 기준 = “ID” 출발지, 목적지, 기준 = c(“ID”, “ID2”)
내부_조인() 두 개의 데이터 세트를 병합합니다. 일치하지 않는 모든 행을 제외합니다. 데이터, 출발지, 목적지, 기준 = “ID” 출발지, 목적지, 기준 = c(“ID”, “ID2”)
전체_결합() 두 개의 데이터 세트를 병합합니다. 모든 관찰 내용을 유지합니다. 데이터, 출발지, 목적지, 기준 = “ID” 출발지, 목적지, 기준 = c(“ID”, “ID2”)

쉬운 예를 통해 모든 조인 유형을 학습하겠습니다.

먼저 두 개의 데이터 세트를 구축합니다. 표 1에는 ID와 y라는 두 개의 변수가 포함되어 있는 반면, 표 2에는 ID와 z가 포함되어 있습니다. 각 상황마다 우리는 다음과 같은 조치를 취해야 합니다. 키 쌍 변하기 쉬운. 우리의 경우에는 ID가 우리의 것입니다. 변하기 쉬운. 이 함수는 두 테이블 모두에서 동일한 값을 찾고 반환 값을 테이블 1의 오른쪽에 바인딩합니다.

R Dplyr를 사용하여 데이터 병합

library(dplyr)
df_primary <- tribble(
  ~ID, ~y,
   "A", 5,
   "B", 5,
   "C", 8,
   "D", 0,
  "F", 9)
df_secondary <- tribble(
  ~ID, ~z,
   "A", 30,
   "B", 21,
   "C", 22,
   "D", 25,
   "E", 29)

Dplyr left_join()

두 데이터세트를 병합하는 가장 일반적인 방법은 left_join() 함수를 사용하는 것입니다. 아래 그림에서 키 쌍이 두 데이터세트의 A, B, C, D 행과 완벽하게 일치하는 것을 볼 수 있습니다. 그러나 E와 F는 남습니다. 이 두 가지 관찰을 어떻게 처리합니까? left_join()을 사용하면 원본 테이블의 모든 변수를 유지하고 대상 테이블에 키 쌍이 없는 변수는 고려하지 않습니다. 이 예에서는 변수 E가 테이블 1에 존재하지 않습니다. 따라서 행이 삭제됩니다. 변수 F는 원본 테이블에서 가져옵니다. left_join() 이후에 유지되며 z 열에 NA를 반환합니다. 아래 그림은 left_join()에서 발생하는 상황을 재현합니다.

dplyr left_join()의 예

dplyr left_join()의 예

left_join(df_primary, df_secondary, by ='ID')

출력:

## 
# A tibble: 5 x 3
##      ID   y.x   y.y
##   <chr> <dbl> <dbl>		
## 1     A     5    30
## 2     B     5    21
## 3     C     8    22
## 4     D     0    25
## 5     F     9    NA

Dplyr right_join()

right_join() 함수는 left_join()과 정확히 동일하게 작동합니다. 유일한 차이점은 행이 삭제되었다는 것입니다. 대상 데이터 프레임에서 사용 가능한 E 값은 새 테이블에 존재하며 y 열에 NA 값을 사용합니다.

dplyr right_join()의 예

dplyr right_join()의 예

right_join(df_primary, df_secondary, by = 'ID')

출력:

##
# A tibble: 5 x 3
##      ID   y.x   y.y
##   <chr> <dbl> <dbl>
## 1     A     5    30
## 2     B     5    21
## 3     C     8    22
## 4     D     0    25
## 5     E    NA    29

Dplyr inner_join()

두 데이터 세트가 일치하지 않을 것이라고 100% 확신하면 반환을 고려할 수 있습니다. 에 존재하는 행 데이터세트. 이는 깨끗한 데이터세트가 필요하거나 누락된 값을 평균이나 중앙값으로 대치하고 싶지 않을 때 가능합니다.

inner_join()이 도움이 됩니다. 이 함수는 일치하지 않는 행을 제외합니다.

dplyr inner_join()의 예

dplyr inner_join()의 예

inner_join(df_primary, df_secondary, by ='ID')

출력:

## 
# A tibble: 4 x 3
##      ID   y.x   y.y
##   <chr> <dbl> <dbl>
## 1     A     5    30
## 2     B     5    21
## 3     C     8    22
## 4     D     0    25

Dplyr full_join()

마지막으로, full_join() 함수는 모든 관찰을 유지하고 누락된 값을 NA로 바꿉니다.

dplyr full_join()의 예

dplyr full_join()의 예

full_join(df_primary, df_secondary, by = 'ID')

출력:

## # A tibble: 6 x 3
##      ID   y.x   y.y
##   <chr> <dbl> <dbl>
## 1     A     5    30
## 2     B     5    21
## 3     C     8    22
## 4     D     0    25
## 5     F     9    NA
## 6     E    NA    29

다중 키 쌍

마지막으로, 데이터 세트에 여러 개의 키를 가질 수 있습니다. 고객이 구매한 연도 또는 제품 목록이 있는 다음 데이터 세트를 고려해 보세요.

R의 다중 키 쌍

두 테이블을 병합하려고 하면 R에서 오류가 발생합니다. 이 상황을 해결하려면 두 개의 키 쌍 변수를 전달할 수 있습니다. 즉, 두 데이터 세트에 모두 나타나는 ID와 year입니다. 다음 코드를 사용하여 table1과 table 2를 병합할 수 있습니다.

df_primary <- tribble(
  ~ID, ~year, ~items,
  "A", 2015,3,
  "A", 2016,7,
  "A", 2017,6,
  "B", 2015,4,
  "B", 2016,8,
  "B", 2017,7,
  "C", 2015,4,
  "C", 2016,6,
  "C", 2017,6)
df_secondary <- tribble(
  ~ID, ~year, ~prices,
  "A", 2015,9,
  "A", 2016,8,
  "A", 2017,12,
  "B", 2015,13,
  "B", 2016,14,
  "B", 2017,6,
  "C", 2015,15,
  "C", 2016,15,
  "C", 2017,13)
left_join(df_primary, df_secondary, by = c('ID', 'year'))

출력:

## # A tibble: 9 x 4
##      ID  year items prices
##   <chr> <dbl> <dbl>  <dbl>
## 1     A  2015     3      9
## 2     A  2016     7      8
## 3     A  2017     6     12
## 4     B  2015     4     13
## 5     B  2016     8     14
## 6     B  2017     7      6
## 7     C  2015     4     15
## 8     C  2016     6     15
## 9     C  2017     6     13

R의 데이터 정리 기능

데이터를 정리(정리)하는 데 중요한 네 가지 기능은 다음과 같습니다.

함수 목표 인수
모으다() 데이터를 넓은 것에서 긴 것으로 변환 (데이터, 키, 값, na.rm = FALSE)
확산() 데이터를 긴 데이터에서 넓은 데이터로 변환 (데이터, 키, 값)
분리된() 하나의 변수를 두 개로 나누기 (data, col, into, sep= “”, 제거 = TRUE)
단위() 두 개의 변수를 하나로 단위화 (데이터, 열, 농도, XNUMX월= “”, 제거 = TRUE)

우리는 tidyr 라이브러리를 사용합니다. 이 라이브러리는 데이터를 조작, 정리, 시각화하는 라이브러리 모음에 속합니다. 아나콘다와 함께 R을 설치하면 라이브러리가 이미 설치되어 있습니다. 여기서 도서관을 찾을 수 있어요. https://anaconda.org/r/r-tidyr.

아직 설치하지 않았다면 다음 명령을 입력하여 tidyr을 설치하세요.

install tidyr : install.packages("tidyr")

모으다()

Gather() 함수의 목적은 데이터를 넓은 데이터에서 긴 데이터로 변환하는 것입니다.

통사론

gather(data, key, value, na.rm = FALSE)
Arguments:
-data: The data frame used to reshape the dataset 
-key: Name of the new column created
-value: Select the columns used to fill the key column
-na.rm: Remove missing values. FALSE by default

예시

아래에서는 넓은 형태를 긴 형태로 재구성하는 개념을 시각화할 수 있습니다. 분기 변수 행으로 채워진 성장이라는 단일 열을 생성하려고 합니다.

R의 Gather() 함수 예

library(tidyr)
# Create a messy dataset
messy <- data.frame(
  country = c("A", "B", "C"),
  q1_2017 = c(0.03, 0.05, 0.01),
  q2_2017 = c(0.05, 0.07, 0.02),
  q3_2017 = c(0.04, 0.05, 0.01),
  q4_2017 = c(0.03, 0.02, 0.04))
messy

출력:

##   country q1_2017 q2_2017 q3_2017 q4_2017
## 1       A    0.03    0.05    0.04    0.03
## 2       B    0.05    0.07    0.05    0.02
## 3       C    0.01    0.02    0.01    0.04
# Reshape the data
tidier <-messy %>%
gather(quarter, growth, q1_2017:q4_2017)
tidier

출력:

##    country quarter growth
## 1        A q1_2017   0.03
## 2        B q1_2017   0.05
## 3        C q1_2017   0.01
## 4        A q2_2017   0.05
## 5        B q2_2017   0.07
## 6        C q2_2017   0.02
## 7        A q3_2017   0.04
## 8        B q3_2017   0.05
## 9        C q3_2017   0.01
## 10       A q4_2017   0.03
## 11       B q4_2017   0.02
## 12       C q4_2017   0.04

원래 데이터 세트에는 국가와 키-값 쌍이라는 하나의 그룹 변수가 있으므로 Gather() 함수에서 두 개의 새로운 변수인 Quarter와 Growth를 생성합니다.

확산()

Spread() 함수는 수집과 반대되는 기능을 수행합니다.

통사론

spread(data, key, value)
arguments: 
data: The data frame used to reshape the dataset
key: Column to reshape long to wide
value: Rows used to fill the new column

예시

Spread()를 사용하면 깔끔한 데이터세트를 다시 지저분하게 만들 수 있습니다.

# Reshape the data
messy_1 <- tidier %>%
  spread(quarter, growth) 
messy_1

출력:

##   country q1_2017 q2_2017 q3_2017 q4_2017
## 1       A    0.03    0.05    0.04    0.03
## 2       B    0.05    0.07    0.05    0.02
## 3       C    0.01    0.02    0.01    0.04

분리된()

Separate() 함수는 구분 기호에 따라 열을 두 개로 분할합니다. 이 함수는 변수가 날짜인 일부 상황에서 유용합니다. 우리의 분석에서는 월과 연도에 초점을 맞춰야 할 수 있으며 열을 두 개의 새로운 변수로 분리하려고 합니다.

통사론

separate(data, col, into, sep= "", remove = TRUE)
arguments:
-data: The data frame used to reshape the dataset 
-col: The column to split
-into: The name of the new variables
-sep: Indicates the symbol used that separates the variable, i.e.:  "-", "_", "&"
-remove: Remove the old column. By default sets to TRUE.

예시

Separate() 함수를 적용하여 더 깔끔한 데이터세트의 연도에서 분기를 분할할 수 있습니다.

separate_tidier <-tidier %>%
separate(quarter, c("Qrt", "year"), sep ="_")
head(separate_tidier)

출력:

##   country Qrt year growth
## 1       A  q1 2017   0.03
## 2       B  q1 2017   0.05
## 3       C  q1 2017   0.01
## 4       A  q2 2017   0.05
## 5       B  q2 2017   0.07
## 6       C  q2 2017   0.02

맞잡다()

unite() 함수는 두 개의 열을 하나로 결합합니다.

통사론

unit(data, col, conc ,sep= "", remove = TRUE)
arguments:
-data: The data frame used to reshape the dataset 
-col: Name of the new column
-conc: Name of the columns to concatenate
-sep: Indicates the symbol used that unites the variable, i.e:  "-", "_", "&"
-remove: Remove the old columns. By default, sets to TRUE

예시

위의 예에서 우리는 분기와 연도를 분리했습니다. 만약 우리가 그것들을 합치고 싶다면 어떨까요? 우리는 다음 코드를 사용합니다:

unit_tidier <- separate_tidier %>%
  unite(Quarter, Qrt, year, sep ="_")
head(unit_tidier)

출력:

##   country Quarter growth
## 1       A q1_2017   0.03
## 2       B q1_2017   0.05
## 3       C q1_2017   0.01
## 4       A q2_2017   0.05
## 5       B q2_2017   0.07
## 6       C q2_2017   0.02

제품 개요

  • 데이터 분석 추출, 변환, 시각화의 세 부분으로 나눌 수 있습니다.
  • R에는 데이터 변환을 돕기 위해 dplyr이라는 라이브러리가 있습니다. dplyr 라이브러리는 기본적으로 데이터를 조작하는 XNUMX가지 함수와 데이터를 정리하는 XNUMX가지 동사를 중심으로 만들어졌습니다.
  • dplyr은 데이터 세트를 결합하는 훌륭하고 편리한 방법을 제공합니다. dplyr을 사용한 조인은 원본 데이터세트의 오른쪽에 변수를 추가합니다.
  • dplyr의 장점은 다음과 유사한 네 가지 유형의 조인을 처리한다는 것입니다. SQL:
    • 왼쪽_결합() – 두 개의 데이터 세트를 병합하고 원본 테이블의 모든 관찰을 유지합니다.
    • 오른쪽_결합() – 두 개의 데이터 세트를 병합하고 대상 테이블의 모든 관측치를 유지합니다.
    • 내부_조인() – 두 개의 데이터 세트를 병합하고 일치하지 않는 모든 행을 제외합니다.
    • 전체_결합() – 두 개의 데이터 세트를 병합하고 모든 관찰 내용을 유지합니다.
  • tidyr 라이브러리를 사용하면 다음 함수를 사용하여 데이터 세트를 변환할 수 있습니다.
    • 모으다(): 데이터를 넓은 것에서 긴 것으로 변환합니다.
    • 확산(): 데이터를 긴 데이터에서 넓은 데이터로 변환합니다.
    • 분리된(): 하나의 변수를 두 개로 나눕니다.
    • 단위(): 두 개의 변수를 하나로 묶습니다.

이 게시물을 요약하면 다음과 같습니다.