AI, DataScience

[NumPy] np.where()으로 조건에 맞게 0 / 1 정하기

이무기뱀술 2022. 2. 9. 10:00
728x90

어떤 사람이 당뇨병인지 아닌지 판단하는 방법은 다음과 같다.

 

  1. 인슐린 약을 섭취하는가
  2. 공복 혈당이 126mg/dl 이상일 때
  3. 식사 후 2시간 후 혈당이 200mg/dl 이상일 때
  4. 당화 헤모글로빈이 6.5% 이상일 때

위 4가지 조건 중 하나 이상 만족하면 당뇨병이라고 판단한다

 

필자는 이를 알기 위해 엑셀 함수(IF, OR 등)를 이용하려고 했으나...

조건도 복잡하고

데이터가 많고

느려서

다른 방법을 찾았다.

 


np.where()는

numpy.where(condition,[x,y])

이러한 형태로 쓸 수 있다.

각각의 입력에서 condition이 참이면 x, 거짓이면 y를 반환한다.

 

 

이를 이용하여 당뇨병인지 아닌지를 판단하여 변수를 부여할 수 있다.

 

dependent['DIABETES'] = np.where((dependent['AS1_DRUGINSCU'] == 0) & (dependent['AS1_GLU0_TR'] < 120) & (dependent['AS1_GLU120_TR'] < 200) & (dependent['AS1_HBA1C'] < 6.5), 0, 1)
dependent['DIABETES'].value_counts()

 

value_counts()의 결과

위 코드의 설명

 

dependent는 pandas의 DataFrame이다.

 

np.where의 결과의 반환값(ndarray)을 'DIABETES' 라는 이름으로 dependent에 추가하였다.

 

코드의 조건으로

AS1_DRUGINSCU이 0일 때, AS1_GLU0_TR이 120 미만일 때, AS1_GLU120_TR이 200미만일 때, AS1_HBA1C이 6.5를 모두 만족할 때에만 0(당뇨병 아님)으로 정의했다.
그리고 나머지는 1(당뇨병)로 정의했다.

 

위 연산의 수행 결과로, 당뇨병인 변수가 1268개, 정상이 8436개 나오는 것을 볼 수 있다.

 

참고: https://www.delftstack.com/ko/api/numpy/python-numpy-where/

728x90