본문 바로가기
Python/NumPy

넘파이의 기초 통계함수(평균,분산,표준편차,공분산) - Numpy(15)

by 콩돌 2019. 3. 21.
반응형

파이썬 버전 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]])

 

 

 

 

 

 

참고자료

https://docs.scipy.org/doc/numpy/user/quickstart.html

https://docs.scipy.org/doc/numpy/reference/generated/numpy.cov.html#numpy.cov

https://docs.scipy.org/doc/numpy/reference/generated/numpy.mean.html#numpy.mean

https://docs.scipy.org/doc/numpy/reference/generated/numpy.var.html#numpy.var

https://docs.scipy.org/doc/numpy/reference/generated/numpy.std.html#numpy.std

 

 

 

 

 

반응형

댓글