목차
- 결측값 처리
- 결측값 처리 방법
- 제거
- 대체
- 0으로 대체
- 각 열의 평균값으로 대체
- 각 열의 중간값으로 대체
- 각 열의 최빈값으로 대체
- 예측
- 결측값 처리 방법
- 이상값 처리
- 이상치란?
- 이상치 확인 방법
- 이상치 처리 방법
- 제거
- 대체
- 변환
- 이상치란?
- 중복값 제거
- 데이터 타입 변환
- 데이터 타입 변환의 필요성
- 정수형
- 문자열
- 부등 소수점
- 데이터 타입 변환의 필요성
- 인코딩
- 인코딩이란?
- 인코딩 방법
- 샘플링
- 샘플링이란?
- 샘플링 방법
- 특징 선택 및 추출
- 특징 선택 및 추출이란?
- 특징 선택 방법
- 특징 추출 방법
1. 결측값 처리
1.1. 결측값 처리 방법
1.1.1. 제거
- 정의 : 결측값이 포함된 행 또는 열을 제거
# 결측값이 포함된 행 제거
df_dropped_rows = df.dropna()
# 결측값이 포함된 열 제거
df_dropped_cols = df.dropna(axis=1)
행 제거 | = df.dropna() |
열 제거 | = df.dropna(axis=1) |
1.1.2. 대체
- 정의 : 결측값을 특정 값으로 대체
1.1.2.1. 결측값을 0으로 대체
# 결측값을 0으로 대체
df_filled = df.fillna(0)
0으로 대체 | = df.fillna(0) |
1.1.2.2. 결측값을 각 열의 평균값으로 대체
# 결측값을 각 열의 평균값으로 대체
df_filled_mean = df.fillna(df.mean())
평균값 | = df.fillna(df.mean()) |
1.1.2.3. 결측값을 각 열의 중간값으로 대체
# 결측값을 각 열의 중간값으로 대체
df_filled_median = df.fillna(df.median())
중간값 | = df.fillna(df.median()) |
1.1.2.4. 결측값을 각 열의 최빈값으로 대체
# 결측값을 각 열의 최빈값으로 대체
df_filled_mode = df.fillna(df.mode().iloc[0])
최빈값 | = df.fillna(df.mode().iloc[0]) |
1.1.3. 예측
- 정의 : 머신러닝 모델을 사용하여 결측값을 예측
from sklearn.linear_model import LinearRegression
# 결측값이 있는 열과 없는 열 분리
df_with_na = df[df['column_with_na'].isnull()]
df_without_na = df[df['column_with_na'].notnull()]
# 회귀 모델 학습
model = LinearRegression()
model.fit(df_without_na[['feature1', 'feature2']], df_without_na['column_with_na'])
# 결측값 예측
predicted_values = model.predict(df_with_na[['feature1', 'feature2']])
# 예측된 값으로 결측값 대체
df.loc[df['column_with_na'].isnull(), 'column_with_na'] = predicted_values
결측 값이 있는 열과 없는 열 분리 | df_with_na = df[df['column_with_na'].isnull()] |
df_without_na = df[df['column_with_na'].notnull()] | |
회귀 모델 학습 | model = LinearRegression() |
model.fit(df_without_na[['feature1', 'feature2']], df_without_na['column_with_na']) | |
결측값 예측 | predicted_values = model.predict(df_with_na[['feature1', 'feature2']]) |
예측된 값으로 결측값 대체 | df.loc[df['column_with_na'].isnull(), 'column_with_na'] = predicted_values |
2. 이상값 처리
2.1. 이상치란?
- 정의
- 데이터셋에서 비정상적으로 큰 값이나 작은 값
- 이상치는 분석 결과에 큰 영향을 미칠 수 있으므로, 이를 적절히 처리하는 것이 중요
2.1.1. 이상치 확인 방법
자료를 분석 후 비율을 조정해야 해요
# 특정 열의 이상치 확인 (IQR 방법)
Q1 = df['column_name'].quantile(0.25)
Q3 = df['column_name'].quantile(0.75)
IQR = Q3 - Q1
# 이상치 범위 설정
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
# 이상치 확인
outliers = df[(df['column_name'] < lower_bound) | (df['column_name'] > upper_bound)]
print(outliers)
이상치 확인(IQR 방법) | Q1 = df['column_name'].quantile(0.25) |
Q3 = df['column_name'].quantile(0.75) | |
IQR = Q3 - Q1 | |
이상치 범위 설정 | lower_bound = Q1 - 1.5 * IQR |
upper_bound = Q3 + 1.5 * IQR | |
이상치 확인 | outliers = df[(df['column_name'] < lower_bound) | (df['column_name'] > upper_bound)] |
print(outliers) |
2.1.2. 이상치 처리 방법
2.1.2.1. 제거
- 정의 : 이상치를 데이터셋에서 제거
# 이상치 제거
df_no_outliers = df[(df['column_name'] >= lower_bound) & (df['column_name'] <= upper_bound)]
2.1.2.2. 대체
- 정의 : 이상치를 특정 값으로 대체
# 이상치를 평균값으로 대체
mean_value = df['column_name'].mean()
df['column_name'] = df['column_name'].apply(
lambda x: mean_value if x < lower_bound or x > upper_bound else x)
2.1.2.3. 변환
- 정의 : 이상치를 변환하여 데이터의 분포를 조정
3. 중복값 제거
# 중복된 행 확인
print(df.duplicated().sum())
# 중복된 행 제거
df_no_duplicates = df.drop_duplicates()
중복된 행 확인 | print(df.duplicated().sum()) |
중복된 행 제거 | = df.drop_duplicates() |
4. 데이터 타입 변환
- Pandas의 .astype() 메서드를 사용
4.1. 데이터 타입 변환의 필요성
- 잘못된 데이터 타입은 분석 결과에 영향을 미칠 수 있음
- 잘못된 데이터 타입은 모델 학습에 오류를 발생시킬 수 있음
4.1.1. 정수형
# 특정 열의 데이터 타입을 정수형으로 변환
df['column_name'] = df['column_name'].astype(int)
정수형 | = df['column_name'].astype(int) |
4.1.2. 문자열
# 특정 열의 데이터 타입을 문자열로 변환
df['column_name'] = df['column_name'].astype(str)
문자열 | = df['column_name'].astype(str) |
4.1.3. 부등 소수점
# 특정 열의 데이터 타입을 부동 소수점으로 변환
df['column_name'] = df['column_name'].astype(float)
부등 소수점 | = df['column_name'].astype(float) |
5. 인코딩
5.1. 인코딩이란?
- 정의
- 범주형 데이터를 수치형 데이터로 변환하는 과정
- 머신러닝 모델은 수치형 데이터를 입력으로 받기 때문에 범주형 데이터를 수치형으로 변환하는 것이 필요
5.2. 인코딩 방법
# 범주형 데이터를 더미 변수로 변환
df_encoded = pd.get_dummies(df, columns=['category_column'])
# 결과 출력
print(df_encoded.head())
Pandas의 get_dummies() 메서드를 사용
범주형 데이터를 더미 변수로 변환 | = pd.get_dummies(df, columns=['category_column']) |
6. 샘플링
6.1. 샘플링이란?
- 정의
- 데이터셋의 크기를 줄이거나 늘리는 과정
- 데이터셋의 대표성을 유지하면서 데이터의 크기를 조절하는 데 사용
6.2. 샘플링 방법
# 데이터셋에서 50% 샘플 추출
df_sampled = df.sample(frac=0.5)
# 데이터셋에서 100개의 샘플 추출
df_sampled_n = df.sample(n=100)
Pandas의 sample() 메서드를 사용
퍼센트 | = df.sample(frac=0.5) |
개수 | = df.sample(n=100) |
7. 특징 선택 및 추출
7.1. 특징 선택 및 추출이란?
- 정의
- 모델 성능을 높이기 위해 중요한 특징을 선택하거나 새로운 특징을 추출하는 과정
7.2. 특징 선택 방법
from sklearn.feature_selection import SelectKBest, f_classif
# 특징 선택 (상위 5개의 특징 선택)
selector = SelectKBest(score_func=f_classif, k=5)
X_new = selector.fit_transform(X, y)
# 선택된 특징의 인덱스
selected_features = selector.get_support(indices=True)
print(selected_features)
Pandas와 Scikit-learn을 사용하여 특징 선택을 수행
7.3. 특징 추출 방법
# 두 열의 곱을 새로운 특징으로 추가
df['new_feature'] = df['feature1'] * df['feature2']
# 두 열의 합을 새로운 특징으로 추가
df['new_feature_sum'] = df['feature1'] + df['feature2']
두 열의 곱 | = df['feature1'] * df['feature2'] |
두 열의 합 | = df['feature1'] + df['feature2'] |
'공부 > 머신러닝 공부' 카테고리의 다른 글
[머신러닝] 구성요소, 학습, 데이터 불러오기, 데이터 처리 (2) | 2024.12.20 |
---|