파이썬 버전 3.7 기준
NumPy 버전 1.16 기준
넘파이의 기초 통계함수 |
본 포스팅에서는 넘파이의 기초 통계함수인 공분산, 평균, 분산, 표준편차를 계산하는 함수인 numpy.cov(), numpy.mean(), numpy.var(), numpy.std()를 다룬다.
넘파이에서 제공하는 통계함수들 |
넘파이에서는 기본적으로 통계에 대한 기초적인 함수를 지원한다. 본 포스팅에서는 넘파이에서 제공하는 4개의 함수에 대해 다룬다.
각 입력자료형에 대한 설명
○ array_like: 배열과 유사한 자료형을 의미한다. (리스트, 튜플, np.array, 기타등등..)
○ bool: 논리형 자료형을 의미한다.(True, False)
○ int: 정수형 자료형을 의미한다.
○ dtype: data-type, Numpy에서 제공하는 자료형을 의미한다.
numpy.mean(a, axis=None, dtype=None, out=None, keepdims=<no value>) |
이 함수는 명시된 축을 따라서 산술평균을 계산한다.
이 함수는 배열 요소의 평균값을 반환한다.
반환되는 평균값은 기본값으로는 배열내 모든 요소에 대한 평균값이며, 필요할 경우 각 축에 대한 평균값을 구할 수 있다.
정수가 입력으로 들어올 때에는 중간 값 및 반환 값은 float64가 사용된다.
각 입력변수에 대한 설명)
변수 | 입력자료형 | 필수입력여부 | 설명 |
a | array_like | 필수 | - 평균값을 구하기 위해 숫자형 자료형을 담고있는 배열(array)이다. - a가 배열이 아닐경우 array로의 컨버전을 시도한다. |
axis | None, int, tuple(ints) | 선택 | - 평균값을 구하기 위한 축 혹은 여러 개의 축이다. - 기본 값은 None이며, 이 경우 배열안에 모든 요소의 평균값을 구한다. - 정수로 구성된 튜플이 입력될 경우, 여러 축에 대한 평균을 계산한다. |
dtype | dyte-type | 선택 | - 평균을 계산하는데 사용하는 자료형을 의미한다. - 정수 배열이 평균을 구하기 위해 입력된 경우, 기본 자료형은 float64이다. - 실수(float32, 64, 128 등) 배열이 평균을 구하기 위해 입력된 경우, 입력된 배열의 자료형을 따른다. |
out | ndarray | 선택 | - 결과를 배치할 대체 출력 배열을 입력받는다. - 기본값은 None이다. - 만약 입력되는 경우, 예상되는 배열의 형상(크기)이 이 변수에 입력되는 배열의 형상과 동일해야 한다. + 필요하다면 자료형은 변경될 수 있다. |
keepdims | bool | 선택 | - 기본 값은 아무 값도 없는 상태이다. - True가 입력될 경우, 결과 계산 후 제거되어지는 축(차원)들을 남아있게 만든다. + 이 옵션을 사용함으로써 입력 배열 a에 대해 브로드캐스팅이 정확하게 될 수 있도록 할 수 있다. - 만약 기본값이 전달 될 경우, 그때에는 keepdims의 값은 ndarray의 서브클래스의 mean 메서드로 전달되어지지 않는다. + 하지만 기본값이 아닌 값은 그대로 유지된다. + 서브클래스의 메서드가 keepdims를 실행하지 않으면 예외가 발생한다. |
np.average() 역시 유사한 작업을 수행하며 다른 점으로는 가중 평균까지 구할 수 있다는 점과 입력받는 변수가 약간 다르다.
np.nanmean()는 NaN값을 무시하고 평균을 계산하는 함수이며, 입력은 np.mean()과 동일하다.
예제)
# 기본 입력
In[2]: import numpy as np
In[3]: a = np.array([[1,1],[10,10]])
# mean 예제
In[5]: np.mean(a)
Out[5]: 5.5
In[6]: np.mean(a,axis=0)
Out[6]: array([5.5, 5.5])
In[7]: np.mean(a,axis=1)
Out[7]: array([ 1., 10.])
numpy.var(a, axis=None, dtype=None, out=None, keepdims=<no value>) |
이 함수는 명시된 축을 따라서 분산을 계산한다.
이 함수는 배열 요소의 분산값을 반환한다.
반환되는 분산값은 기본값으로는 배열내 모든 요소에 대한 분산값이며, 필요할 경우 각 축에 대한 분산값을 구할 수 있다.
각 입력변수에 대한 설명)
변수 | 입력자료형 | 필수입력여부 | 설명 |
a | array_like | 필수 | - 분산을 구하기 위해 숫자형 자료형을 담고있는 배열(array)이다. - a가 배열이 아닐경우 array로의 컨버전을 시도한다. |
axis | None, int, tuple(ints) | 선택 | - 분산을 구하기 위한 축 혹은 여러 개의 축이다. - 기본 값은 None이며, 이 경우 배열안에 모든 요소의 분산값을 구한다. - 정수로 구성된 튜플이 입력될 경우, 여러 축에 대한 분산을 계산한다. |
dtype | dyte-type | 선택 | - 분산을 계산하는데 사용하는 자료형을 의미한다. - 정수 배열이 분산을 구하기 위해 입력된 경우, 기본 자료형은 float32이다. - 실수(float32, 64, 128 등) 배열이 분산을 구하기 위해 입력된 경우, 입력된 배열의 자료형을 따른다. |
out | ndarray | 선택 | - 결과를 배치할 대체 출력 배열을 입력받는다. - 기본값은 None이다. - 만약 입력되는 경우, 예상되는 배열의 형상(크기)이 이 변수에 입력되는 배열의 형상과 동일해야 한다. + 필요하다면 자료형은 변경될 수 있다. |
keepdims | bool | 선택 | - 기본 값은 아무 값도 없는 상태이다. - True가 입력될 경우, 결과 계산 후 제거되어지는 축(차원)들을 남아있게 만든다. + 이 옵션을 사용함으로써 입력 배열 a에 대해 브로드캐스팅이 정확하게 될 수 있도록 할 수 있다. - 만약 기본값이 전달 될 경우, 그때에는 keepdims의 값은 ndarray의 서브클래스의 var 메서드로 전달되어지지 않는다. + 하지만 기본값이 아닌 값은 그대로 유지된다. + 서브클래스의 메서드가 keepdims를 실행하지 않으면 예외가 발생한다. |
np.nanvar()는 NaN값을 무시하고 분산을 계산하는 함수이며, 입력은 np.var()과 동일하다.
# 기본 입력
In[2]: import numpy as np
In[3]: a = np.array([[1,1],[10,10]])
# var 예제
In[8]: np.var(a)
Out[8]: 20.25
In[9]: np.var(a, axis=0)
Out[9]: array([20.25, 20.25])
In[10]: np.var(a, axis=1)
Out[10]: array([0., 0.])
numpy.std(a, axis=None, dtype=None, out=None, keepdims=<no value>) |
이 함수는 명시된 축을 따라서 표준편차를 계산한다.
이 함수는 배열 요소의 표준편차를 반환한다.
반환되는 표준편차는 기본값으로는 배열내 모든 요소에 대한 표준편차이며, 필요할 경우 각 축에 대한 표준편차를 구할 수 있다.
각 입력변수에 대한 설명)
변수 | 입력자료형 | 필수입력여부 | 설명 |
a | array_like | 필수 | - 표준편차를 구하기 위해 숫자형 자료형을 담고있는 배열(array)이다. - a가 배열이 아닐경우 array로의 컨버전을 시도한다. |
axis | None, int, tuple(ints) | 선택 | - 표준편차를 구하기 위한 축 혹은 여러 개의 축이다. - 기본 값은 None이며, 이 경우 배열 안에 모든 요소의 표준편차를 구한다. - 정수로 구성된 튜플이 입력될 경우, 여러 축에 대한 표준편차를 계산한다. |
dtype | dyte-type | 선택 | - 표준편차를 계산하는데 사용하는 자료형을 의미한다. - 정수 배열이 표준편차를 구하기 위해 입력된 경우, 기본 자료형은 float64이다. - 실수(float32, 64, 128 등) 배열이 표준편차를 구하기 위해 입력된 경우, 입력된 배열의 자료형을 따른다. |
out | ndarray | 선택 | - 결과를 배치할 대체 출력 배열을 입력받는다. - 기본값은 None이다. - 만약 입력되는 경우, 예상되는 배열의 형상(크기)이 이 변수에 입력되는 배열의 형상과 동일해야 한다. + 필요하다면 자료형은 변경될 수 있다. |
keepdims | bool | 선택 | - 기본 값은 아무 값도 없는 상태이다. - True가 입력될 경우, 결과 계산 후 제거되어지는 축(차원)들을 남아있게 만든다. + 이 옵션을 사용함으로써 입력 배열 a에 대해 브로드캐스팅이 정확하게 될 수 있도록 할 수 있다. - 만약 기본값이 전달 될 경우, 그때에는 keepdims의 값은 ndarray의 서브클래스의 var 메서드로 전달되어지지 않는다. + 하지만 기본값이 아닌 값은 그대로 유지된다. + 서브클래스의 메서드가 keepdims를 실행하지 않으면 예외가 발생한다. |
np.nanstd()는 NaN값을 무시하고 표준편차를 계산하는 함수이며, 입력은 np.std()과 동일하다.
# 기본 입력
In[2]: import numpy as np
In[3]: a = np.array([[1,1],[10,10]])
# std예제
In[11]: np.std(a)
Out[11]: 4.5
In[12]: np.std(a, axis=0)
Out[12]: array([4.5, 4.5])
In[13]: np.std(a, axis=1)
Out[13]: array([0., 0.])
numpy.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None, aweights=None) |
이 함수는 주어진 데이터로부터 공분산(convariance) 매트릭스를 출력해주는 함수이다.
공분산은 2개의 확률 변수의 상관정도를 나타내주는 값이다.
만약 N-차원의 샘플에 대해 공분산을 계산할 경우(), 그때에 공분산 매트릭스는 는 와 의 공분산이다.
는 의 분산값이다.
각 입력변수에 대한 설명)
변수 | 입력자료형 | 필수입력여부 | 설명 |
m | array_like | 필수 | - 1차원 혹은 2차원 배열이다. - 각 행(row)는 변수(variable)를 나타내며, 각 열(column)은 모든 배열의 관측치(observation)를 나타낸다. |
y | array_like | 선택 | - 변수와 관측지의 추가적인 세트이다. - y는 m과 같은 형태를 가진다. |
rowvar | bool | 선택 | - 이 변수가 True일 경우(기본값), 각각의 행(row)은 변수를 나타내며, 열(column)은 관측치를 나타낸다. - False일 경우 반대가 된다. 즉, 행(row)는 관측치를 나타내며, 열(column)은 변수를 나타낸다. |
bias | bool | 선택 | - 기본값은 False이다. + 기본 정규화(Normalization)는 (N-1)에 의해 행해진다. + N은 주어진 관측치의 수이다. - True일 경우, N에 의해 정규화가 행해진다. |
ddof | int | 선택 | - None이 기본값이며, None이 아닐경우 bias의 값은 무시된다. - ddof가 1일 경우, 바이어스가 되지 않은 결과를 반환한다. + fweights와 aweights의 값을 명시해놓더라도 바이어스되지 않은 결과가 반환된다. - ddof가 0일 경우 단순한 평균을 반환한다. |
fweights | array_like, int | 선택 | - 정수 주파수 가중치(integer frequency weight)의 1차원 배열을 입력받는다. - 각 관측치 벡터의 수가 반복되어져야 한다. |
aweights | array_like | 선택 | - 각 관측치 벡터의 가중치의 1차원 배열을 입력받는다. - 일종의 상대적 가중치이다. + 일반적으로 중요하게 간주되는 관측치에 대해 크다. + 덜 중요하게 간주되는 관측치에 대해서는 더 작다. - ddof가 0인 경우, 가중치 배열을 사용하여 관측치 벡터에 확률을 할당 할 수 있다. |
만약 정규화된 공분산 값을 얻고 싶다면, numpy.corrcoef()함수를 이용하면 된다.
# 기본 입력
In[2]: import numpy as np
In[22]: a = np.random.rand(3,3)
In[23]: b = np.random.rand(3,3)
# cov 예제
In[24]: np.cov(a)
Out[24]:
array([[0.07362693, 0.05503447, 0.05689581],
[0.05503447, 0.04832107, 0.07056732],
[0.05689581, 0.07056732, 0.15340144]])
In[25]: np.cov(b)
Out[25]:
array([[ 0.08182503, -0.04773079, -0.03162051],
[-0.04773079, 0.15042442, 0.01495418],
[-0.03162051, 0.01495418, 0.01231886]])
In[26]: np.cov(a,b)
Out[26]:
array([[ 0.07362693, 0.05503447, 0.05689581, 0.00347713, -0.0969346 , 0.00135907],
[ 0.05503447, 0.04832107, 0.07056732, -0.02162189, -0.05965707, 0.0104137 ],
[ 0.05689581, 0.07056732, 0.15340144, -0.09184624, -0.02495177, 0.03772946],
[ 0.00347713, -0.02162189, -0.09184624, 0.08182503, -0.04773079, -0.03162051],
[-0.0969346 , -0.05965707, -0.02495177, -0.04773079, 0.15042442, 0.01495418],
[ 0.00135907, 0.0104137 , 0.03772946, -0.03162051, 0.01495418, 0.01231886]])
'Python > NumPy' 카테고리의 다른 글
배열(array)의 형상(shape) 정보 확인과 조작(reshape, resize) - NumPy(14) (0) | 2019.03.07 |
---|---|
배열(array)의 출력과 기본연산자(basic operation) - NumPy(13) (0) | 2019.03.03 |
Record array(레코드 배열)에서의 Recarray Helper Functions - NumPy(12) (0) | 2019.02.26 |
Structured Array(구조체 배열)의 Record array(레코드 배열) - NumPy(11) (0) | 2019.02.25 |
Structured Array(구조체 배열)의 indexing(인덱싱)과 assignment(배정) - NumPy(10) (0) | 2019.02.24 |
댓글