PYTHON/빅데이터분석기사

ML_01 (basic s3-01~02)

쿠룽지 2023. 11. 5. 22:25
728x90
반응형
728x90

 

 

- ML 과정

 

 

 

1. 전처리

1-1 ) 문제지와 실제 dtype 차이 확인 

문제지 요구 사항에 제시된 column의 dtype이 file에서 읽어온 데이터와 동일한지 확인, 변환

  • 숫자가 아닌 문자가 포함되어 있는 경우 : object로 표기 / 해당 문자를 찾아 없애야함
    1. astype('int') / astype('float') -- dtype 변환 시도 후, 무엇 때문에 안 되는지 오류 메시지 확인
    2. s.replace(regex=True) / s.str.replace() -- 오류 메시지에 따라 불필요한 문자 제거
    3. astype() -- 숫자형 데이터로 변경

 

  • 날짜/시간 데이터: pd.to_datetime(s, format='%Y%m%d')
    1. 일반적인 날짜/시간 형식은 astype('datetime64' or 'datetime64[np]') 로 가능
# 연습 예제
data = {'point': ['1', '*2', '3', '*4', '1'],
        'date': ['2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05', '2021-01-06'],
        'gender': ['F', 'M', 'M', 'F', 'M']}
df = pd.DataFrame(data)


# 1) dtype 변환
df['point_num'] = df['point'].str.replace('*','').astype('int64')
df['datetime'] = pd.to_datetime(df['date'], format='%Y-%m-%d')

 

 

 

1-2) 모든 column의 dtype 확인

ML을 위한 column의 dtype은 int 또는 float여야 함 (정수..!)

  • 범주형 데이터는 LabelEncoding or OneHotEncoding 을 사용하여 수치형으로 변경
  • 날짜/시간 데이터는 dt를 사용하여 year,month,day,hour,weekdays,quarter 등 정보 분할 후 Feature로 사용
    • 분할 정보의 nunique() = 1 or val() = 0인 값은 의미x / Feature 로 사용x
df['point_num'] = df['point'].str.replace('*','').astype('int64')
df['datetime'] = pd.to_datetime(df['date'], format='%Y-%m-%d')

#--------------------------------------------------------------
# 2) 모든 dtype을 범주형 데이터로 변환

df['datetime'].values() # 확인해보니 21-01-n 일까지는 똑같음 (일수만 다름)

df['day'] = df['datetime'].dt.day
df[gender_LE] = df['gender'].replace({'F':0, 'M':1})

df2 = df[['point_num', 'day', 'gender_LE']]
df2.info()		# int64로 변환한 컬럼들

 

 

 

1-3) train, test 데이터

train, test 데이터는 세 개의 파일로 나뉘어서 제공됨

  • train 데이터 : 학습용 데이터 // X_train.csv, Y_train.csv
    • 학습 모델을 만들 때 사용
    • 성능 예측을 위해 2개 나누어 사용 or GridSearchCV 사용
  • test 데이터 : 평가용 데이터 // X_test.csv
    • 제출 용도의 파일 작성에 사용
    • train 데이터로 생성된 학습 모델을 사용하여 평가용 파일 작성
  • train, test 데이터의 X (입력) Feature
    • 동일한 가공 처리가 되어야 함
    • Feature 순서, 개수가 동일해야 함
    • 2차원의 형태여야 함
  • train 데이터의 Y(출력, target)은 한 개의 column으로 1차원 형태여야 함
  • train, test 데이터가 서로 섞여서는 안됨
  • test 데이터는 그 행의 순서나 개수가 변경되어서는 안됨 (shuffle, drop 금지)

 

 

1-4) 결측치 (NA Value)

  • ML에 사용되는 데이터는 결측치를 가지고 있으면 안됨
  • train, test 데이터 양 쪽에 결측치가 있는 경우 -> 채우기
  • train 데이터만 결측치가 있는 경우 -> 삭제 or 채우기
728x90
반응형