본문 바로가기

빅데이터분석기사_실기/제1유형: 데이터 전처리

데이터 변환: 정규분포 변환

왜도(skewness)

  • 왜도는 분포의 대칭 척도
  • 왜도가 0이 아닌 경우 분포가 한 쪽으로 치우쳐 있음 

[왜도에 따른 데이터 분포 형태]

양수(+) 왜도: 왼쪽으로 치우침 ( 평균 > 중앙값 > 최빈값)

왜도가  0: 좌우 대칭 (평균 = 중앙값 = 최빈값)

음수(-) 왜도: 오른쪽으로 치우침 ( 평균 < 중앙값 < 최빈값)


정규분포 변환 실습

import pandas as pd

file_path = 'https://raw.githubusercontent.com/YoungjinBD/dataset/main/USJudgeRatings.csv'
df = pd.read_csv(file_path)

df.head()

왜도 계산: scipy 패키지의 skew() 함수 사용

import scipy.stats as ss

print(ss.skew(df["CONT"]))
print(ss.skew(df["PHYS"]))

결과

  • CONT 변수의 데이터는 약 1.086으로 양의 왜도 (Positive Skew, 왼쪽으로 치우침: 최빈 < 중앙 < 평균)를 가짐
  • PHYS 변수의 데이터는 약 -1.558로 음의 왜도 (Negative Skew, 오른쪽으로 치우침: 최빈 > 중앙 > 평균)를 가짐

**왜도에 따른 변수 변환식**

왜도 제곱근 변환 로그 변환 역수 변환
양수(Positive Skew) sqrt(x)  log(x)
 log10(x)
1 / x
음수(Negative Skew) sqrt(max(x+1) - x)  log(max(x+1) - x)
 log10(max(x+1) - x)
1 / (max(x+1) - x)

log 변환

import numpy as np

df["CONT"] = np.log(df["CONT"])
df["PHYS"] = np.log(np.max(df["PHYS"] + 1) - df["PHYS"])

 

변환 후 왜도 확인

print(ss.skew(df["CONT"]))
print(ss.skew(df["PHYS"]))

결과(log10변환과 동일)