3.4 기술 통계

넘파이는 다음과 같은 데이터 집합에 대해 간단한 통계를 계산하는 함수를 제공한다. 이러한 값들을 통틀어 기술 통계(descriptive statistics)라고 한다.

  • 데이터의 개수(count)

  • 평균(mean, average)

  • 분산(variance)

  • 표준 편차(standard deviation)

  • 최댓값(maximum)

  • 최솟값(minimum)

  • 중앙값(median)

  • 사분위수(quartile)

예를 들어 다음과 같은 데이터 \(x\)가 있다고 하자.

\[ x = \{ 18, 5, 10, 23, 19, -8, 10, 0, 0, 5, 2, 15, 8, 2, 5, 4, 15, -1, 4, -7, -24, 7, 9, -6, 23, -13 \} \]

\(x\)를 이루는 숫자 하나하나를 수학 기호로는 \(x_1, x_2, \cdots, x_N\)처럼 표시한다. 위 예에서 \(x_1 = 18\), \(x_2 = 5\)이다.

넘파이에서는 이러한 데이터를 1차원 배열로 구현한다.

x = np.array([18,   5,  10,  23,  19,  -8,  10,   0,   0,   5,   2,  15,   8,
              2,   5,   4,  15,  -1,   4,  -7, -24,   7,   9,  -6,  23, -13])

데이터의 개수

데이터의 개수는 len 명령으로 구할 수 있다.

len(x)  # 갯수
26

표본 평균

평균을 통계용어로는 표본 평균(sample average, sample mean)이라고 한다. \(x\) 데이터에 대한 표본 평균은 \(\bar{x}\)라고 표시하며 다음과 같이 계산한다. 이 식에서 \(N\)은 데이터의 개수이다.

\[ \bar{x} = \dfrac{1}{N}\sum_{i=1}^N x_i \]
np.mean(x)  # 평균
4.8076923076923075

표본 분산

표본 분산(sample variance)은 데이터와 표본 평균간의 거리의 제곱의 평균이다. 표본 분산이 작으면 데이터가 모여있는 것이고 크면 흩어져 있는 것이다. 수학 기호로는 \(s^2\)이라고 표시하며 다음과 같이 계산한다.

\[ s^2 = \dfrac{1}{N}\sum_{i=1}^N (x_i - \bar{x})^2 \]
np.var(x)  # 분산
115.23224852071006
np.var(x, ddof=1)  # 비편향 분산. 추후 공부하게 된다.
119.84153846153846

표본 표준편차

표본 표준편차(sample standard variance)는 표본 분산의 양의 제곱근 값이다. \(s\)이라고 표시한다.

\[ s = \sqrt{s^2} \]
np.std(x)  # 표준 편차
10.734628476137871

최댓값과 최솟값

최댓값(maximum)은 데이터 중에서 가장 큰 값을, 최솟값(minimum)은 가장 작은 값을 의미한다.

np.max(x)  # 최댓값
23
np.min(x)  # 최솟값
-24

중앙값

중앙값(median)은 데이터를 크기대로 정렬하였을 때 가장 가운데에 있는 수를 말한다. 만약 데이터의 수가 짝수이면 가장 가운데에 있는 두 수의 평균을 사용한다.

np.median(x)  # 중앙값
5.0

사분위수

사분위수(quartile)는 데이터를 가장 작은 수부터 가장 큰 수까지 크기가 커지는 순서대로 정렬하였을 때 1/4, 2/4, 3/4 위치에 있는 수를 말한다. 각각 1사분위수, 2사분위수, 3사분위수라고 한다. 1/4의 위치란 전체 데이터의 수가 만약 100개이면 25번째 순서, 즉 하위 25%를 말한다. 따라서 2사분위수는 중앙값과 같다.

때로는 위치를 1/100 단위로 나눈 백분위수(percentile)을 사용하기도 한다. 1사분위수는 25% 백분위수와 같다.

np.percentile(x, 0)  # 최소값
-24.0
np.percentile(x, 25)  # 1사분위 수
0.0
np.percentile(x, 50)  # 2사분위 수
5.0
np.percentile(x, 75)  # 3사분위 수
10.0
np.percentile(x, 100)  # 최댓값
23.0