R에서 기초 통계량 계산 (mean(), median(), sd(), var(), summary())

제공

안녕하세요! 데이터 분석의 기초 중의 기초, 바로 기초 통계량에 대해 함께 알아보는 시간을 가져보려고 해요. R을 이용해서 어떻게 이런 기초 통계량을 쉽고 빠르게 계산할 수 있는지 궁금하시죠? 평균, 중앙값, 표준편차, 분산… 듣기만 해도 머리가 지끈거리시는 분들도 계실 거예요. 하지만 걱정 마세요! R의 강력한 내장 함수들을 사용하면 누구든 쉽게 데이터를 요약하고 분석할 수 있답니다. mean(), median(), sd(), var(), 그리고 summary() 함수들을 활용해서 마치 마법처럼 데이터를 다루는 방법을 알려드릴게요. 함께 흥미진진한 통계의 세계로 떠나볼까요?

 

 

평균 계산하기: mean() 함수

R에서 데이터 분석의 첫걸음은 바로 평균값을 구하는 것이죠! 평균은 데이터의 중심 경향성을 나타내는 가장 기본적인 척도예요. 데이터가 어떤 값을 중심으로 분포되어 있는지 궁금할 때, 짠! 하고 나타나는 마법의 숫자라고 할 수 있겠네요~? R에서는 mean() 함수를 사용해서 아주 간편하게 평균을 계산할 수 있어요. 어떻게 사용하는지 한번 자세히 알아볼까요?

mean() 함수의 기본적인 사용법

가장 기본적인 형태는 mean(x)예요. 여기서 x는 숫자 벡터를 의미해요. 예를 들어, 1부터 5까지의 숫자가 담긴 벡터의 평균을 구하고 싶다면 mean(1:5)라고 입력하면 3이라는 결과가 뿅! 하고 나온답니다. 참 쉽죠?

결측값 처리하기

하지만 실제 데이터 분석에서는 결측값(NA, Not Available)이 포함된 경우가 허다해요. 😫 이런 결측값들을 처리하지 않고 mean() 함수를 사용하면 결과값도 NA로 나와버려서 곤란한 상황에 처하게 된답니다. 이럴 때는 na.rm 인수를 사용해서 NA 값을 제거하고 평균을 계산할 수 있어요. mean(x, na.rm = TRUE)처럼 말이죠! na.rm = TRUE는 “NA 값들을 제거해줘~”라는 의미예요. 만약 결측값을 제거하지 않고 계산하고 싶다면 na.rm = FALSE로 설정하면 되지만, 보통은 결측값을 제거하고 계산하는 경우가 훨씬 많답니다.

무한대 값 처리하기

자, 이제 조금 더 복잡한 상황을 생각해 볼까요? 가끔씩 데이터에 무한대 값(Inf)이 포함되는 경우도 있어요. 이런 값들은 평균 계산을 엉망으로 만들 수 있죠!😱 다행히도 mean() 함수는 이런 무한대 값도 잘 처리할 수 있도록 설계되어 있어요. mean(x, na.rm = TRUE)처럼 NA 값을 제거하는 옵션을 사용하면, 무한대 값도 함께 제거되어 정확한 평균값을 얻을 수 있답니다.

이상치와 절삭 평균

평균은 데이터의 중심 경향성을 파악하는 데 유용하지만, 이상치(outlier)에 민감하다는 단점이 있어요. 극단적으로 크거나 작은 값이 하나라도 존재하면 평균값이 크게 왜곡될 수 있죠. 예를 들어, 1, 2, 3, 4, 100이라는 데이터가 있다고 생각해 보세요. 평균은 22지만, 100이라는 이상치 때문에 데이터의 대표값으로는 적절하지 않아 보이죠? 이럴 때는 중앙값이나 절삭 평균(trimmed mean)을 사용하는 것이 더 적절할 수 있어요. 절삭 평균은 데이터의 양 끝에서 일정 비율의 데이터를 제거하고 계산하는 평균값이에요. R에서는 mean(x, trim = 0.1)처럼 trim 인수를 사용하여 절삭 평균을 계산할 수 있어요. trim = 0.1은 데이터의 양 끝에서 10%씩 제거한다는 의미예요. 이렇게 하면 이상치의 영향을 줄이고 더욱 안정적인 평균값을 얻을 수 있답니다!

mean() 함수의 활용

mean() 함수는 단순하지만 강력한 도구예요. 데이터 분석의 기본 중의 기본이라고 할 수 있죠! 다양한 옵션을 활용해서 데이터의 특성에 맞게 평균을 계산해보세요. na.rm 옵션으로 결측값을 제거하고, trim 옵션으로 이상치의 영향을 줄여보세요. mean() 함수 하나만 잘 알아도 데이터 분석의 반은 성공했다고 볼 수 있어요! 😉

다양한 통계량 함께 살펴보기

하지만 평균값만으로는 데이터의 전체적인 모습을 파악하기 어려워요. 평균값과 함께 분산, 표준편차, 최솟값, 최댓값 등 다양한 통계량을 함께 살펴보는 것이 중요해요. 다음에는 median(), sd(), var(), summary() 함수들을 사용해서 데이터의 다양한 측면을 분석하는 방법을 알아보도록 할게요! 기대해주세요~! 😊

 

중앙값 계산하기: median() 함수

평균값에 이어서 이번에는 데이터의 중심을 나타내는 또 다른 지표, 바로 중앙값(median)에 대해 알아볼까요? 평균값은 데이터 전체의 합을 데이터 개수로 나눈 값이라면, 중앙값은 데이터를 크기 순서대로 나열했을 때 한가운데 위치하는 값이에요. ‘아하! 그럼 딱 중간에 있는 숫자를 찾으면 되겠네~’라고 생각하셨죠? 맞아요! ^^ 데이터 개수가 홀수면 정말 딱 중간에 있는 값이 중앙값이 되고요. 짝수라면? 중간에 있는 두 값의 평균을 계산하면 됩니다! 어렵지 않죠?

R에서는 median() 함수를 사용해서 중앙값을 아주 간편하게 계산할 수 있어요. 데이터가 아무리 많더라도, 걱정 마세요! median() 함수가 휘리릭~ 계산해 줄 거예요. 자, 그럼 몇 가지 예시를 통해 median() 함수를 어떻게 사용하는지, 또 어떤 상황에서 유용한지 자세히 살펴보도록 할게요.

1. 홀수 개 데이터의 중앙값

먼저 홀수 개의 데이터를 가진 벡터를 생각해 볼게요. data1 <- c(1, 3, 5, 7, 9) 라는 벡터가 있다고 가정해 봅시다. 이 벡터의 중앙값은 얼마일까요? 눈으로 봐도 5라는 것을 알 수 있죠? median(data1)을 실행하면 5라는 결과를 얻을 수 있어요. R이 정확하게 중앙값을 계산해 주네요!

2. 짝수 개 데이터의 중앙값

이번에는 짝수 개의 데이터를 가진 벡터 data2 <- c(2, 4, 6, 8)를 생각해 볼게요. 이 경우 중앙값은 4와 6의 평균인 (4+6)/2 = 5가 됩니다. median(data2)를 실행해 보면? 역시 5라는 결과가 나옵니다!

3. 결측값(NA)이 포함된 경우

실제 데이터 분석에서는 결측값(NA)을 만나는 경우가 흔하죠? data3 <- c(1, NA, 3, 5, 7)와 같이 결측값이 포함된 벡터의 중앙값을 계산하려면 어떻게 해야 할까요? median(data3)를 실행하면 NA라는 결과가 나와요. 으잉? 왜 그럴까요? 결측값은 말 그대로 '값이 없다'는 의미이기 때문에, 중앙값을 계산하는 데 사용할 수 없기 때문이에요. 이럴 때는 na.rm = TRUE 옵션을 추가해서 결측값을 제외하고 중앙값을 계산할 수 있어요. median(data3, na.rm = TRUE)를 실행하면 결측값을 제외한 1, 3, 5, 7의 중앙값인 4가 계산됩니다!

4. 다양한 데이터 타입

median() 함수는 숫자형 데이터뿐만 아니라 정수형 데이터에도 적용할 수 있어요. data4 <- c(1L, 3L, 5L, 7L, 9L)와 같은 정수형 벡터에도 median(data4)를 사용하면 5L라는 정수형 중앙값을 얻을 수 있답니다.

5. 극단값에 대한 영향

평균값은 극단값에 민감하게 반응하는 반면, 중앙값은 극단값의 영향을 덜 받는다는 장점이 있어요. 예를 들어, data5 <- c(1, 2, 3, 4, 100)과 같이 극단값 100이 포함된 데이터에서 평균값은 22로 데이터의 중심 경향을 제대로 반영하지 못하는 것을 볼 수 있어요. 하지만 중앙값은 3으로 극단값의 영향을 받지 않고 데이터의 중심을 잘 나타내 주죠! 이처럼 극단값이 존재하는 데이터에서는 중앙값이 평균값보다 더 적절한 대푯값이 될 수 있답니다.

자, 이제 median() 함수에 대해 좀 더 잘 이해가 되셨나요? 데이터의 중심을 파악하는 데 유용한 median() 함수, 꼭 기억해 두세요! 다음에는 데이터의 퍼짐 정도를 나타내는 표준편차와 분산에 대해 알아볼게요! 기대해 주세요~!!

 

표준편차와 분산: sd()와 var() 함수

데이터 분석에서 빼놓을 수 없는 친구들이 있죠? 바로 표준편차분산입니다! 이 둘은 데이터가 평균으로부터 얼마나 퍼져 있는지를 알려주는 아주 중요한 지표예요. R에서는 sd() 함수와 var() 함수를 이용해서 아주 간단하게 계산할 수 있답니다! 어떻게 사용하는지, 그리고 왜 중요한지 자세히 알아볼까요~?

표준편차

자, 먼저 표준편차부터 살펴보도록 해요. 표준편차는 데이터가 평균을 중심으로 얼마나 흩어져 있는지를 나타내는 값이에요. 표준편차가 크다는 것은 데이터가 평균에서 멀리 떨어져 있다는 것을 의미하고, 작다는 건 평균 주변에 옹기종기 모여있다는 뜻이죠! R에서는 sd() 함수 하나면 충분해요! 예를 들어, 1부터 10까지의 숫자가 담긴 벡터 x가 있다고 해볼게요. sd(x)라고 입력하면 바로 표준편차를 계산해준답니다. 참 쉽죠? ^^

sd() 함수 사용 시 주의할 점

sd() 함수를 사용할 때 주의할 점이 하나 있어요! 바로 NA(결측값) 처리인데요. 만약 데이터에 NA 값이 포함되어 있다면 sd() 함수는 NA를 반환해버린답니다. ㅠㅠ 이럴 때는 na.rm = TRUE 옵션을 추가해주면 NA 값을 제외하고 계산해준답니다. sd(x, na.rm = TRUE)처럼 말이죠! 작은 차이지만 결과는 확 달라진다는 사실! 꼭 기억해 두세요~?

분산

그럼 이제 분산에 대해 알아볼까요? 분산은 표준편차의 제곱이에요. 즉, 데이터가 평균으로부터 얼마나 떨어져 있는지를 제곱한 값이죠. 분산은 var() 함수를 사용해서 계산할 수 있어요. sd() 함수와 마찬가지로 na.rm = TRUE 옵션을 사용해서 NA 값을 제외할 수도 있답니다!

표준편차와 분산, 왜 둘 다 사용할까요?

표준편차와 분산, 둘 다 데이터의 퍼짐 정도를 나타내는 지표이지만, 왜 굳이 두 가지를 다 사용할까요? 표준편차는 원래 데이터와 같은 단위를 가지고 있어서 이해하기 쉽다는 장점이 있어요. 예를 들어 키의 표준편차는 cm 단위로 표현되겠죠? 반면 분산은 제곱 단위를 가지고 있어서 직관적으로 이해하기는 조금 어려울 수 있어요. 하지만! 분산은 수학적으로 다루기 편리하다는 장점이 있답니다. 특히 여러 변수 간의 관계를 분석할 때 분산이 아주 유용하게 쓰인답니다!

표준편차와 분산의 활용 예시

표준편차와 분산은 데이터 분석에서 정말 다양하게 활용돼요. 예를 들어, 두 집단의 키를 비교할 때, 평균 키만 비교하는 것보다 표준편차까지 함께 고려하면 더욱 정확한 비교가 가능해요. 평균 키는 같더라도 한 집단의 표준편차가 훨씬 크다면, 그 집단에는 키가 아주 큰 사람과 아주 작은 사람이 섞여 있다는 것을 알 수 있겠죠?! 또한, 주식 투자에서는 위험을 측정하는 지표로 표준편차가 자주 사용된답니다. 표준편차가 클수록 수익률의 변동성이 크다는 것을 의미하며, 이는 곧 투자 위험이 높다는 것을 뜻해요. 이처럼 표준편차와 분산은 다양한 분야에서 데이터의 특징을 파악하는 데 중요한 역할을 한답니다!

정규분포와 표준편차

더 나아가서, 정규분포를 따르는 데이터의 경우, 평균 ± 1 표준편차 범위 안에 전체 데이터의 약 68.27%가 포함되고, 평균 ± 2 표준편차 범위 안에는 약 95.45%, 평균 ± 3 표준편차 범위 안에는 무려 약 99.73%의 데이터가 포함된답니다. 놀랍지 않나요?! 이러한 특징 때문에 표준편차는 데이터의 분포를 이해하고 분석하는 데 매우 중요한 지표로 사용되는 거예요!

dplyr 패키지 활용

실제 데이터 분석에서는 다양한 패키지와 함수를 조합하여 표준편차와 분산을 활용할 수 있어요. 예를 들어, dplyr 패키지의 summarize() 함수와 함께 사용하면 그룹별로 표준편차와 분산을 쉽게 계산할 수 있답니다! 데이터 분석의 세계는 정말 무궁무진하죠?! sd() 함수와 var() 함수를 잘 활용해서 데이터 분석의 고수가 되어 보세요! 화이팅!!

sd()와 var() 함수 사용 예시

자, 이제 몇 가지 예시를 통해 sd() 함수와 var() 함수를 직접 사용해 보는 시간을 가져볼까요~?! 다음과 같은 벡터 data가 있다고 가정해 봅시다.

data <- c(1, 5, 2, 8, 3, 9, 4, 7, 5, 6, NA, NA)

이 벡터에는 1부터 9까지의 숫자와 NA 값이 포함되어 있어요. 이 데이터의 표준편차와 분산을 계산해 보겠습니다.

sd(data)  # NA 값이 포함되어 있으므로 NA를 반환합니다.
sd(data, na.rm = TRUE)  # NA 값을 제외하고 계산합니다.
var(data)  # NA 값이 포함되어 있으므로 NA를 반환합니다.
var(data, na.rm = TRUE)  # NA 값을 제외하고 계산합니다.

na.rm = TRUE 옵션을 사용하지 않으면 NA가 반환되는 것을 확인할 수 있죠? 실제 데이터 분석에서는 NA 값이 포함되는 경우가 많으므로, na.rm = TRUE 옵션을 꼭 기억해 두는 것이 좋겠죠?!

결론

이처럼 R의 sd() 함수와 var() 함수는 데이터의 퍼짐 정도를 파악하는 데 매우 유용한 도구입니다! 이 함수들을 잘 활용하면 데이터 분석 능력을 한층 더 업그레이드할 수 있을 거예요! 다음에는 더욱 흥미로운 R 함수 이야기로 돌아오겠습니다!

 

데이터 요약 정보: summary() 함수

휴~ 드디어 R 기초 통계량 계산의 마지막 관문, `summary()` 함수에 도착했네요! 지금까지 `mean()`, `median()`, `sd()`, `var()` 함수들을 살펴보면서 데이터의 중심 경향과 변동성을 엿볼 수 있었어요. 그런데 만약 이 모든 정보를 한눈에 깔끔하게 보고 싶다면 어떻게 해야 할까요? 바로 `summary()` 함수가 그 역할을 톡톡히 해낸답니다!

summary() 함수의 기능

`summary()` 함수는 마치 마법의 요술봉처럼 데이터의 전체적인 윤곽을 그려내는 데 탁월해요. 숫자형 데이터에서는 최솟값, 1사분위수, 중앙값, 3사분위수, 최댓값, 그리고 평균까지 한 번에 보여준답니다. 데이터의 분포를 파악하는 데 이보다 더 간편한 방법이 있을까요?

숫자형 데이터 예시

예를 들어, 1부터 100까지의 숫자를 가진 벡터 data <- 1:100가 있다고 생각해 봅시다. 이 벡터에 summary(data) 함수를 적용하면 다음과 같은 결과를 얻을 수 있어요.

> data <- 1:100
> summary(data)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.0    25.8    50.5    50.5    75.2   100.0 

짜잔~! 최솟값은 1, 1사분위수는 25.8, 중앙값은 50.5, 평균도 50.5, 3사분위수는 75.2, 최댓값은 100이라는 정보를 한 줄로 깔끔하게 얻었어요! 데이터의 전체적인 윤곽을 그리는 데 이만큼 효율적인 도구는 없을 거예요!

범주형 데이터 예시

더 나아가, `summary()` 함수는 범주형 데이터에도 적용할 수 있다는 사실! 만약 'red', 'blue', 'green'과 같은 문자열로 이루어진 벡터가 있다면, summary() 함수는 각 범주의 빈도를 깔끔하게 보여준답니다.

> colors <- c("red", "blue", "green", "red", "blue", "red")
> summary(colors)
     red  blue green 
       3     2     1 

'red'는 3번, 'blue'는 2번, 'green'은 1번 등장했다는 것을 바로 확인할 수 있어요! 데이터 분석에서 범주형 변수의 분포를 파악하는 것은 매우 중요한데, `summary()` 함수 하나면 걱정 끝!

데이터프레임 예시

게다가 `summary()` 함수는 데이터프레임에도 적용할 수 있어요! 데이터프레임의 각 열에 대해 요약 통계량을 계산해 주기 때문에, 여러 변수를 동시에 분석할 때 매우 유용하답니다. 예를 들어, iris 데이터셋에 summary() 함수를 적용해 볼까요?

> summary(iris)
  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width          Species  
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100   setosa    :50  
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300   versicolor:50  
 Median :5.800   Median :3.000   Median :4.350   Median :1.300   virginica :50  
 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199                  
 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800                  
 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500                  

iris 데이터셋의 각 변수에 대한 최솟값, 1사분위수, 중앙값, 평균, 3사분위수, 최댓값, 그리고 품종별 빈도까지 한눈에 확인할 수 있네요! 데이터 분석 작업 시간을 단축시켜주는 꿀팁!

결론

`summary()` 함수는 간단하지만 강력한 기능으로 데이터 분석의 시작과 끝을 함께하는 든든한 동반자랍니다. 복잡한 데이터도 summary() 함수 하나면 걱정 없어요! 이제 여러분도 summary() 함수를 활용하여 데이터 분석의 마법사가 되어보세요!

 

자, 이제 R에서 기본 통계량을 휘리릭 계산하는 마법같은 함수들을 살펴봤어요! 평균 구하고, 중앙값 찾고, 표준편차랑 분산도 뚝딱! 데이터 분석의 첫걸음, 어렵지 않죠? `summary()` 함수 하나면 데이터 전체 윤곽도 한눈에 쏙 들어온답니다. 앞으로 데이터 분석할 때 오늘 배운 함수들, 꼭 기억해두면 정말 유용할 거예요. 데이터와 더 친해지는 그날까지, 즐거운 분석 여정 되세요! 더 궁금한 점이 있다면 언제든지 질문해주세요. 함께 배우고 성장하는 기쁨을 나누고 싶어요.

 


코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다