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. 퀴즈
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_df = pd.concat([salary_1, salary_2])
salary_df.head()
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_df = salary_df.rename({'Salary_x': 'Salary', 'Salary_y': 'Gender_salary'}, axis = 1)
pd.pivot_table(salary_df, index = 'Country', columns = 'Gender', values = 'Years of Experience')
salary_df['Salary_log'] = np.log(salary_df['Salary'])
salary_df.drop(['Gender','Job Title','Country','Race'],axis=1,inplace=True)
from sklearn.preprocessing import RobustScaler
rs = RobustScaler()
rs.fit(salary_df)
rs_df = rs.transform(salary_df)
rs_df = pd.DataFrame(rs.transform(salary_df),columns=salary_df.columns)
from sklearn.preprocessing import MinMaxScaler
mm = MinMaxScaler()
mm_df = mm.fit_transform(salary_df)
mm_df = pd.DataFrame(mm_df, columns = salary_df.columns)
from sklearn.decomposition import PCA
pca = PCA(2)
pca_df = pca.fit_transform(salary_df)
pca_df = pd.DataFrame(pca_df,columns = ['PC1','PC2'])
(pca.explained_variance_ratio_).sum()