AI, DataScience
[NumPy] np.where()으로 조건에 맞게 0 / 1 정하기
이무기뱀술
2022. 2. 9. 10:00
728x90
어떤 사람이 당뇨병인지 아닌지 판단하는 방법은 다음과 같다.
- 인슐린 약을 섭취하는가
- 공복 혈당이 126mg/dl 이상일 때
- 식사 후 2시간 후 혈당이 200mg/dl 이상일 때
- 당화 헤모글로빈이 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()
위 코드의 설명
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