Hailey's TIL

머신러닝 - 데이터 전처리 본문

AI

머신러닝 - 데이터 전처리

0_hailey_0 2024. 3. 13. 19:50

타이타닉 데이터를 이용하여 데이터 전처리를 해보도록 하자.

먼저 상위 데이터를 확인해 보면 아래와 같다.

이제 데이터 전처리를 해보자!

 


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