8. Numpy array 함수( 특정계산, 통계함수, 정렬함수)
2018. 2. 23. 06:14
array 각 성분에 대한 특정계산 함수
- 1부터 9까지 정수 array를 만들고, np.sqrt( arr )매소드를 사용해보자.
cf) np.arange( n ) 은 0부터 n-1까지 / (1, n)은 1부터 n-1까지 정수array 생성
np.sqrt( arr) 매소드는 각 array성분에 제곱근을 입힌다. - np.log10(arr)은 각 성분에 상용로그를 입힌 array를 생성한다.
2개이상의 array에 대한 각 성분 비교 함수
- 랜덤으로 1x8 array 2개를 만들고, np.maxium( arr1, arr2 )함수를 이용해서, 각 성분 중 큰 성분을 골라내서 새로운 array을 만든다.
cf) np.random.randn( n )은 일차원 1xn array / (n, m)은 2차원 n X m array 랜덤생성 - 그외 참고할만한 함수
Numpy 통계함수
앞서 학습한, 한 array의 각 성분에 대한 계산 이외에, array 전체성분에 대한 각종 통계량을 계산할 수 있는 함수들이 있다.
np. 이 아닌 array.으로 시작하는 것이 특징이다.
- 크기가 5x4 랜덤 array를 생성하고 arr.sum()함수를 이용해서 array의 전체성분의 합을 구한다.
- arr.mean()을 이용해서 array의 전체성분의 평균을 구한다.
- 그 외 한 array에서 적용되는 통계함수
행 방향 or 열 방향의 성분들만 계산하는 통계함수를 써보자.
array로 나타낼 수 있는 데이터는 일반적으로, 행이 한 사람or 한 item을 의미하고, 열이 각 속성을 의미하는 것이 많다.
- arr.sum( axis = 0)은 sum()함수의 인자에 axis=0을 넣음으로써, 행 방향 (↓) 즉, 각 열들의 합을 구할 수 있다.
- arr.sum( axis =1)은 열 방향(→) 즉, 각 행들의 합을 구할 수 있다.
특정 조건을 만족하는 성분을 셀 때 유용한 함수
- array에 조건문을 달면, 마스크(boolean indexing)을 생성하는 것을 배웠다. 이러한 마스크에다가 sum()함수를 적용할 수 있다.
( arr>0 ).sum()을 하면, array의 성분들이 True는 1로, False는 0으로 계산되서 합계가 나온다. 결과가 9이 나왔다면, 성분들 중 0보다 큰 성분은 9개이다.
결과적으로, ( array 조건).sum()함수 = 조건을 만족하는 성분의 총 개수이 된다.
정렬함수
데이터상에서 Top30, 상위5% 등의 데이터를 구하는 방법이 바로 정렬함수를 사용하는 것이다.
- 8열의 성분들을 작은것부터 오름차순으로 정렬하려면, np.sort( arr) 함수를 이용한다.
- 이제 큰것부터 내림차순으로 정렬하기 위해서는, 파이썬 일종의 꼼수이니, 외워서 사용하자.
np.sort( arr ) [ ::-1 ]은 내림차순으로 각 성분들을 정렬한다. np.sort(arr)를 호출 한 결과에 특이한 인덱스[::-1]를 붙히는 것이다.
2차원 array에서도 정렬함수를 적용할 수 있다.
- 2차원 5 x3 array에서도 마찬가지로 오름차순을 하기 위해서는 np.sort( ) 함수를 호출하지만, 차이점은 인자값에 추가로 axis가 들어간다.
즉, np.sort( arr , axis= 0)은 각 열을 오름차순으로 정렬한다.
마찬가지로 (arr, axis =1)을 인자값으로 주면, 각 행을 오름차순으로 정렬한다.
이 때, 각 열을 오름/내림차순으로 정렬(axis=0)하면, 한 행을 기준으로 묶여있던 성분들이 뒤섞여버린다. 즉, 서로다른 행간에 성분들이 섞여버리게 된다.
우리가 주로할 작업은, 특정 열(각 item의 특정 속성)을 기준을 으로 행 단위(item단위)로 오름차순으로 정렬하는 것을 주로 할 것인데,
sort함수만으로는 우리가 원하는 결과를 얻을 수 없다. 추후 추가적인 조취를 취해야한다.
많은 수의 성분(150개)을 가진 일차원 array를 랜덤하게 만들어서, 상위 5%의 인덱스 값이 무엇인지 확인해보자.
- 먼저 내림차순으로 sorting을 한다. np.sort(large_arr)[::-1]
- 전체 성분의 5%에 해당하는 인덱스를 내림차순정렬된 sort()에다가 반영해준다. np.sort(large_arr)[::-1][ int(0.05* len( large_arr))]
(1) len( large_arr )로 array의 총 길이를 구한다.
(2) 총 길이에 0.05를 곱하여, 상위 5%에 해당하는 길이를 구한 뒤 정수형으로 형변환해준다. int ( 0.05 * 150 ) = 7
(3) 그값을 내림차순으로 정렬한 array에다가 인덱스로 반영하면, index가 7인 성분이 나올 것이다.(원래는 –1 해줘야.. 8이 아닌 7번째 나올?)
Numpy array에 사용되는 또다른 유용함수
미리 준비한 1차원 array을 보면, 중복된 성분을 가진다. 이 때 np.unique( arr ) 함수를 통해 중복된 성분을 제외한 array를 반환한다.
cf) ints에 unique()함수를 써서 생성한 array를 보니, 중복된 것을 제외하면서 숫자는 오름차순으로 정렬되네!
'빅데이터 관련 프로그래밍 > Python - bigdata(pandas 기초)' 카테고리의 다른 글
10. pandas의 자료구조 Series와 DataFrame 살펴보기 (0) | 2018.02.23 |
---|---|
9. Numpy 데이터분석 해보기(파일읽기, 분석하기(고난도), 파일쓰기) (0) | 2018.02.23 |
7. Numpy array 인덱싱( 기본인덱싱, boolean인덱싱(마스크)) (2) | 2018.02.23 |
6. 기초 라이브러리 Numpy(넘파이) 사용하기 (import, 데이터형, array연산) (0) | 2018.02.22 |
5. iPhython Notebook 살펴보기 (1) | 2018.02.22 |