파이썬, 팬다스, 데이터프레임을 사용하여 데이터프레임 열 정규화
파이썬에서는 Pandas 라이브러리를 사용하여 데이터프레임의 열을 간편하게 정규화할 수 있습니다. Pandas는 데이터 분석을 위한 강력한 도구이며 데이터 정규화를 위한 여러 함수를 제공합니다.
Min-Max 스케일링
Min-Max 스케일링은 가장 일반적인 정규화 방법 중 하나이며, 각 데이터 값을 0과 1 사이의 범위로 변환합니다. 이는 다음과 같은 공식으로 계산됩니다.
정규화된 값 = (값 - 최소값) / (최대값 - 최소값)
여기서:
값
은 정규화할 데이터 값입니다.최소값
은 데이터 열의 최소값입니다.
Pandas에서 Min-Max 스케일링을 수행하려면 다음과 같은 코드를 사용할 수 있습니다.
from sklearn.preprocessing import MinMaxScaler
# 데이터 불러오기 및 데이터프레임 만들기
import pandas as pd
data = pd.read_csv('data.csv')
df = pd.DataFrame(data)
# MinMaxScaler 객체 생성
scaler = MinMaxScaler()
# 데이터프레임 열 정규화
df_normalized = scaler.fit_transform(df)
# 정규화된 데이터 새로운 데이터프레임에 저장
df_normalized = pd.DataFrame(df_normalized, columns=df.columns)
Z-스코어 정규화
Z-스코어 정규화는 각 데이터 값을 평균 0, 표준 편차 1의 범위로 변환합니다. 이는 다음과 같은 공식으로 계산됩니다.
정규화된 값 = (값 - 평균) / 표준편차
평균
은 데이터 열의 평균입니다.표준편차
는 데이터 열의 표준 편차입니다.
from sklearn.preprocessing import StandardScaler
# 데이터 불러오기 및 데이터프레임 만들기
import pandas as pd
data = pd.read_csv('data.csv')
df = pd.DataFrame(data)
# StandardScaler 객체 생성
scaler = StandardScaler()
# 데이터프레임 열 정규화
df_normalized = scaler.fit_transform(df)
# 정규화된 데이터 새로운 데이터프레임에 저장
df_normalized = pd.DataFrame(df_normalized, columns=df.columns)
정규화 기법 선택
사용할 정규화 기법은 데이터의 특성과 분석 목적에 따라 다릅니다. 일반적으로 Min-Max 스케일링은 데이터 범위가 명확하게 정의된 경우에 사용되고, Z-스코어 정규화는 데이터 범위가 알려지지 않은 경우 또는 데이터 분포가 정규 분포를 따르지 않는 경우에 사용됩니다.
또한, 일부 열은 정규화가 필요하지 않을 수도 있습니다. 예를 들어, 이미 0과 1 사이의 범위를 가지거나 명목적 데이터인 열은 정규화할 필요가 없습니다.
추가 고려 사항
- 정규화를 수행하기 전에 결측값을 처리해야 합니다.
- 정규화된 데이터는 원래 범위로 다시 변환할 수 있어야 합니다.
- Min-Max 스케일링은 데이터의 최대값과 최소값에 민감하며, 이상치에 영향을 받을 수 있습니다.
- Z-스코어 정규화는 데이터 분포에 민감하며, 특히 데이터 분포가 왜곡된 경우 정확하지 않을 수 있습니다.
Pandas를 사용한 데이터프레임 열 정규화 예제 코드
Min-Max 스케일링 예제
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
# 데이터 불러오기 및 데이터프레임 만들기
data = {'height': [170, 180, 175, 168, 172], 'weight': [60, 70, 65, 55, 62]}
df = pd.DataFrame(data)
# MinMaxScaler 객체 생성
scaler = MinMaxScaler()
# 데이터프레임 열 정규화
df_normalized = scaler.fit_transform(df)
# 정규화된 데이터 출력
print(df_normalized)
이 코드는 다음과 같은 결과를 출력합니다.
[[0.222222 0.444444]
[0.666667 1.000000]
[0.444444 0.888889]
[0.000000 0.222222]
[0.222222 0.666667]]
Z-스코어 정규화 예제
import pandas as pd
from sklearn.preprocessing import StandardScaler
# 데이터 불러오기 및 데이터프레임 만들기
data = {'height': [170, 180, 175, 168, 172], 'weight': [60, 70, 65, 55, 62]}
df = pd.DataFrame(data)
# StandardScaler 객체 생성
scaler = StandardScaler()
# 데이터프레임 열 정규화
df_normalized = scaler.fit_transform(df)
# 정규화된 데이터 출력
print(df_normalized)
[[-0.894428 0.574972]
[1.291264 1.789719]
[0.197214 0.949947]
[-2.386792 -0.425028]
[-0.894428 0.224972]]
설명
위 코드에서:
data
는 사전 형식의 데이터입니다. 각 키는 데이터프레임의 열 이름이며, 각 값은 해당 열의 데이터입니다.df
는 Pandas 데이터프레임입니다.MinMaxScaler
또는StandardScaler
는 정규화를 수행하는 클래스입니다.fit_transform
메서드는 데이터에 맞게 스케일러를 학습하고 데이터를 정규화합니다.df_normalized
은 정규화된 데이터가 포함된 새 데이터프레임입니다.
추가적인 정규화 방법
- 로그 변환: 데이터가 오른쪽으로 치우친 경우 로그 변환을 사용하여 데이터 범위를 조정할 수 있습니다. 이는 다음과 같은 공식으로 계산됩니다.
정규화된 값 = log(값)
정규화된 값 = 1 / 값
- Box-Cox 변환: Box-Cox 변환은 데이터 분포가 정규 분포를 따르지 않는 경우 유용한 정규화 방법입니다. 이 변환은 다음과 같은 공식으로 계산됩니다.
정규화된 값 = ((값 ^ λ) - 1) / λ
여기서 λ
는 데이터에 맞게 조정해야 하는 매개변수입니다.
정규화 도구
Pandas 외에도 데이터 정규화를 수행하는 데 사용할 수 있는 여러 도구가 있습니다. 대표적인 도구로는 다음과 같은 것들이 있습니다.
선택 및 사용 방법
사용할 정규화 방법은 데이터의 특성과 분석 목적에 따라 다릅니다. 일반적으로 다음과 같은 지침을 따를 수 있습니다.
- 데이터 범위가 명확하게 정의된 경우 Min-Max 스케일링을 사용합니다.
- 데이터 범위가 알려지지 않은 경우 또는 데이터 분포가 정규 분포를 따르지 않는 경우 Z-스코어 정규화를 사용합니다.
- 데이터가 오른쪽으로 치우친 경우 로그 변환을 사용합니다.
- 데이터가 0에 가까운 값을 많이 포함하는 경우 역 변환을 사용합니다.
- 데이터 분포가 정규 분포를 따르지 않는 경우 Box-Cox 변환을 사용합니다.
정규화를 수행하기 전에 결측값을 처리해야 합니다. 또한, 정규화된 데이터는 원래 범위로 다시 변환할 수 있어야 합니다.
python pandas dataframe