Python에서 데이터를 변환하는 방법(로그, 제곱근, 세제곱근)


많은 통계 테스트에서는 데이터 세트가 정규 분포를 따른다고 가정합니다. 그러나 실제로는 그렇지 않은 경우가 많습니다.

이 문제를 해결하는 한 가지 방법은 다음 세 가지 변환 중 하나를 사용하여 데이터 세트의 값 분포를 변환하는 것입니다.

1. 로그 변환: 응답 변수를 y에서 log(y) 로 변환합니다.

2. 제곱근 변환: 응답 변수를 y에서 √y 로 변환합니다.

3. 세제곱근 변환: 응답 변수를 y에서 y 1/3 으로 변환합니다.

이러한 변환을 수행함으로써 데이터세트는 일반적으로 보다 정규 분포를 띄게 됩니다.

다음 예제에서는 Python에서 이러한 변환을 수행하는 방법을 보여줍니다.

Python의 로그 변환

다음 코드는 변수에 대해 로그 변환을 수행하고 병렬 플롯을 생성하여 데이터의 원래 분포와 로그 변환된 분포를 표시하는 방법을 보여줍니다.

 import numpy as np
import matplotlib. pyplot as plt

#make this example reproducible
n.p. random . seeds (0)

#create beta distributed random variable with 200 values
data = np. random . beta (a= 4 , b= 15 , size= 300 )

#create log-transformed data
data_log = np. log (data)

#define grid of plots
fig, axs = plt. subplots (nrows= 1 , ncols= 2 )

#create histograms
axs[0]. hist (data, edgecolor=' black ')
axs[1]. hist (data_log, edgecolor=' black ')

#add title to each histogram
axs[0]. set_title (' Original Data ')
axs[1].set_title(' Log-Transformed Data ')

로그 변환된 분포가 원래 분포보다 더 정규 분포를 따르는지 확인하세요.

여전히 완벽한 “종 모양”은 아니지만 원래 분포보다 정규 분포에 더 가깝습니다.

Python의 제곱근 변환

다음 코드는 변수에 대해 제곱근 변환을 수행하고 병렬 플롯을 생성하여 원래 분포와 데이터의 제곱근 변환 분포를 표시하는 방법을 보여줍니다.

 import numpy as np
import matplotlib. pyplot as plt

#make this example reproducible
n.p. random . seeds (0)

#create beta distributed random variable with 200 values
data = np. random . beta (a= 1 , b= 5 , size= 300 )

#create log-transformed data
data_log = np. sqrt (data)

#define grid of plots
fig, axs = plt. subplots (nrows= 1 , ncols= 2 )

#create histograms
axs[0]. hist (data, edgecolor=' black ')
axs[1]. hist (data_log, edgecolor=' black ')

#add title to each histogram
axs[0]. set_title (' Original Data ')
axs[1].set_title(' Square Root Transformed Data ') 

제곱근으로 변환된 데이터가 원래 데이터보다 훨씬 더 정규 분포를 따르는지 확인하세요.

Python의 큐브 루트 변환

다음 코드는 변수에 대해 큐브 루트 변환을 수행하고 병렬 플롯을 생성하여 원래 분포와 데이터의 큐브 루트 변환 분포를 표시하는 방법을 보여줍니다.

 import numpy as np
import matplotlib. pyplot as plt

#make this example reproducible
n.p. random . seeds (0)

#create beta distributed random variable with 200 values
data = np. random . beta (a= 1 , b= 5 , size= 300 )

#create log-transformed data
data_log = np. cbrt (data)

#define grid of plots
fig, axs = plt. subplots (nrows= 1 , ncols= 2 )

#create histograms
axs[0]. hist (data, edgecolor=' black ')
axs[1]. hist (data_log, edgecolor=' black ')

#add title to each histogram
axs[0]. set_title (' Original Data ')
axs[1].set_title(' Cube Root Transformed Data ') 

큐브 루트로 변환된 데이터가 원본 데이터보다 훨씬 더 정규 분포를 이루고 있음을 알 수 있습니다.

추가 리소스

Python에서 Z 점수를 계산하는 방법
Python에서 데이터를 정규화하는 방법
통계에서 정규성 가정은 무엇입니까?

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다