본문 바로가기
Data Science

통계값 시각화 방법

by Jacey312 2023. 12. 30.

평균값 시각화 - stat 인수

R언어를 활용한 시각화에서 주로 사용되는 ggplot2 패키지에 대해서 살펴보고 있습니다. 이번 포스팅에서는 앞서 살펴본 geom_histogram, geom_bar, geom_point 등 여러 함수에 대해 평균값을 같이 시각화하는 방법에 대해 살펴보겠습니다. 

데이터를 그대로 보여주지 않고 데이터들의 평균값을 시각화하는 인수가 있습니다. 바로 stat 인수입니다. 

 

geom_bar 함수를 예시로 살펴보겠습니다. 아래 코드는 ggplot2 패키지에 포함된 다이아몬드 데이터셋에서 다이아몬드의 color와 price 변수를 입력해서 각 다이아몬드 색상별 평균 가격을 시각화합니다. 이때, geom_bar 함수에 stat 인수에 'summary_bin'을 입력하고 fun 인수에 'mean' 인수를 입력하면 각 color별 price 데이터의 평균값을 계산하여 시각화해줍니다. stat 인수에 입력하는 'summary_bin'은 geom_bar()에서 사용되는 특수한 통계 계산 방법 중 하나로, 데이터를 특정한 구간(bin)으로 나누어 각 구간에 대한 통계를 계산하는 방법을 나타냅니다.

 

ggplot(diamons, aes(color, price))+geom_bar(stat='summary_bin', fun='mean')

다이아몬드 색상별 평균 가격

 

stat fun은 각각 통계 계산 방법과 해당 통계를 계산하기 위한 함수를 지정하는 데 사용되며, 상기 코드에서 살펴본 함수 외에도 여러 함수를 적용할 수 있습니다. 

stat 인수 fun 인수
  • 'count': 각 그룹의 데이터 개수 계산
  • 'bin': 히스토그램의 막대(bin)의 개수 계산
  • 'sum': 각 그룹의 데이터 합계 계산
  • 'mean': 각 그룹의 데이터 평균 계산
  • 'median': 각 그룹의 데이터 중앙값 계산
  • 'mean': 평균 계산 함수
  • 'median': 중앙값 계산 함수
  • 'sum': 합계 계산 함수

 

 

평균값 point 표시 방법 - stat_summary()

이번에는 geom_point() 함수에 적용하는 방법을 살펴보겠습니다. 다이아몬드 데이터셋 대신에 mpg 데이터셋을 활용하겠습니다. mpg 데이터셋 또한 ggplot2 패키지에 포함되어 있으니 다운 받으시면 되겠습니다.

 

mpg 데이터셋에 포함된 trans(변속기 유형) 변수와 cyl(실린더 수) 변수를 이용하여 분포도를 생성합니다. 이때, 각 변속기별 실린더 수의 평균값을 분포도에 표시하려면 어떻게 해야 할까요? geom_bar() 사례에서처럼 geom_bar() 함수 내에 'stat', 'fun' 인수를 이용하면 각 변속기마다 하나의 점만 찍히기 때문에 분포도의 의미가 사라져버립니다.

 

그렇다면 기존 분포도 위에 추가로 평균값을 나타내는 점을 찍어주려면 어떻게 해야 할까요? 바로, stat_summary() 함수를 추가하여 평균값을 추가 생성하면 됩니다. stat_summary() 함수는 통계 요약을 시각화하기 위해 개발된 함수로, 주로 기존의 시각화된 그래프 위에 평균값, 중앙값, 합계를 추가로 표시할 때 사용됩니다. 

 

아래 코드에서는 추가로 표시되는 평균값 점과 geom_point() 함수가 그리는 점이 서로 구분이 쉽도록 stat_summary() 함수의 color는 빨간색, size는 4로 크게 조정하였습니다.

ggplot(mpg, aes(trans, cty))+geom_point()+ stat_summary(geom='point', fun='mean', 
                                                        color='red', size=4)

변속기 유형별 실린더 수 분포 및 평균값 표시(red point)

 

 

분포 밀도 그래프 - after_stat()

마지막으로 히스토그램과 프리폴리 함수를 사용할 때 통계값 산출에 적용하는 함수를 소개하겠습니다. 이번에는 위 geom_bar, geom_point 함수 예시와 달리, 계산한 값만을 그래프로 표현할 때 사용하는 after_stat() 함수입니다. 즉, after_stat() 함수는 통계 계산 이후에 해당 값을 그래프화할 유용한 함수입니다. 

 

보통 통계 계산은 stat_*() 함수에 의해 수행되며, after_stat() 함수는 이렇게 계산된 결과값을 가져와 그래프화하게 됩니다. 예를 들어, geom_histogram() 함수에서 density를 사용하여 히스토그램을 밀도로 나타내려고 할 때, aes(y = after_stat(density))와 같이 after_stat() 함수를 사용하여 통계 계산 이후의 밀도 값을 가져올 수 있습니다.

 

아래는 다이아몬드 데이터셋을 활용하여 price(가격)에 대한 히스토그램과 프리폴리(도수 다각형)를 그리는 코드입니다. 첫번째, 두번째 코드 모두 가격대를 500 단위로 잘라 density(밀도) 산출하도록 설정하였고, 이렇게 산출한 density 값을 히스토그램과 프리폴리로 그리도록 작성하였습니다.

다만 다른점은 프리폴리에서는 'color=cut' 인수를 추가해서 다이아몬드 절단 품질을 나타내는 cut 변수(범주형)마다 프리폴리를 그리도록 하였습니다.

 

# 히스토그램으로 표시
ggplot(diamons, aes(price))+ geom_histogram(aes(y=after_stat(density)), binwidth=500)
# 프리폴리로 표시
ggplot(diamons, aes(price, colour=cut))+ geom_freqpoly(aes(y=after_stat(density)), binwidth=500)

 

다이아몬드의 가격대  분포 밀도
다이아몬드 색상별 가격대 분포 밀도