반응형
- 데이터 분석에 앞서, 우리는 여러 경로로 수집한 데이터를 변환하는 과정이 필요합니다.
- 우리가 수집한 데이터는 말 그래도 raw data이기 때문에 잘 정리되어 있는 상태가 아닙니다. 전처리 과정이 필요하고, 전처리 후에는 해석을 위해 적절한 형태로 변환하여야 합니다.
- 우리는 적절하게 데이터를 변환하여 수집한 자료를 누구나 보기 쉽게 해석할 수 있도록 할 수 있습니다.
- 데이터 변환의 목적은 다음과 같이 제시할 수 있습니다.
- 데이터의 분포를 대칭적으로 만든다.(정규분포의 모양)
- 산포를 비슷하게 한다.
- 변수 간의 관계를 단순화한다.
- 데이터 변환 유형은 다음과 같습니다.
- 제곱근 변환
- 제곱 변환
- 로그 변환
- 지수 변환
- 그래프로 확인해볼까요?
- ChatGPT의 도움으로 우선 정규분포 모양의 그래프를 그립니다.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
# 랜덤한 정규분포 데이터 생성
mean = 0 # 평균
std_dev = 1 # 표준 편차
num_samples = 1000 # 샘플 개수
data = np.random.normal(mean, std_dev, num_samples)
# 데이터를 데이터프레임으로 변환
df = pd.DataFrame(data, columns=['values'])
# 히스토그램 그리기
plt.hist(df['values'], bins=20, density=True, alpha=0.3, color='blue', edgecolor='black')
# density=True로 설정하여 정규화된 히스토그램을 그립니다.
plt.title('Histogram of Normal Distribution')
plt.xlabel('Values')
plt.ylabel('Density')
plt.grid(True)
plt.show()

- 제곱 변환, 지수 변환 - 봉우리를 왼쪽으로 치우치게 합니다. 오른쪽 꼬리가 길어집니다.
- 제곱근 변환, 로그 변환 - 봉우리를 오른쪽으로 치우치게 합니다. 왼쪽 꼬리가 길어집니다.
- 제곱 변환, 제곱근 변환보다는 지수 변환, 로그 변환의 치우침의 정도가 더 큽니다.
- 분포의 왼쪽 꼬리가 길다면 제곱 변환이나 지수 변환을 하여 대칭형이 될 수 있도록 합니다.
- 분포의 오른쪽 꼬리가 길다면 로그 변환이나 제곱근 변환을 하여 대칭형이 될 수 있도록 합니다.
- 한번에 그래프로 확인하겠습니다.
fig, ax = plt.subplots(nrows = 2, ncols = 2, figsize = (15, 10))
ax[0, 0].hist(df['squared'], bins=20, edgecolor='black')
ax[0, 1].hist(df['sqrt'], bins=20, edgecolor='black')
ax[1, 0].hist(df['log'], bins=20, edgecolor='black')
ax[1, 1].hist(df['exp'], bins=20, edgecolor='black')
ax[0, 0].legend()
ax[0, 0].set_title('Histogram of Squared Values')
ax[0, 1].set_title('Histogram of sqrt Values')
ax[1, 0].set_title('Histogram of log Values')
ax[1, 1].set_title('Histogram of exp Values')
ax[0, 0].set_xlabel('Squared Values')
ax[0, 1].set_xlabel('sqrt Values')
ax[1, 0].set_xlabel('log Values')
ax[1, 1].set_xlabel('exp Values')
ax[0, 0].set_ylabel('Frequency')
ax[0, 1].set_ylabel('Frequency')
ax[1, 0].set_ylabel('Frequency')
ax[1, 1].set_ylabel('Frequency')
plt.show()

'Python > Pandas, Matplotlib, Seaborn' 카테고리의 다른 글
| [Pandas]_Pandas library basic (4) 날짜 데이터 / shift (0) | 2023.08.09 |
|---|---|
| [Pandas]_Pandas library basic (3) 결측치를 어떻게 처리할까? 데이터 전처리 (0) | 2023.08.09 |
| [Pandas]_Pandas library basic (2) loc & iloc 의 차이는? (0) | 2023.08.09 |
| [Pandas]_Pandas library basic (1) I/O, 행과 열 추출 (0) | 2023.08.09 |