AIFFEL 2022.01.03

Jinoung Kim·2022년 1월 3일

Node 10

결측치(Missing Data)

  • 결측치가 있는 데이터를 제거한다.
  • 결측치를 어떤 값으로 대체한다 -> 데이터의 특성에 따라 판단
    1. 평균 또는 중앙값으로 대체
    2. 다른 데이터를 이용해 머신러닝 모델로 예측값을 만들어 대체
    3. 시계열 특성을 가진 데이터는 전후 데이터의 평균으로 대체
  • 결측치 확인
    data[data.isnull().any(axis=1)]
  • 결측치 삭제
    data.dropna(how='all', subset=['col1', 'col2', 'col3'], inplace=True)
  • 결측치 수정
    data.loc[index, 'col1'] = (data.loc[index-1, 'col1'] + data.loc[index+1, 'col1']) / 2
    data.loc[index, 'col2'] = data[data['col1'] == 'value'].col2.mean()

중복된 데이터

  • 중복된 데이터 확인
    data.duplicated()
  • 중복된 데이터 삭제
    data.drop_duplicates(inplace=True)

이상치(Outlier)

  • 대부분의 데이터 값의 범위에서 극단적으로 크거나 작은 값
  • 이상치 판단 방법
    1. z-score : 평균과 표준편차를 이용, (x-평균)/표준편차
    2. IQR(Interquartile range) : 백분위수를 이용
      IQR = Q3 - Q1
      Q1-1.5IQR 보다 직거나 Q3+1.5IQR 보다 큰 경우 이상치로 판단
      data[(Q1-1.5IQR > data)|(Q3+1.5IQR < data)]
      q1 = df[col].quantile(0.25)
      q3 = df[col].quantile(0.75)
      iqr = q3 - q1
      return df[(df[col] < q1-1.5*iqr) | (df[col] > q3+1.5*iqr)]

정규화(Normalization)

  • Standardization : 평균 0, 분산 1로 변환
    x_standardization = (x - x.mean())/x.std()

  • Min-Max Scaling : 최솟값 0, 초댓값 1로 변환
    x_min_max = (x-x.min())/(x.max()-x.min())

  • test데이터도 train데이터를 정규화 시켰던 기준 그대로 정규화 해야 함

원-핫 인코딩(One-Hot Encoding)

  • 카테고리별 이진 특성을 만들어서 해당하는 특성만 1, 나머지는 0으로 만드는 방법
    sub_data = pd.get_dummies(data['col'])
    data = pd.concat([data, sub_data], axis=1)
    data.drop(['col'], axis=1, inplace=True)

구간화(Binning)

  • 데이터를 구간별로 나누는 것
  • ctg = pd.cut(data, bins=[0, 1000, 2000])
  • ctg = pd.qcut(data, q=5) #비슷한 크기의 그룹으로 나눠줌

0개의 댓글