데이터 전처리 실습
안녕하세요! 오늘은 데이터 전처리에 대해 실습을 통해 배우고, 실무에서 자주 사용하는 몇 가지 중요한 기법들을 소개하려고 합니다.
데이터 전처리는 데이터를 깨끗하고 유용하게 만들어서, 이후 분석이나 머신러닝 모델 학습에 적합하게 만드는 과정입니다. 이 과정이 잘못되면 모델 성능이 떨어지거나, 잘못된 결론을 도출할 수 있기 때문에 매우 중요합니다.
1. 데이터 프레임 생성 및 결측값 처리
먼저, pandas에서 데이터를 어떻게 다루는지 알아봅니다. 데이터 전처리를 할 때는 데이터를 DataFrame 형식으로 다루는데, DataFrame은 pandas에서 데이터를 표 형태로 관리하는 구조입니다.
결측값 처리
데이터 분석에서 결측값은 자주 마주하는 문제입니다. 결측값은 누락된 데이터를 의미하는데, 이를 처리하는 방법을 배워봅시다.
import pandas as pd
import numpy as np
# 데이터 생성
data = {
'이름': ['홍길동', '김철수', '이영희', None, '박민수'],
'나이': [25, 30, 22, 28, np.nan],
'직업': ['학생', '디자이너', None, '개발자', '선생님']
}
# DataFrame 생성
df = pd.DataFrame(data)
# 결측값 제거
df_cleaned = df.dropna() # NaN이 있는 행을 모두 제거
print(df_cleaned)
결과:
이름 나이 직업
1 김철수 30.0 디자이너
4 박민수 NaN 선생님
dropna() 함수는 결측값이 포함된 행을 삭제합니다. 하지만 모든 결측값을 제거하면 데이터 손실이 커질 수 있습니다. 그래서 적절한 대체 방법을 사용해야 합니다.
2. 결측값 대체
결측값을 단순히 제거하기보다는 적절한 값으로 대체하는 것이 더 나은 경우가 많습니다. 예를 들어, 숫자형 데이터는 평균값이나 중앙값으로, 범주형 데이터는 최빈값으로 대체할 수 있습니다.
# 결측값을 0으로 대체
df_filled = df.fillna(0)
print(df_filled)
결과:
이름 나이 직업
0 홍길동 25.0 학생
1 김철수 30.0 디자이너
2 이영희 22.0 0
3 0 28.0 개발자
4 박민수 0.0 선생님
위 코드에서는 **fillna(0)**로 결측값을 0으로 대체했습니다. 이 방법은 숫자형 컬럼에만 적용 가능합니다. 문자형 데이터는 대체할 수 있는 적절한 값을 찾아야 합니다.
3. 이상치 처리 (Outlier Handling)
이상치란 데이터에서 매우 크거나 작은 값들로, 분석 결과에 왜곡을 줄 수 있습니다. 이상치를 확인하고 처리하는 방법을 알아보겠습니다. 이상치는 주로 IQR(Interquartile Range) 방법으로 처리합니다.
# 이상치 탐지: IQR 방법
q1 = df['나이'].quantile(0.25) # 25% 지점
q3 = df['나이'].quantile(0.75) # 75% 지점
iqr = q3 - q1 # IQR
lower_bound = q1 - 1.5 * iqr # 하한
upper_bound = q3 + 1.5 * iqr # 상한
print(f"하한: {lower_bound}, 상한: {upper_bound}")
위 코드에서는 quantile() 함수로 Q1과 Q3 값을 구하고, 이를 이용해 IQR을 계산한 뒤, 이상치의 상한과 하한을 구했습니다. 이 범위를 벗어나는 값은 이상치로 간주하여 제거하거나 대체할 수 있습니다.
4. 데이터 타입 변환 (Type Conversion)
때때로 데이터의 타입이 맞지 않아 오류가 발생할 수 있습니다. 이때는 astype() 함수로 타입을 변환할 수 있습니다.
# '나이' 컬럼을 정수형으로 변환
df['나이'] = df['나이'].astype('Int64')
print(df)
위 코드는 **astype()**을 사용하여 나이 컬럼의 데이터를 정수형으로 변환하는 예시입니다. 이처럼 데이터 타입을 적절히 변환하는 것도 데이터 전처리에서 중요한 부분입니다.
5. 범주형 데이터를 수치형으로 변환 (One-Hot Encoding)
머신러닝에서 범주형 데이터를 다룰 때는 수치형 데이터로 변환해야 합니다. 이를 원-핫 인코딩(One-Hot Encoding)이라고 합니다.
# '직업' 컬럼을 원-핫 인코딩으로 변환
df_encoded = pd.get_dummies(df, columns=['직업'])
print(df_encoded)
이 코드에서는 get_dummies()를 사용하여 직업 컬럼을 원-핫 인코딩으로 변환했습니다. 원-핫 인코딩을 통해 범주형 변수들이 각각의 열로 변환되어 0 또는 1로 표시됩니다.
6. 중복 데이터 제거
데이터셋에 중복된 데이터가 있을 경우 분석 결과에 영향을 미칠 수 있습니다. 이럴 때는 drop_duplicates() 함수를 사용하여 중복된 데이터를 제거합니다.
# 중복 데이터 제거
df_unique = df.drop_duplicates()
print(df_unique)
이 함수는 데이터프레임에서 중복된 행을 제거하고, 고유한 데이터만 남깁니다.
7. 새로운 특성 생성
데이터에서 추가적인 정보를 추출해 새로운 특성을 만들 수 있습니다. 예를 들어, 나이와 직업 정보를 바탕으로 새로운 특성을 생성할 수 있습니다.
# 새로운 특성 생성
df['나이_직업'] = df['나이'].astype(str) + '_' + df['직업']
print(df)
이 코드는 나이와 직업 컬럼을 결합하여 새로운 나이_직업 컬럼을 생성합니다. 새로운 특성 생성은 모델 성능 향상에 중요한 역할을 할 수 있습니다.
결론
데이터 전처리는 머신러닝의 성능을 결정짓는 중요한 단계입니다. 위에서 소개한 결측값 처리, 이상치 처리, 데이터 타입 변환, 원-핫 인코딩 등은 실제 분석 및 모델링 과정에서 자주 사용되는 기법들입니다. 이 기법들을 이해하고 잘 활용하면 데이터 분석 및 모델 성능을 크게 향상시킬 수 있습니다.
데이터 전처리를 제대로 하지 않으면 모델 성능이 크게 떨어질 수 있기 때문에, 데이터 전처리 단계에서 충분한 시간과 노력을 들여야 합니다.
'Python > Machine Learning' 카테고리의 다른 글
| 탐색적 데이터 분석(EDA) (4) | 2024.12.19 |
|---|---|
| [TIL] 241219 머신러닝 워크플로우 정리 (3) | 2024.12.19 |
| 챕터2 주택가격예측 과제설명 (3) | 2024.12.18 |
| [머신러닝] 지도학습 : 회귀모델 (1) | 2024.12.16 |
| 데이터 전처리 개념 (0) | 2024.12.15 |