🧐 데이터 전처리에서는 뭐를 해야하나?
데이터 전처리는 데이터분석, 머신러닝(ML), 딥러닝(DL), 그리고 인공지능(AI)에서 필수적인 과정입니다.
데이터를 효과적으로 사용하기 위해 필수적인 과정이죠!
데이터 분석에서의 전처리는, '결측치 처리', '이상치 처리', '정규화' 등으로
통계적 분석의 신뢰성과 정확성을 향상 시키기 위해 진행하고
머신러닝에서는,
'스케일링', '범주형 데이터 처리', '중복 제거'등으로
딥러닝에서는,
'이미지 데이터 처리(pixel값 정규화 등)',
'텍스트 데이터 처리(텍스트 토큰화 등)',
'데이터 증강(augmentation)'등으로
모델이 학습하기 좋도록 데이터 정리하여 좋은 성능을 내는데 일조한답니다!
우선 아래 본문에서,
'결측치 처리', '이상치 처리', '정규화', '범주형 데이터 처리', '중복 제거'
5가지 작업과 작업에 쓰이는 함수들을 알아보겠습니다. (✨🚀)
📌 목차
- 들어가기
- 전처리는 뭔가?
- 전처리는 언제하는 건가?
- 데이터 분석하기 전에 "라이브러리"부터 불러오기!
- 데이터 전처리에서 사용하는 함수
- 2.1. 결측치 처리
- 2.2. 이상치 처리
- 2.3. 데이터 정규화
- 2.4. 범주형 데이터 변환
- 2.5. 중복 데이터 제거
0. 들어가기
✅ 전처리가 뭔가?
데이터를 분석할 수 있는 상태로 준비하는 과정
높은 모델 성능, 정확한 분석 등 원하는 결과물을 얻기 위하여
데이터의 품질을 높이고, 후속 작업(분석 등)에 적합하게 만드는 과정입니다.
이 과정에는 결측치 처리, 이상치 처리, 데이터 정규화, 범주형 데이터 변환, 중복 데이터 제거 같은 작업이 포함됩니다.
✅ 전처리는 언제 하는 건가?
전처리는 데이터를 다룰 때 가장 먼저 이루어져야 해야 합니다.
적어도 분석 전 혹은 머신러닝 모델을 훈련하기 전에는,
항상 데이터를 정제하고 처리하는 전처리 작업을 필수적으로 진행 해야 합니다.
(왜냐면 데이터 전처리가 제대로 되어 있지 않면, 분석 결과나 모델의 성능이 왜곡될 수 있거든요!)
1. 데이터 분석하기 전에 "라이브러리"부터 불러오기!
✅ 일단 잘 모르겠으면 아래 3대장 불러오기!
#판다스
import pandas as pd
# 데이터프레임 다루는 함수들 가져옴(`pd.read_csv()`,`dropna()`, `isnull()` 등)
#넘파이
import numpy as np
# 연산에 사용. 수치 계산, 배열 작업 필요한 전처리 작업중 사용(`sum()`,`mean()`,`np.array()` 등)
#스킷런
from sklearn.preprocessing import MinMaxScaler, StandardScaler, LabelEncoder
# 데이터 정규화 및 범주형 데이터 인코딩 관련 함수들
2. 데이터 전처리에서 사용하는 함수
아래 전처리의 5가지 작업과 작업별 대표적인 함수, 코드 예시를 정리해보았습니다,
2.1. 결측치 처리
✅ 결측치란?
데이터셋에서 값이 비어 있는 경우를 말합니다.
이를 처리하지 않으면 분석에 문제가 될 수 있어서 적당한 처리가 필요합니다.
그래서 결측치가 확인된 경우, 삭제하거나 특정값으로 채우는 처리를 진행합니다.
✔️ 결측치 처리 함수:
- `isnull()` : 결측치 확인
- `fillna()` : 결측치를 특정 값으로 채우기
- `dropna()` : 결측치가 있는 행을 삭제하기
🖥️ 결측치 확인, 채우기, 행 삭제
# 결측치 확인
data.isnull().sum()
# 결측치를 0으로 채우기
data_filled = data.fillna(0)
# 결측치가 있는 행을 삭제
data_dropped = data.dropna()
2.2. 이상치 처리
✅ 이상치란?
이상치는 데이터에서 비정상적으로 큰 값이나 작은 값이 나타나는 경우를 말합니다.
이런 값들을 처리해야 분석에 왜곡이 생기지 않습니다.
✔️ 이상치 처리 함수 :
- `quantile()` : 이상치 탐지
- `clip()` : 이상치 처리 (최소, 최대값으로 조정)
💻 특정 열의 이상치 처
# 예를 들어, 데이터에서 특정 열에 대한 이상치 탐지 및 처리
q1 = data['some_numeric_column'].quantile(0.25)
q3 = data['some_numeric_column'].quantile(0.75)
iqr = q3 - q1
# IQR을 이용해 이상치 범위를 벗어난 값을 제거
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr
data_outliers_removed = data[(data['some_numeric_column'] >= lower_bound) &
(data['some_numeric_column'] <= upper_bound)]
2.3. 데이터 정규화
✅ 정규화?
정규화는 데이터의 범위를 조정하는 과정을 말합니다.
머신러닝에서 다양한 범위의 데이터를 비슷한 범위로 맞춰주면 모델 성능이 좋아질 수 있습니다.
✔️ 데이터 정규화 함수 :
- `MinMaxScaler()` : 최소-최대 정규화
- `StandardScaler()` : 표준화 (평균이 0, 표준편차가 1로 조정)
💻MinMaxScaler(): 데이터 값을 0과 1 사이로 변환
from sklearn.preprocessing import MinMaxScaler
# 최소-최대 정규화
scaler = MinMaxScaler()
data_scaled = scaler.fit_transform(data[['some_numeric_column']])
# DataFrame에 다시 저장
data['scaled_column'] = data_scaled
💻 StandardScaler(): 데이터를 평균 0, 표준편차 1로 변환
from sklearn.preprocessing import StandardScaler
import numpy as np
# 예시 데이터 (2D 배열)
data = np.array([[1, 2], [2, 4], [3, 6], [4, 8]])
# StandardScaler 사용
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)
print("StandardScaler로 변환된 데이터:\n", scaled_data)
2.4. 범주형 데이터 변환
✅범주형 데이터 변환?
범주형 데이터는 고유값 혹은 범주로 구성된 데이터이고,
(ex. 색상 ["Red","Blue","Green"], 도시 ["SEL","NYC."LAX","PAR","MIL"]
범주형 데이터의 변환은, 고유값과 범주를 숫자형으로 변환하는 작업을 말합니다.
예를들어,
레이블 인코딩은 범주형 데이터를 각 범주에 숫자를 할당하여 변환하는 방식이고,
- 도시 ["SEL","NYC."LAX","PAR","MIL"]
⇒ [ 9, 5, 3, 7, 4 ]
원-핫 인코딩은 범주형 데이터를 이진 벡터로 변환하는 방식입니다.
- 색상 ["Red","Blue","Green"]
⇒ [ 0, 0, 1 ]
⇒ [ 0, 1, 0 ]
⇒ [ 1, 0, 0 ]
✔️ 범주형 데이터 변환 함수 :
- `pd.get_dummies()` : 원-핫 인코딩
- `LabelEncoder()` : 레이블 인코딩
💻 pd.get_dummies() : 원-핫 인코딩
import pandas as pd
data = ['red', 'green', 'blue']
one_hot_encoded_data = pd.get_dummies(data)
print(one_hot_encoded_data)
''' 출력 :
blue green red
0 0 0 1
1 0 1 0
2 1 0 0
'''
💻 LabelEncoder() : 레이블 인코딩
from sklearn.preprocessing import LabelEncoder
data = ['red', 'green', 'blue']
label_encoder = LabelEncoder()
encoded_data = label_encoder.fit_transform(data)
print(encoded_data) # 출력 : [2 1 0]
2.5. 중복 데이터 제거
✅ 중복된 데이터는 분석에 방해가 될 수 있어서 제거합니다.
✔️ 중복된 데이터 제거 함수 :
- drop_duplicates(): 중복된 행 제거
# 중복된 행 제거
data_no_duplicates = data.drop_duplicates()
'코드 : 뚝딱뚝딱101' 카테고리의 다른 글
[시각화] matplotlib pyplot 만져보기 : (선행대수) 벡터, 그리드 생성, 축 설정, 축 라벨 추가 (0) | 2024.09.18 |
---|---|
[시각화] #01_세그멘테이션 함수 써보기 : 우주대스타 덕구를 진짜 우주로! (2) | 2024.09.11 |