목차

  1. 결측값 처리
    1. 결측값 처리 방법
      1. 제거
      2. 대체
        1. 0으로 대체
        2. 각 열의 평균값으로 대체
        3. 각 열의 중간값으로 대체
        4. 각 열의 최빈값으로 대체
      3. 예측
  2. 이상값 처리
    1. 이상치란?
      1. 이상치 확인 방법
      2. 이상치 처리 방법
        1. 제거
        2. 대체
        3. 변환
  3. 중복값 제거
  4. 데이터 타입 변환
    1. 데이터 타입 변환의 필요성
      1. 정수형
      2. 문자열
      3. 부등 소수점
  5. 인코딩
    1. 인코딩이란? 
    2. 인코딩 방법
  6. 샘플링
    1. 샘플링이란? 
    2. 샘플링 방법
  7. 특징 선택 및 추출
    1. 특징 선택 및 추출이란?
    2. 특징 선택 방법
    3. 특징 추출 방법

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())

Pandasget_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)

Pandassample() 메서드를 사용

퍼센트 = 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)

PandasScikit-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']

 

+ Recent posts