03-03) Data Transformation

slow_starter·2025년 7월 1일
0

모두의연구소-DS4기

목록 보기
24/30
post-thumbnail

01. 데이터 병합

  • merge의 경우 공통된 컬럼이 있으면 suffix를 자동 생성
  • join의 경우 공통된 컬럼이 있으면 suffix 수동 생성이 필요
  • pandas에서는 merge 함수를 사용하여 SQL처럼 데이터 결합 가능

02. 집계 및 그룹화, 피벗 테이블

  • head() : 위에서 5개 추출 (물론 head(n=3)처럼 개수 지정도 가능)
  • tail() : 아래에서 5개 추출
  • describe(): 기술통계 제공(평균, 표준편차, 최소, 최대값 등)
  • info(): 데이터프레임의 기본 정보
  • dtypes : 각 열의 데이터 타입 보여줌
  • outlier 처리 요령
    • z-score 이용하거나 IQR이용하여 outlier 제거
    • outlier 하한 : Q1 - 1.5*IQR (IQR = Q3-Q1 의미)
    • outlier 상한 : Q3 + 1.5*IQR (IQR = Q3-Q1 의미)
  • Aggregation 집계
    • groupby() : 데이터를 특정 기준으로 집계
    • std() 함수 : 표준편차 계산
    • agg() 함수: 다양한 집계 함수를 한 번에 적용
  • Pivot Table
    • 데이터 프레임 재구성하여, 엑셀 피봇 테이블처럼 사용

03. 로그(log), 원-핫 인코딩(one-hot encoding)

  • Log Transformation : 데이터 정규성 높여주기 위해 쓰는 변환 방식중 하나
  • get_dummies : 범주형 컬럼을 0,1로 이뤄진 컬럼들로 표현하는 함수

04. 스케일링(scaling)

  • StandardScaler() : 평균0, 표준편차 1로 표준화
    • 아웃라이어 없고, 변수 분포가 정규분포 따른다고 판단될 때
    • 리니어 리그레이션(연속적인 값 예측), 로지스틱 회귀(분류 문제에 적합한 확률 결과 제공), 서포트 벡터 머신(이진 또는 다중 클래스 분류, 회귀)에 사용
  • RobustScaler() : 중간값, IQR 활용하여 스케일링
    • 아웃라이어가 많은 데이터에 적합
  • MinMaxScaler() : 데이터의 범위 0과 1사이로 제한
    • 주로 딥러닝 모델에서 사용

05. 주성분 분석 복습(PCA)

  • PCA (Principal Component Analysis) : SVD(Singular-Value-Decomposition) 통해서, 데이터의 특성을 최대한 유지하면서 차원 축소를 하는 기법
  • explainedvariance_ratio : 주성분 분석으로 축소된 차원이 전체 분산을 어떤 비율로 설명하는지 나타내는 지표

06. 퀴즈

  • Step1 데이터 합치기
import pandas as pd
import numpy as np
import seaborn as sns
salary_1 = pd.read_csv('data/salary_1.csv')
salary_2 = pd.read_csv('data/salary_2.csv')
# salary_1 과 salary_2를 위/아래로 붙이고, salary_df 이름으로 저장하기
# [your_code]
salary_df = pd.concat([salary_1, salary_2])
salary_df.head()
# salary_df 결측치 확인
salary_df.isna().mean()
# 결측치 행 제거하기
salary_df = salary_df.dropna()
  • Gender별 Salary의 평균(mean)을 구해 gender_salary 로 저장
gender_salary = salary_df.groupby('Gender')['Salary의'].mean()
  • gender_salary의 인덱스(Gender) 재정렬
gender_salary = gender_salary.reset_index()
  • Gender를 기준으로 하여, salary_df에 gender_salary를 붙이기(left join)
salary_df = salary_df.merge(gender_salary,on='Gender',how='left')
  • 컬럼이름 변경
# 컬럼이름 변경: "Salary_x"를 "Salary"로, "Salary_y"를 "Gender_salary"로 변경하여 저장
salary_df = salary_df.rename({'Salary_x': 'Salary', 'Salary_y': 'Gender_salary'}, axis = 1)#[[your code]]
  • 피벗 테이블 만들기
# 다음 기준으로 Pivot Table 만들기 -> 행: Country, 열: Gender, 값: Years of Experience
#[[your code]]
pd.pivot_table(salary_df, index = 'Country', columns = 'Gender', values = 'Years of Experience')
  • Step2 데이터 스케일 변환
# Salary 변수에 로그를 취하여 'Salary_log'로 저장하기
salary_df['Salary_log'] = np.log(salary_df['Salary'])
# 변수 중 Data Type이 object인 변수들 제거하고 저장하기
#[[your code]]
# salary_df.info() # Gender, Job Title, Country,Race
salary_df.drop(['Gender','Job Title','Country','Race'],axis=1,inplace=True)
# RobustScaler 패키지 불러오기
#[[your code]]
from sklearn.preprocessing import RobustScaler
rs = RobustScaler()
rs.fit(salary_df)
# 학습된 rs로 salary_df를 변환하여 rs_df로 저장하기
rs_df = rs.transform(salary_df) #[[your code]]
# rs_df를 Pandas DataFrame으로 변경하여 저장 (컬럼 이름도 기존 컬럼이름으로 채워넣기)
rs_df = pd.DataFrame(rs.transform(salary_df),columns=salary_df.columns) #[[your code]]
# MinMaxScaler 패키지 불러오기
#[[your code]]
from sklearn.preprocessing import MinMaxScaler
mm = MinMaxScaler()
# 한 줄의 코드로 salary_df를 mm으로 학습하고 변형하여 mm_df 로 저장하기
mm_df = mm.fit_transform(salary_df) #[[your code]]
# mm_df를 Pandas DataFrame으로 변경하여 저장 (컬럼 이름도 기존 컬럼이름으로 채워넣기)
mm_df = pd.DataFrame(mm_df, columns = salary_df.columns)  #[[your code]]
  • Step3 PCA(주성분 분석)
from sklearn.decomposition import PCA
# PCA를 사용하기 위해 pca 이름으로 저장: 2개의 주성분을 뽑을 수 있도록 설정
pca = PCA(2) #[[your code]]
# pca로 salary_df를 학습 및 변환하여 pca_df로 저장
pca_df = pca.fit_transform(salary_df)  #[[your code]]
# pca_df를 Pandas DataFrame으로 변경하고, 각 컬럼이름을 PC1, PC2로 설정하여 pca_df로 저장
pca_df = pd.DataFrame(pca_df,columns = ['PC1','PC2']) #[[your code]]
# 추출된 두개의 주성분으로 기존 데이터 정보의 얼마만큼을 설명할 수 있는지 확인하는 코드 작성
#[[your code]]
(pca.explained_variance_ratio_).sum()
profile
2025화이팅!

0개의 댓글