티스토리 뷰
수학, 통계 메서드
Numpy의 수학, 통계 메서드는 모두 axis(축) 지정이 가능합니다.
# .sum : 합
np.sum?
np.sum(
['a', 'axis=None', 'dtype=None', 'out=None', 'keepdims=<no value>', 'initial=<no value>'],
) # axis = 축 지정, dtype = 데이터 타입, keepdims = 차원 유지 여부
arr = np.arange(10).reshape(2,5)
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
arr.sum()
45 # 모든 원소의 합
arr3.sum(axis=0)
array([ 5, 7, 9, 11, 13]) # 서로 다른 행별(세로) 합
arr.sum(axis=1, keepdims = True)
array([[10], # 서로 다른 열별(가로) 합, 차원의 축소 방지
[35]])
# .mean : 평균
np.mean?
np.mean(a, axis=None, dtype=None, out=None, keepdims=<no value>)
arr = np.arange(10).reshape(2,5)
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
arr.mean()
4.5
arr.mean(axis=0)
array([2.5, 3.5, 4.5, 5.5, 6.5])
arr.mean(axis=1, keepdims = True)
array([[2.],
[7.]])
# .std : 표준편차
np.std?
np.std(a, axis=None, dtype=None, out=None, ddof=0, keepdims=<no value>)
arr = np.array([1,3,5,7,9])
array([1, 3, 5, 7, 9])
math.sqrt(((arr - arr.mean())**2).sum()/5)
2.8284271247461903
arr.std()
2.8284271247461903
# .var : 분산
np.var?
np.var(a, axis=None, dtype=None, out=None, ddof=0, keepdims=<no value>)
arr = np.array([1,3,5,7,9])
array([1, 3, 5, 7, 9])
((arr - arr.mean())**2).sum()/5
8.0
np.var(arr) == arr.var()
8.0
참고. Series 구조 적용 시,
numpy에서 제공하는 분산 메서드(np.var)와 Pandas에서 제공하는 분산 메서드(data.var)는 서로 다른 분산을 갖음
data.var?
data.var(axis=None, skipna=None, level=None, ddof=1, numeric_only=None, **kwargs)
s1 = Series([1,3,5,7,9])
0 1
1 3
2 5
3 7
4 9
dtype: int64
np.var(s1)
8.0
s1.var() # Pandas는 추정된 모수인 자유도(df=1)를 포함
10.0
((arr - arr.mean())**2).sum()/(5-1)
10.0
# .min, .max : 최소, 최대값
np.min?
np.min(a, axis=None, out=None, keepdims=<no value>, initial=<no value>)
arr = np.array([1,3,5,7,9])
arr.min()
1
np.max?
np.max(a, axis=None, out=None, keepdims=<no value>, initial=<no value>)
arr = np.array([1,3,5,7,9])
arr.min()
9
# .cumsum, .cumprod : 원소의 누적 합, 곱
arr.cumsum?
a.cumsum(axis=None, dtype=None, out=None)
arr = np.array([1,3,5,7,9])
arr.cumsum()
array([ 1, 4, 9, 16, 25], dtype=int32)
arr.cumprod?
a.cumprod(axis=None, dtype=None, out=None)
arr = np.array([1,3,5,7,9])
arr.cumprod()
array([ 1, 3, 15, 105, 945], dtype=int32)
# .argmin(), .argmax() : 최소, 최대값을 갖는 원소의 위치
arr.argmin()
3
arr.argmax()
2
# Boolean 메서드
.sum() : True의 개수
arr = np.array([1,3,5,7,9,11,13,15])
arr >= 10
array([False, False, False, False, False, True, True, True])
(arr >= 10).sum()
3
.any() : True가 하나라도 있는지 검사
arr = np.array([1,3,5,7,9,11,13,15])
arr >= 10
array([False, False, False, False, False, True, True, True])
(arr >= 10).any()
True
.all() : 모든 원소가 True인지 검사
arr = np.array([1,3,5,7,9,11,13,15])
arr >= 10
array([False, False, False, False, False, True, True, True])
(arr >= 10).all()
False
#. Q
arr4 = np.arange(1,13).reshape(4,3)
arr4
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
# 1) 행별 평균
arr4.mean(axis = 0)
array([5.5, 6.5, 7.5])
# 2) 컬럼별 평균
arr4.mean(axis = 1)
array([ 2., 5., 8., 11.])
# 3) 행별 분산
arr4 - arr4.mean(axis = 0) # 편차
array([[-4.5, -4.5, -4.5],
[-1.5, -1.5, -1.5],
[ 1.5, 1.5, 1.5],
[ 4.5, 4.5, 4.5]])
((arr4 - arr4.mean(axis = 0))**2).mean(axis = 0)
array([11.25, 11.25, 11.25])
arr4.var(0)
array([11.25, 11.25, 11.25])
# 4) 컬럼별 분산
((arr4 - arr4.mean(axis = 1, keepdims = True))**2).mean(axis = 1, keepdims = True)
array([[0.66666667],
[0.66666667],
[0.66666667],
[0.66666667]])
arr4.var(1)
array([0.66666667, 0.66666667, 0.66666667, 0.66666667])
'Python > Process' 카테고리의 다른 글
[Python] Pandas - Series (0) | 2019.02.07 |
---|---|
[Python] NA, NaN, Null (1) | 2019.02.07 |
[Python] Numpy 배열(메서드, 함수) (0) | 2019.02.01 |
[Python] Numpy 배열(생성, 색인, 연산 ..) (0) | 2019.02.01 |
[Python] 모듈(Module), 패키지(package) (0) | 2019.01.29 |