Python/Pandas

[Pandas] 데이터 정규화 와 표준화

죵욜이 2024. 12. 26. 06:53

데이터 정규화

  • 데이터의 범위를 0 과 1 사이로 변환하는 과정
  • 서로 다른 범위를 가진 데이터를 동일한 스케일로 맞추어 비교하기 쉽게 만듬

 

Min - Max 정규화

import pandas as pd
from sklearn.preprocessing import MinMaxScaler

# 예시 데이터프레임 생성
data = {
    '특성1': [10, 20, 30, 40, 50],
    '특성2': [1, 2, 3, 4, 5]
}
df = pd.DataFrame(data)

# Min-Max 정규화
scaler = MinMaxScaler()
normalized_df = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
print(normalized_df)
   특성1  특성2
0   0.0   0.0
1   0.25  0.25
2   0.5   0.5
3   0.75  0.75
4   1.0   1.0

데이터 표준화

  • 데이터를 평균이 0, 표준편차가 1 이 되도록 변환하는 과정
  • 정규분포를 가정한 많은 분석 기법에 유리

 

Z-Score 표준화 ( StandardScaler )

from sklearn.preprocessing import StandardScaler

# Z-점수 표준화
scaler = StandardScaler()
standardized_df = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
print(standardized_df)
      특성1      특성2
0 -1.414214 -1.414214
1 -0.707107 -0.707107
2  0.000000  0.000000
3  0.707107  0.707107
4  1.414214  1.414214

비선형 변환

  • 데이터의 비정상적인 분포를 정규 분포에 가깝게 만들기 위해 사용
  • 로그변환
  • 제곱근 변환
  • 박스-콕스 변환
  • 등이 있다

로그( Log ) 변환

  • 양의 데이터 에서 주로 사용
  • 데이터의 분포를 좁히는데 유용
  • 지수분포를 가진 데이터를 다룰때 효과적
import numpy as np

# 로그 변환
df['특성1_log'] = np.log(df['특성1'])
print(df)
   특성1  특성2  특성1_log
0    10     1   2.302585
1    20     2   2.995732
2    30     3   3.401197
3    40     4   3.688879
4    50     5   3.912023

제곱근( Square Root ) 변환

  • 데이터의 분포를 평탄하게 만들기 위한 또 다른 방법
  • 포아송 분포를 가진 데이터에서 사용
# 제곱근 변환
df['특성1_sqrt'] = np.sqrt(df['특성1'])
print(df)
   특성1  특성2  특성1_log  특성1_sqrt
0    10     1   2.302585    3.162278
1    20     2   2.995732    4.472136
2    30     3   3.401197    5.477226
3    40     4   3.688879    6.324555
4    50     5   3.912023    7.071068

박스-콕스 ( Box-Cox ) 변환

  • 다양한 형태의 데이터 분포를 정규분포에 가깝게 변환하기 위해 사용
  • 양수 데이터 에서만 사용 가능
from scipy.stats import boxcox

# 박스-콕스 변환
df['특성1_boxcox'], _ = boxcox(df['특성1'])
print(df)
   특성1  특성2  특성1_log  특성1_sqrt  특성1_boxcox
0    10     1   2.302585    3.162278      2.850350
1    20     2   2.995732    4.472136      3.992679
2    30     3   3.401197    5.477226      4.872105
3    40     4   3.688879    6.324555      5.609646
4    50     5   3.912023    7.071068      6.245548

'Python > Pandas' 카테고리의 다른 글

[Pandas] 인코딩 ( Encoding )  (3) 2024.12.26
[Pandas] 이상치 탐지와 처리  (1) 2024.12.26
[Pandas] 결측치 탐지와 처리  (1) 2024.12.26
[Pandas] 피벗 테이블 - pivot_table()  (4) 2024.12.16
[Pandas] 그룹화 및 집계함수  (1) 2024.12.16