종합 함수 : summarise() & group_by() (예제 포함)

 

변수의 요약은 데이터에 대한 아이디어를 갖는데 중요하다. 단, 변수를 그룹별로 요약하면 데이터의 분포에 대한 더 나은 정보를 얻을 수 있다.

이 튜토리얼에서는 dplyr 라이브러리를 사용하여 그룹별로 데이터 세트를 요약하는 방법에 대해 알아보겠다

이 튜토리얼에서 다음에 대하여 학습한다.

 

이 튜토리얼을 위해 'batting' 데이터 세트를 이용할 것이다.

원 데이터 세트에는 102,816개의 관측치와 22개의 변수가 포함되어 있다. 이 데이터 세트의 20%와 다음의 변수들을 사용하겠다.

요약을 수행하기 전에 다음 단계를 수행하여 데이터를 준비하자.

 

데이터 세트를 불러올 때 좋은 방법은 데이터 세트의 구조를 알기 위해 glimpse() 함수를 사용하는 것이다.

결과 :

 

smmarise()

summarise() 함수의 표현법은 기초적이며, dplyr 라이브러리의 다른 함수들과 일관성이 있다.

인수 :

 

아래의 코드를 예로 살펴 보자.

코드 설명 :

결과 :

얼마든지 원하는 만큼의 변수를 추가할 수 있다. 당신은 평균 출전 게임 수(G)와 평균 희생 히트 수(SH)를 반환한다.

 

예제 :

코드 설명 :

결과 :

 

group_by() 함수 사용

group_by()를 사용하지 않는 summerise()는 큰 의미가 갖지 않는다. 그룹별로 요약 통계를 작성한다. dplyr 라이브러리는group_by() 내에 전달된 그룹에 자동적으로 함수를 적용한다.

주의 : group_by는 다른 모든 함수(즉, mutate(), filter(), arrange() 등)와 완벽하게 작동한다.

계산의 단계가 여러 단계일 때는 파이프라인(%>%) 연산자를 사용하는 것이 편리하다. 리그별(lgID)로 홈런 수(HR)의 평균을 계산할 수 있다.

코드 설명 :

결과 :

 

파이프 연산자(%>%)는 ggplot()에도 함께 작동한다. 그래프로 요약 통계를 쉽게 표시할 수 있다. 그래프가 플롯될 때까지 모든 단계가 파이프라인 안으로 입력된다. 막대 그래프로 리그별 평균 홈런을 보는 것이 더 시각적이다. 아래의 코드는 group_by(), summary()ggplot()을 함께 결합한 사용을 보여준다.

다음 단계를 수행한다.

결과 :

1570156710542

 

summarise() 내의 함수 사용

summary() 함수는 R의 거의 모든 함수와 호환된다. summary() 함수와 함께 사용할 수 있는 유용한 함수의 간단히 나열해 본다 :

목적함수설명
Basicmean()벡터 x의 평균
 median()벡터 x의 중앙값
 sum()벡터 x의 합계
variationsd()벡터 x의 표준편차
 IQR()벡터 x의 IQR(Interquartile, 사분범위)
Rangemin()벡터 x의 최소값
 max()벡터 x의 최대값
 quantile()벡터 x의 사분위수
Positionfirst()group_by() 함수를 사용하여 그룹의 첫번째 항목 표시
 last()group_by() 함수를 사용하여 그룹의 마지막 항목 표시
 nth()group_by() 함수를 사용하여 그룹의 n 번째 항목 표시
Countn()group_by() 함수를 사용하여 그룹별 행의 갯수 카운트
 n_distinct()group_by() 함수를 사용하여 그룹별 유일한 관측치의 갯수 카운트

위의 표에 있는 모든 함수들의 사용 예를 살펴보기로 한다.

 

기본 함수

이전 예에서는 요약 통계를 데이터 프레임에 저장하지 않았다.

다음 두 단계로 요약 정보를 데이터 프레임으로 작성할 수 있다.

단계 1) 년도별 출전 경기 수(G)의 평균을 계산한다.

코드 설명 :

결과 :

단계 2) 요약 통계치를 라인 플롯으로 표시하고 추세를 분석한다.

결과 :

1570156749273

 

부분 집합

summarise() 함수는 부분 집합에도 적용할 수 있다.

코드 설명 :

결과 :

 

변수를 집계하는 또 다른 유용한 함수는 sum() 함수이다.

어느 리그(lgID)에서 더 많은 홈런(HR)을 쳤는지 확인할 수 있다.

 

결과 :

 

표준 편차

데이터에 흩어짐 정도(spread)는 표준 편차(standard deviation) 또는 R의 sd()로 계산한다.

결과 :

각 팀의 홈런 수에는 많은 차이가 존재한다.

 

최소값과 최대값

min()max() 함수를 사용하여 벡터의 최소값과 최대값을 계산할 수 있다.

아래의 코드는 시즌 동안 선수가 출전하는 최소 경기 수와 최대 경기 수를 반환한다.

Output:

 

카운트

그룹별 관측치를 세는 것은 항상 좋은 생각이다. R을 사용하면 발생 횟수를 n() 으로 집계할 수 있다.

예를 들어, 아래의 코드는 각 선수(playerID)가 출전한 년도 수(number_year)를 계산한다.

결과 :

 

first()와 last() *

그룹의 첫 번째, 마지막 또는 n번째 위치를 선택할 수 있다.

예를 들어, 각 선수(playerID)의 첫번째 데이터 항목( yearID)와 마지막 항목( yearID)를 찾을 수 있다.

결과 :

주의 : 단지 입력된 데이터 순서에 의거하여 각 선수별(playerID)로 첫번째 데이터 항목(first(yearID))과 마지막 데이터 항목(last(yearID))을 출력해 준다.

각 선수별(playerID)로 첫 출전 경기 연도(min(yearID))와 마지막 출전 경기 연도(max(yearID))를 출력하고자 한다면 다음과 같이 한다.

결과 :

 

n번째 관측치

nth() 함수는 first()와 last()를 보완한다. 반환할 인덱스를 가진 그룹 내의 n번째 관측치에 접근할 수 있다.

예를 들어, 당신은 한 팀이 출전한 2번째 년도만 필터링할 수 있다.

Output:

 

유일한 관측치의 갯수

n() 함수는 현재 그룹의 관측치 수를 반환한다. n()에 유사한 함수는 n_distinct()이며, 유일값의 수를 계산한다.

예제 : 다음 예에서는 팀별로 선발한 선수들의 총수를 구한다.

코드 설명 :

결과 :

 

예제 2: 다음 예에서는 팀별로 년도 별 선발 선수들의 총수를 구한다.

코드 설명 :

결과 :

 

복수 그룹

복수 그룹에 대하여 요약 정보를 산출한다.

예제 1 : 다음 예에서는 팀별로 년도 별 선발 선수들의 총수를 구한다.

코드 설명 :

결과 :

 

예제 2 :

코드 설명 :

결과 :

 

filter()

작업을 수행하기 전에 데이터 세트를 필터링할 수 있다. 데이터 세트는 1871년에 시작되는데, 1980년 이전의 연도에 대해서는 분석을 필요로 하지 않는다.

코드 설명 :

결과 :

 

ungroup()

마지막으로 계산 수준을 변경하기 전에 그룹화를 해제해야 한다.

코드 설명 :

결과 :

 

요약

그룹별로 요약을 반환하려면 다음을 사용할 수 있다 :

데이터의 그룹 해제는 다음과 같다.

아래 표에는 summary() 함수에 대하여 요약하고 있다.

메소드함수코드
평균 (mean)meansummarise(df, mean_x1 = mean(x1))
중앙값 (median)mediansummarise(df, median_x1 = median(x1))
합 (sum)sumsummarise(df, sum_x1 = sum(x1))
표준 편차 (standard deviation)sdsummarise(df, sd_x1 = sd(x1))
사분 범위 (interquartile)IQRsummarise(df, interquartile_x1 = IQR(x1))
최소값 (minimum)minsummarise(df, minimum_x1 = min(x1))
최대값 (maximum)maxsummarise(df, maximum_x1 = max(x1))
사분위수 (quantile)quantilesummarise(df, quantile_x1 = quantile(x1))
첫번째 관측치 (first observation)firstsummarise(df, first_x1 = first(x1))
마지막 관측치 (last observation)lastsummarise(df, last_x1 = last(x1))
n 번째 관측치 (nth observation)nthsummarise(df, nth_x1 = nth(x1, 2))
발생 횟수 (number of occurrence)nsummarise(df, n_x1 = n(x1))
유일값 발생 횟수 (number of distinct occurrence)n_distinctsummarise(df, n_distinct _x1 = n_distinct(x1))