본문 바로가기

파이선

데이터 정제 및 준비 (chap7)

목적 : 데이타가 모두 정형화 되어서 DB에만 저장되어 있다면 크게 영향(?) 이 없을것도 같은데,
         비정형 데이타 형식이면 비중이 더 높을거 같다.

  • 누락된 데이타 처리하기
    • pandas에서 na의 정의
      • 존재하지 않거나, 존재하더라도 수집과정에서 검출되지 않은것을 의미
      • np.nan
      • 파이선의 None값도 NA값으로 처리
      • na메소드 : P.271 (dropna, fillna, isnull, notnull)
    • 누락된 데이타 골라내기 (2가지 관점으로 접근 : Series / DataFrame)
      • DataFrame
        보통 시계열 데이터 처리할때 사용하는 경우가 많다. 
        • 로우&&컬럼 2가지 모두 체크
          • dropna(how='all')
        • 로우 or 컬럼 1가지라도 na 포함하는 경우 제외
          • dropna() : 1가지라도 있으면 제외
      • df.dropna(thresh=2)
      • df.fillna
        • df.fillna({1: 0.5, 2: 0}) 
          • null인 경우 컬럼 1번에 0.5,  2번 컬럼에 0을 입력처리
        • df.fillna(0, inplace=True)
          • 기존 객체를 변경
        • data.fillna(data.mean())
          • 평균값이나 중간값을 설정할 수 있다.
        • P. 276 : fillan 함수 인자
  • 데이터 변형
    • 중복값 제거
      • data.duplicated() : 중복값이 있는것 True / False 체크
      • data.drop_duplicates() :  중복값 제거해서 DataFrame 객체로 반환
      • data.drop_duplicates(['k1', 'k2'], keep='last')
        • 중복값이 있을때 기본은 앞에 있는것 사용, keep=last옵션으로 마지막 중복값 사용 처리

    • 테이터의 형태를 변환
      • map함수를 이용해서 신규 컬럼값 넣기
        • data['animal'] = lowercased.map(meat_to_animal)
      • replace하기
        • data.replace(-999, np.nan)
        • data.replace([-999, -1000], np.nan)
        • data.replace([-999, -1000], [np.nan, 0])
        • data.replace({-999: np.nan, -1000: 0})
      • 축 색인 바꾸기
        • data.index.map(transform) : 기존 객체를 변경
        • data.rename(index=str.title, columns=str.upper) : 새로운 객채로 변경
        • data.rename(index={'OHIO': 'INDIANA'}, columns={'three': 'peekaboo'}) : 축에 일부만 선택적으로 변경
      • 개별화 / 양지화 (그룹별로 데이타 나누기)
        • cats = pd.cut(ages, bins) : age는 원본 객체, bins는 그룹하려는 list값
          • 반환하는 객체는 Categorical 객체이다.
        • pd.cut(ages, bins, labels=group_names)
          • group화면 영역에 라벨이름 붙이기
        • pd.cut(data, 3, precision=2)
          • data을 최대,최소값 기준으로 균등하게 3등분 하여라
          • precision : 소수점아래 2자리까지 제한
        • cats = pd.qcut(data, 3)
          • 위에 예제와 비슷하지만 많이 다르다.
          • 표준 변위치를 사용하기 때문에 적당한 같은 크기의 그룹을 나눌수 있다. P.286
          • pd.qcut(data, [0, 0.1, 0.5, 0.9, 1.]) : 구분 범위를 정할 수 있다.
      • 특이값 찾고 제외
        • col[np.abs(col) > 3] : abs을 통해서 절대값 조건걸기
        • data[(np.abs(data) > 3).any(1)]
        • data[np.abs(data) > 3] = np.sign(data) * 3 : sign 양수 음수 파악
      • dummy값 생성하기
        • dummies = pd.get_dummies(df['key'], prefix='key')
  • 문자열 다루기