Hailey's TIL
머신러닝 - 데이터 전처리 본문
타이타닉 데이터를 이용하여 데이터 전처리를 해보도록 하자.
먼저 상위 데이터를 확인해 보면 아래와 같다.
이제 데이터 전처리를 해보자!
1. 불필요한 변수 제거하기
- Cabin은 77.1%가 NaN이기에 채울 방법이 마땅치 않으니 제거
- PassengerId, Name, Ticket은 Unique 한 값이므로 제거
- axis=0는 행, axis=1은 열을 의미함을 기억하자.
# 여러 열 동시 제거
drop_cols = ['Cabin', 'PassengerId', 'Name', 'Ticket']
titanic.drop(drop_cols, axis=1, inplace=True)
2. NAN 조치
NaN 값이 포함되어 있으면 정확한 분석와 예측을 할 수 없으니 이에 대한 처리가 필요하다.
1) 데이터에 NaN 값이 포함 되어있는지 확인
# 변수들의 NaN 포함 상태 확인
titanic.isna().sum()
2) NaN 삭제
- NaN 값이 포함된 행이나 열이 중요하지 않다면 해당 행이나 열을 제거한다.
- NaN 값이 너무 많이 포함된 경우, 적절히 채울 수 없다면 해당 행과 열을 제거한다.
# NaN이 포함된 모든 행(axis=0) 제거
titanic.dropna(axis=0, inplace=True)
# Age 변수에 NaN이 포함된 행 제거
titanic.dropna(subset=['Age'], axis=0, inplace=True)
# NaN 열이 포함된 모든 변수(axis=1) 제거
titanic.dropna(axis=1, inplace=True)
3) NaN 채우기
- NaN 값이 포함된 행이나 열을 제거할 수 없다면 특정 값으로 채운다.
- 임의의 값을 지정해 NaN 값을 채운다.
- 평균값이나 최빈값으로 채우는 경우가 많다.
- 평균값으로 채우기
# Age 평균 구하기
mean_age = titanic['Age'].mean()
# NaN을 평균값으로 채우기
titanic['Age'].fillna(mean_age, inplace=True)
-최빈값으로 채우기
# Embarked 변수 값 확인
titanic['Embarked'].value_counts(dropna=True)
# 최빈값 확인
titanic['Embarked'].value_counts(dropna=True).idxmax()
# 최빈값 확인
titanic['Embarked'].mode()[0]
# NaN 값을 가장 빈도가 높은 값으로 채우기
freq_emb = titanic['Embarked'].mode()[0]
titanic['Embarked'].fillna(freq_emb, inplace=True)
- 앞/뒤 값으로 채우기
- 시계열 데이터인 경우 많이 사용하는 방법이다.
- method='ffill': 바로 앞의 값으로 채우기
- method='bfill': 바로 뒤의 값으로 채우기
# Ozone 변수 NaN 값을 바로 앞의 값으로 채우기
air['Ozone'].fillna(method='ffill', inplace=True)
# Solar.R 변수 NaN 값을 바로 뒤의 값으로 채우기
air['Solar.R'].fillna(method='bfill', inplace=True)
- 선형 보간법으로 채우기
interpolate 메서드에 method='linear' 옵션을 지정해 선형 보간법으로 채워보자.
# 선형 보간법으로 채우기
air['Ozone'].interpolate(method='linear', inplace=True)
# Solar.R 변수 NaN 값을 바로 뒤의 값으로 채우기
air['Solar.R'].interpolate(method='linear', inplace=True)
#air.interpolate(method = 'linear', inplace = True)
3. 가변수화
범주형 값을 갖는 변수에 대한 One-Hot Encoding을 진행한다.
- 다중공선성 문제를 없애기 위해 drop_first=True 옵션을 지정
# 가변수 대상 변수 식별
dumm_cols = ['Pclass', 'Sex', 'Embarked']
# 가변수화
titanic = pd.get_dummies(titanic, columns=dumm_cols, drop_first=True, dtype=int)
[4주차 01]
'AI' 카테고리의 다른 글
머신러닝 - 성능평가 (0) | 2024.03.13 |
---|---|
머신러닝 - 모델링 기초 (0) | 2024.03.13 |
웹 크롤링 2 (0) | 2024.03.09 |
웹 크롤링 1 (0) | 2024.03.07 |
데이터 분석 및 의미 찾기 2 (0) | 2024.02.29 |