데이터를 분석에 사용할때 성능이? 더 좋게 나오도록 데이터를 수정하거나 형태를 변경하는 작업
data preprocessing
데이터전처리의 종류
- 데이터 클리닝 -> 결측치 처리, 틀린값 처리
- 스케일링 - > 여러변수값의 범위를 동등하나 조건으로 맞추는것 : 표준스케일링 , min -max 스케일링
- 이상치 처리 - > 이상치 탐지 및 제거
- 데이터 변환 - 로그 변환, 카테고리 인코딩 등
데이터 클리닝
결측치 처리
값이 비어있는 것을 처리하는 것 ( 파이썬에서는 빈 값이 nan으로 표시 된다 : not a number)
결측치를 철리하는 방법은 크게 세가지가 있다.
-> 결측치가 표함된 샘플(행)을 버린다.
-> 결측치를 적절한 값으로 대체 한다.
-> 결측치 처리를 다음 분석 단계로 넘긴다. 즉, 결측치를 그대로 둔다.
틀린값 처리
틀린값을 처리하는 방법도 결측치를 처리하는 방법과 같이 세가지이다.
- 틀린값이 포함된 샘플(행)을 버린다.
틀린값을 적정한 값으로 대체한다.
틀린값 처리를 다음 분석 단계로 넘긴다. 즉. 틀린값을 그대로 둔다.
import numpy as np #넘파이.,
import pandas as pd #판다스
import matplotlib.pyplot as plt #그림그리기
%matplotlib inline # 그림을 현재 화면에 보여주는것
%config InlineBackend.figure_format = 'retina' #맥일경우 고생상도로 화면 표시
# matplotlib를 이용하여 다양한 시각화 함수를 제공하는 라이브러리 seaborn
import seaborn as sns #시각화 라이브러리
n_samples = 1000 #그냥 샘플 1000개 하겠다는 말
height = 4*np.random.randn(n_samples).round(2) + 170 #넘파이 안에 랜덤 함수. randn(n_samples) = 정규분포를 따르는 n_samples 만큼의 랜덤 변수를 생성
# round(2) 소수점 2자리까지. 정규분포의 표준편차는 1이고 , 여기서 *4를 하는것은 표준편차를 4로 만듬,
weight = 5*np.random.randn(n_samples).round(2) + 65
df_raw = pd.DataFrame({"height": height, "weight": weight}) # 딕셔너리 형태로 만듬.
df_raw[:5] #df_raw 의 데이터 표시 0부터 4까지
# 사본 사용 (원본 백업)
df = df_raw.copy() #데이터 복사
# 샘플의 확률 분포 근사 그래프 보기
sns.distplot(df.height.values) #seaborn 라이브러리에서 데이터표현
# 임의의 값 하나를 결측치로 변경
df['weight'][2] = np.nan #nan 값을 대입
df[:5] # 샘플 5개만 보여주기
df.isnull() # df라는 딕셔너리에서 Null, Nan 값이 있는지 검색
df.isnull().sum() #False는 1, True는 0으로환산되어 null 값이 몇개 있는지 확인할수 있음=
# 결측치가 있는 행(샘플) 삭제하기
df2 = df.dropna() #결측치 Null 삭제하기
print(df2.shape) # df2모양 출력
df2[:5]
# 결측치를 다른 값으로 대체하기 (아래는 몸무게 컬럼의 평균치로 대체한 예)
df3 = df.fillna(df['weight'].mean()) #fillna 결측치를 채움. weight 의 평균값으로
print(df3.shape) #df3의 모양
print(df['weight'].mean()) #df3d의 weight 의 평균
df3[:5]
# 결측치를 0으로 대체하는 경우
df.fillna(0) # 0으로 채우기
# 결측치를 바로 이전 값으로 대체하는 경우 (forward fill)
df.fillna(method="ffill")[:5] #결측치를 바로 이전 값으로 대체하는 겨웅 forward fill
#바로 다음값으로 대입하는 경우 bfill