본문 바로가기

Study/Python

Python | 데이터 전처리

1. 결측값 처리

  • 너무 많은 항목이 비어 있는 변수나 너무 많은 항목이 비어 있는 레코드는 그 자체를 삭제
  • 기타 나머지 항목에 대해서는 일반적으로 다음과 같은 값으로 대체 
    1.  평균값 : 값들의 평균치
    2.  중앙값 : 값들 범위 내에 중앙에 위치한 값
    3.  최빈값 : 가장 많이 나타내지는 값
  • 예제 
    • 결측치 확인 
      • df.isnull()
        • pandas 를 통해  dataFrame 형식으로 csv 파일을 읽어들인 후 해당  df의 null값을 확인한다.
      • msno.bar(df) /  msno.matrix(df)
        • missingno를 통해 결측치를 시각화 할 수 있다. 
    • 결측치 처리
      • 결측치 제거 - df.dropna()
        • axis=1 열 방향 제거 / axis=0 행 방향 제거
        • thresh=n n개 미만 결측치 존재시 제거
      • 결측치 대체
        • fillna() -  수동 대체 
        • sklearn.impute.SimpleImputer
          • fillna()보다 비교적 쉽게 결측값 대체
          • strategy 파라미터
            • mean 평균값
            • median 중위값
            • most_frequent 최빈값
            • 일반적으로 실수형 연속값인 경우 평균 또는 중위수
            • 정규분포인 경우 평균을 사용하는 것이 유리, 비정규분포인 경우 중위수가 유리
            • 카테고리인 경우 최빈값
          • 코드예시
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy = "most_frequent")
df = pd.DataFrame(imputer.fit_fransform(df), columns = df.columns)
#################################################################
imputer = SimpleImputer(Strategy = 'mean', missing_values = np.nan)
imputer = imputer.fit(df[['columnName']])
df[['columnName']] = imputer.transform(df[['columnName']])

 

2. 정성적 변수¹의 정량화

  • 각 속성은 단일변수 값을 갖도록 수정
  • 정성적 변수의 경우, 0/1의 binary code로 변환해야 추후 해석이 가능
  • ex) 주소의 변환, 성별의 변환 등
  • 예제
    • 범주형 데이터 전처리
      • 기계학습을 위해 숫자로 변환
      • pandas의 get_dummies 함수를 통해 일치여부를 0/1의 binary code로 표현 

3. 이상치의 제거

  • 상식적으로 말이 안되거나 잘 못 입력된 것으로 추정되는 변수 값을 조정
  • 일괄적으로 상위 10%와 하위 10%에 해당하는 값들을 단일값으로 부여하는 경우도 있음
  • 예제
    • 스케일링
      • RobustScaler
        • scikit learn의 preprocessing을 통해 중앙값 0, IQR 1 (정규분포) 이 되도록 스케일링
        • 아웃라이어가 있어도 대부분 데이터가 0 주위(중앙값)로 모이게 된다.
      •  

 

4. 새로운 파생변수 개발

  • 기존의 변수를 조합하여 새로운 변수를 개발
  • 본래는 비율변수²인 변수를 의미있는 정보로 구간화하여, 새로운 명목변수³로 만듦

5. 정규화

  • 모든 입력변수의 값이 최소 0에서 최대 1사이의 값을 갖도록 조정하거나, 평균 0을 갖는 표준정규분포를 갖도록 값을 조정하는 것
  • 정규화 공식 = (x-최소값) / (최대값-최소값) //여기서 최대값이 1 최소값이 0의 %를 갖게 된다.
  • 예제 
    • 스케일링
      • StandardScaler
        • scikit learn의 preprocessing을 통해 평균 0, 표준편차 1 (정규분포) 이 되도록 스케일링

6. 자료의 구분

  1.  과적합화의 발생 가능성
    • 예측 모델 중 한 번의 예측률이 높은가 보다, 예측들 간 오차범위가 좁은 것이 더 잘 구축되었다고 할 수 있다.
  2. 과적합화의 예방법
    • 모형 구축시, hold-out data의 개념을 도입
    • hold-out data (검증) : 모형이 일반성을 갖는지 확인하기 위해 남겨두는 unknown data
    • 통계 모형을 구축할 때, 전체 데이터가 100이라면, 학습 : 검증 을 8:2 혹은 7:3의 비중으로 자료를 미리 나누어 둠
  3. 0/1 예측의 경우 0과 1의 비중이 각 데이터 셋마다 1:1의 비중이 되도록 섞어야 함

7. 모형에 들어갈 후보 입력변수 선정

기법 독립변수 종속변수 사용 예 적용 예
카이제곱 검정 이산형(범주형) 이산형(범주형) 범주간 차이를 분석 성별(이산)과 구매여부(이산)사이에 유의한 관계가 있는가? 
독립표본 t검정(t-test) 이산형(2그룹) 연속형 두집단 간 평균울 비교 체중(연속)과 구매여부(이산) 사이에 유의한 관계가 있는가?
>구매자와 비구매자의 평균 체중 비교
분산분석(ANOVA) 이산형(3그룹 이상) 연속형 다분류 모형의 경우, 집단 간 평균을 비교 체중(연속)과 고객등급 사이(3그룹이상 이산)에 유의한 관계가 있는가?
>고객등급에 따라 평균 체중 비교

실습 예제

1. 결측치 전처리

 

 

2. 스케일링

 

 

3. 범주형 데이터 전처리

dataPropre_cate

참고

 

1.『정성적변수(Qualitative variable, 定性的變數)』는 『양적변수(Quantitative variable)』에 대응되는 용어로서 양적으로 비교할 수 없는 변수, 예를 들면, 성별·사람의 국적 등을 말합니다.

출처 https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=npl12345&logNo=220738444017 

 

2. 비율변수

*등간변수는 측정 대상의 순서와 측정 대상간의 간격을 알 수 있는 변수로, 그 사이의 간격이 같은 변수를 말한다.

등간변수가 갖는 0의 값은 사람이 만든 인위적인 0이다 ex.온도계 0도

비율변수는 등간변수가 가지고 있는 0의 값을 절대적인 0의 값으로 가지고 있는 변수다.(0값이 존재한다)

 

3. 명목변수

측정대상의 특성을 구분하기 위한 변수

명목변수의 숫자는 오로지 구문만을 위해 사용될 뿐, 숫자 자체에 크기나 의미는 없다 ex. 운동선수 등번호

출처 https://likesocialwelfare.tistory.com/9

 

4. SimpleImputer

https://ichi.pro/ko/sklearnui-simpleimputer-keullaeseuleul-sayonghayeo-gyeolcheuggabs-daechihagi-168708110221126

 

 

 

'Study > Python' 카테고리의 다른 글

Python | 의사결정나무 Decision Tree  (0) 2022.04.20
Python | 회귀분석  (0) 2022.03.23
Python | Dacon Lv3 | CV & LGBM  (0) 2022.03.21
Python | Dacon Lv2 | RandomForest  (0) 2022.03.16
Python | Dacon Lv1 | Review  (0) 2022.03.15