다운로드
작성자: admin 작성일시: 2017-05-30 11:52:37 조회수: 2561 다운로드: 181
카테고리: Python 태그목록:

기술 통계

NumPy는 다음과 같은 데이터 집합에 대해 간단한 통계를 계산하는 함수를 제공한다. 이러한 값들을 통틀어 기술 통계(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$이다.

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

In:
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 명령으로 구할 수 있다.

In:
len(x)  # 갯수
Out:
26

샘플 평균

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

$$ \bar{x} = \dfrac{1}{N}\sum_{i=1}^N x_i $$
In:
np.mean(x) # 평균
Out:
4.8076923076923075

샘플 분산

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

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

샘플 표준편차

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

$$ s = \sqrt{s^2} $$
In:
np.std(x)  # 표준 편차
Out:
10.734628476137871

최대값과 최소값

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

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

중앙값

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

In:
np.median(x)  # 중앙값
Out:
5.0

사분위수

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

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

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

SciPy 패키지에는 여러가지 기술 통계 값을 한 번에 구해주는 describe 명령이 있다.

In:
from scipy.stats import describe
In:
describe(x)
Out:
DescribeResult(nobs=26, minmax=(-24, 23), mean=4.8076923076923075, variance=119.84153846153846, skewness=-0.4762339485461929, kurtosis=0.37443381660038977)

질문/덧글

아직 질문이나 덧글이 없습니다. 첫번째 글을 남겨주세요!