데이터 분석/NumPy

파이썬 데이터사이언스 핸드북 2 장 - 비교연산, 논리연산으로 부울배열을 만들고 마스킹 연산하자.

haloaround 2020. 5. 31. 13:16

비교연산자와 논리연산자를 모른다면 더보기 클릭

비교연산자, 논리연산자 각각에 해당하는 ufunc 가 있다. 

더보기

 

비교연산자

+, -, *, / 산술연산자 외에도 비교연산자도 활용할 수 있다. 물론 N차원 배열에 대해서도 비교연산자를 사용할 수 있다. 

ufunc 으로서의 비교연산자

 

물론 N차원 배열에 대해서도 비교연산자를 사용할 수 있다. 

 

 

 

논리 연산자 

 

부울 연산자 여러 조건을 조합하고 싶다면, 파이썬의 비트 단위 논리 연산자 &, |, ^, ~ 를 사용할 수 있다.  표준 산술 연산자와 마찬가지로 NumPy 는 이 연산자를 일반적으로 부울 배열의 요소 단위로 동작하는 유니버셜 함수로 오버로딩한다. 

&/| 를 정수에 사용할 때 표현식은 그 요소의 비트에 대해 동작하므로 그 숫자를 구성하는 개별 비트 단위로 and 와 or 을 적용하는 것과 같다. 결과를 산출하기 위해 이진 표현에 대응하는 비트를 비교한다는 점을 알아두자. 

&     np.bitwise_and
|      np.bitwise_or
^     np.bitwise_xor
~     np.bitwise_not

 

※ 키워드 and/or 는전체 객체의 참과 거짓을 측정하는 반면, 연산자 &/|  는 객체의 비트를 참조한다.

 

 

 

부울 배열로 작업하기

논리연산과 비교연산을 통해 부울 배열을 만든다. 그리고 부울 배열로 할 수 있는 작업들을 나열하였다. 

 

요소 개수 세기

np.less(x,6) 또는 줄여서 x<6 부울 배열을 리턴한다. 부울 배열에 대해서도 카운트 또는 집계를 활용할 수 있다. 

부울 배열에 대해서 집계할 때에는 False 는 0 으로, True 는 1 로 해석된다.

 

집계함수인 sum 을 쓰면 차원 (행, 열) 을 따라서 계산할 수도 있다. 

 axis 에 따른 집계

 

값 중 하나라도 참이 있는지나 모든 값이 참인지 빠르게 확인하고 싶다면 np.any(), np.all() 을 사용하면 된다.

np.any(), np.all()

 

 

마스크로서의 부울 배열

더 강력한 패턴은 부울 배열을 마스크로 사용해 데이터 자체의 특정 부분 집합을 선택하는 것이다. subset of collections

이제 배열에서 조건에 맞는 값을 선택하려면 간단히 이 부울 배열을 인덱스로 사용하면 된다. 이를 마스킹 연산이라고 한다. 이 때, 이 부울 배열은 마스크 배열이다. (마스킹 연산의 대상이 되는 마스크) 

반환된 값은 이 조건에 맞는 모든 값, 다시 말해 마스크 배열이 True 인 위치에 있는 모든 값으로 채워진 1차원 배열이다.

 

 

 

현실적인 예는 다음과 같다. 

 

rainy, summer 는 부울 배열이다.

부울 배열

 

데이터셋에서 부울 배열을 마스크로 사용하면, 부울 배열 True 인 값에 대하여 데이터셋 부분집합을 제공한다. 

부울배열을 마스크로 사용하여 부분집합 선택

 

물론 데이터셋 부분집합에 대해서도 집계함수를 활용할 수 있다.