미식가의 개발 일기

[머신러닝] 데이터 변환 및 시각화(with 캐글) 본문

ML, DL

[머신러닝] 데이터 변환 및 시각화(with 캐글)

대체불가 핫걸 2024. 7. 14. 23:21

캐글 -> Datasets -> Heghts and Weights 검색 -> csv 다운로드 후 실습 진행

 

데이터 표준화

데이터 표준화란?
  •    데이터의 특성들을 평균이 0이고 분산이 1이 되도록 조정하는 작업

 

데이터 표준화를 왜 해야할까?

 

"특성 간의 단위 차이 해소를 위해서이다."

-> 각 특성이 다른 단위를 가진다면 큰 값을 가지는 특성이 더 영향을 미치게 된다. 따라서 표준화를 통해 모든 특성이 동일한 범위를 가지게 하여 균형 있는 학습을 할 수 있다.

 

데이터 불러오기
import pandas as pd
data = pd.read_csv("datas/HeightWeight.csv")

display(data.head())
display(len(data))

25000개의 키, 몸무게 데이터

 

데이터 분포 확인
import matplotlib.pyplot as plt
import seaborn as sns

plt.rcParams['axes.unicode_minus'] = False  # minus 부호 출력 설정

plt.figure(figsize=(6, 3))
# kde=True: 곡선 추가
sns.histplot(data['Height(Inches)'], kde=True, label='키', color="Skyblue")
sns.histplot(data['Weight(Pounds)'], kde=True, label='몸무게', color="Salmon")

plt.legend()
plt.show()

 

Standard Scaler

Standard Scaler 객체 생성
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()

 

Index 컬럼은 필요 없으므로 제거
data = data.drop(['Index'], axis=1)

 

표준화 후 데이터 프레임으로 변환
scaler.fit(data) # 데이터의 평균과 표준편차 계산
scaler_data = scaler.transform(data) # 평균을 빼고 표준편차로 나눠 표준화

scaler_data = pd.DataFrame(scaler_data, columns=[['키', '몸무게']])
scaler_data

표준화된 데이터

 

표준화 후 데이터 분포
  • 단일 색상으로 사용할 땐 color, 범주형 변수의 색을 지정할 땐 palette로 색 지정
import matplotlib.pyplot as plt
import seaborn as sns

# Figure 객체 생성
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(12, 6))

sns.histplot(scaler_data['키'], kde=True, palette="Blues", ax=ax1)
ax1.set_title('키')

sns.histplot(scaler_data['몸무게'], kde=True, palette="Reds", ax=ax2)
ax2.set_title('몸무게')

plt.show()

유사한 스케일을 가지는 데이터로 변환

 

데이터 정규화

데이터 정규화란?
  • 변수를 일정한 범위로 조정하는 방법

 

데이터 정규화를 왜 해야할까?

 

"데이터 값을 조정하고 분산을 줄이기 위해서이다. "

-> 데이터 값이나 분산이 너무 크거나 작으면 모델의 학습에 부정적인 영향을 미칠 수 있다.

 

MinMaxScaler

  • 수치형 데이터 값을 0과 1 사이의 값으로 변환

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
scaler.fit(data[data.columns[1:]])
data[data.columns[1:]] = scaler.transform(data[data.columns[1:]])
data.head()

 

로그 변환

로그 변환이란?
  •    로그 계산으로 데이터의 왜곡된 분포를 개선하는 기법이다.

 

로그 변환을 왜 해야할까?

 

"극단값의 영향을 줄이기 위해서이다."

-> 극단값이나 이상치는 분석 결과를 왜곡시킬 수 있으므로 조정이 필요하다.

 

원본 데이터, 로그 데이터 생성
import numpy as np

data = [1, 10, 100, 1000, 10000, 100000, 1000000, 10000000]

log_data = np.log(data)

 

로그 변환 전, 후 비교
import matplotlib.pyplot as plt
import seaborn as sns

fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(12, 6))

sns.histplot(data, kde=True, color="Skyblue", ax=ax1)
ax1.set_title('로그 변환 전')

sns.histplot(log_data, kde=True, color="Salmon", ax=ax2)
ax2.set_title('로그 변환 후')

plt.show()

한쪽으로 치우친 분포가 정규 분포 형태로 개선되었다.

반응형