Ⅰ. 데이터 전처리를 위한 인코딩에 있어 방법은 두가지
1. 레이블 인코딩 : 피쳐를 숫자형 데이터로 변경 ex) [가, 나, 다] -> [0, 1, 2]
items =['티비', '냉장고','세탁기','전자렌지','선풍기','컴퓨터','선풍기','믹서','믹서']
encoder = LabelEncoder() # LabelEncoder를 이용해서 fit(), transform()으로 레이블값을 인코딩
encoder.fit(items) # fit : 레이블 호출 (item 데이터를 가져다 (중복제거) 나열해줌)
labels = encoder.transform(items) # transform : 나열된 데이터에 각각 순번을 할당해줌
print(f'인코딩:{labels}')
encoder 에 LabelEncoder() 모델을 할당하고 여기에 맞게 items를 피팅한다
나열된 items에 transform을 하여서 순번을 할당해주면 labels가 완성😉
print(encoder.classes_) #정렬된 상태 모습을 보여줌
>>>> ['냉장고' '믹서' '선풍기' '세탁기' '전자렌지' '컴퓨터' '티비']
print(encoder.inverse_transform([4,5,1,1,2,5,6]))
>>>> ['전자렌지' '컴퓨터' '믹서' '믹서' '선풍기' '컴퓨터' '티비']
encoder.inverse_transform 와 같이 inverse를 해주면 숫자를 넣었을때, 순번을 넣었을 때 해당 아이템이 나옴!
2. 원핫 인코딩 : feature 수만큼 columns를 추가해 해당하는 column에만 1 그 외 0으로 표시
1. 레이블 인코딩을 먼저 진행 (모든 문자 > 숫자 변환 필요)
2. 입력값으로 2차원 데이터 구조가 필요함
print(labels.shape)
>>>>>(9, )
labels_shp = labels.reshape(-1,1)
oh_encoder = OneHotEncoder()
oh_encoder.fit(labels_shp)
oh_labels = oh_encoder.transform(labels_shp)
먼저 레이블 인코딩을 통해 나온 labels를 사용한다. 이는 1차원 데이터(9. )로 2차원으로 변경해줘야함
# 원핫인코딩은 1차원에서 할 수 없고 자동으로 차원을 추가해주는 것이 아니라 먼저 형식을 바꿔줘야함
# 원핫인코딩도 숫자로 되어있는 걸 가지고 하는 거라서 레이블 인코딩을 진행해야함
하게되면 왼쪽(labels)가 오른쪽 원핫인코딩 되어 나온다
영번째 6은 # 6번째가 1
첫번째 0은 # 영번째가 1
Ⅱ.
1. 결측치 처리
-> 결측치 제거 | 수치형의 경우 평균 및 중앙값 등으로 대체
(* 결측치가 하나라도 있으면 머신러닝 등에서 실행되지 않음)
#결측치 채우기 'viewCount'
df['viewCount'] = df['viewCount'].fillna(df.viewCount.mean())
#만약 결측치를 다 지우고 싶다면
df.dropna(how = 'all').head() # all은 행 전체가 null값일 경우에만 행 삭제
df.dropna(how = 'any').head() # 행에서 하나라도 null값 있으면
2. 이상치 처리
1. 표준점수로 변환후 +- 3 이상이하 제거
2. IQR 방식 : 75 + 1.5*IQR, 25-1.5*IQR 에 속하는 경우 극단 처리
3. Standard Scaler : 표준화 | MinmaxScaler
--> minmaxScaler의 경우 양수는 0 ~ 1로 음수와 양수음수 섞여있는 경우는 -1 ~ 0로 변환한다