데이터 구간화는 연속적인 숫자 데이터를 특정 기준에 따라 여러 개의 구간으로 분류하는 작업이다.
.
1. 데이터 구간화(Binning)의 정의와 활용: 연속적인 숫자 데이터를 기준에 따라 그룹으로 분류.
2. pandas의 cut 함수 활용: 데이터 구간화를 위한 다양한 방법과 설정.
3. 데이터 구간 정의: 시작점과 끝점을 직접 설정하거나, 자동으로 구간을 나누는 방법.
4. 구간 경계 설정: 구간의 포함 여부를 조정하는 옵션(right 파라미터).
5. 구간 레이블 설정: 구간의 이름을 설정하여 가독성 및 인덱싱 편의성 향상.
pd.cut(patient_df['age'] , bins=[20, 30, 40, 50, 60, 70])
또는 pd.cut(patient_df['age'] , bins=6)

patient_df['age'] = pd.cut(patient_df['age'] , bins=[20, 30, 40, 50, 60, 70])
patient_df

위에서 결측값 발생(NaN). age_group을 확인 해 보면 [50, 60)이런식으로 표현되어 있는데 '[' 나 ']'는 초과 '(' 나 ')'는 이하로 50은 미포함 60은 포함되는 구간임. 이 떄문에 20인 경우는 그 전 구간이 없어 NaN발생.
이를 해결하기 위해 right=False 옵션 추가. 이는 구간에 오른쪽 값을 포함 여부. default는 True.
patient_df['age_group'] = pd.cut(patient_df['age'], bins=[20, 30, 40, 50, 60, 70], right=False)
patient_df

patient_df['age_group'] = pd.cut(patient_df['age'], bins=[20, 30, 40, 50, 60, 70],
right=False,
labels=['20s','30s','40s','50s','60s'])
patient_df

18.5 미만(저체중): under
18.5 이상 25 미만(정상): healthy
25 이상 30 미만(과체중): over
30 이상(비만): obese
import pandas as pd
import numpy as np
patient_df = pd.read_csv('data/patient.csv')
patient_df['bmi'] = round(patient_df['weight'] / patient_df['height']**2, 1)
#데이터에 따라 혹시 더 큰 값이 있다면 잘못 분류될 수 있으니, patient_df['bmi'].max() + 1을 사용
#분류 기준이 '이상'과 '미만'으로 나뉘므로, right=False 파라미터를 추가
patient_df['obesity'] = pd.cut(patient_df['bmi']
, bins=[0, 18.5, 25, 30, patient_df['bmi'].max() + 1]
, right=False,labels=['under','healthy','over','obese'])
patient_df
