파이썬(Python)/머신러닝(Machine Learning)

[Python] sklearn ColumnTransformer이란? 예제 실습(SimpleImputer, fit_transform)

끄적끄적아무거나 2023. 2. 7. 08:50
반응형

 

목차

     

     

     

     

     

    파이썬 ColumnTransformer 란?

     

    파이썬의 머신러닝(Machine Learning)과 데이터 사이언스(Data Science) 파이프라인(Pipeline)에서 데이터 프로세싱(Data Processing)은 가장 시간과 노력이 많이 들어가는 일입니다. 

     

    일반적으로 현장에서 가져온 데이터들은 정형화 되지 않고 Machine learning 모델에 적용하기 힘든 형태 입니다. 

     

     

    • 일부 빠진 값들
    • 표준화 되지 않은 값들
    • 포맷에 맞지 않은 형태의 값들
    • 중복되는 값들

     

    위와 같은 형태들이 모델 적용이 어려운 raw data 들입니다. 

     

     

    Sklearn의 ColumnTransformer는 위와 같이 처리가 어려운 값들을 파이프라인(Pipeline) 과정으로 사용자가 머신러닝(Machine Learning)에 사용할 수 있게 처리해주는 라이브러리 입니다. 

     

     

     

    파이썬 ColumnTransformer 예제 실습(SimpleImputer) #1

     

    가장 많이 사용되는 예제가 테이블 형태의 데이터(Tabular data) 입니다. 예를 들어 테이블에 키를 표현하는 값들이 들어가 있는데 일부 값들이 누락되어 "Null"로 표기 되어 있는 경우 ColumnTransformer의 SimpleImputer를 사용해서 처리 할 수 있습니다. 

     

     

    그림 처럼 키에 대한 null 값만 평균으로 처리하고 나머지는 통과 시키도록 해보겠습니다. 

     

     

     

     

    예제 전체 코드>>

    from sklearn.compose import ColumnTransformer
    from sklearn.impute import SimpleImputer
    import pandas as pd
    import numpy as np
    
    data_df = pd.DataFrame({
        "height":[165,np.nan,182],
        "weight":[70,62,np.nan],
        "age":[24,18,15]
    })
    
    col_transformer = ColumnTransformer([("input_mean", SimpleImputer(strategy="mean"), ["height"])], remainder="passthrough")
    
    print(data_df)
    print(col_transformer.fit_transform(data_df))

     

     

     

     

    결과>>

       height  weight  age
    0   165.0    70.0   24
    1     NaN    62.0   18
    2   182.0     NaN   15
    [[165.   70.   24. ]
     [173.5  62.   18. ]
     [182.    nan  15. ]]

     

     

     

     

    코드 해석>>

    data_df = pd.DataFrame({
        "height":[165,np.nan,182],
        "weight":[70,62,np.nan],
        "age":[24,18,15]
    })

    판다스 데이터프레임에 위와 같이 null 값과 일부 입력값을 입력해줍니다.

     

     

    col_transformer = ColumnTransformer([("ImputPrice", SimpleImputer(strategy="mean"), ["height"])], remainder="passthrough")

    ColumnTransformer의 SimpleImputer를 사용해서 height의 null 값들은 평균으로 출력하고 나머지 column은 통과 시켜 줍니다. 

     

     

     

     

     

     

     

     

     

    파이썬 ColumnTransformer 예제 실습(SimpleImputer) #2

    이번에는 키 열의 null 값을 평균(mean)으로 무게 열의 null 값을 중간값(median) 그리고 나머지 null 값은 -1로 채워 보겠습니다.

     

     

     

    예제 코드>>

    from sklearn.compose import ColumnTransformer
    from sklearn.impute import SimpleImputer
    import pandas as pd
    import numpy as np
    
    data_df = pd.DataFrame({
        "height":[165,np.nan,182],
        "weight":[70,62,np.nan],
        "age":[np.nan,18,15]
    })
    
    col_transformer = ColumnTransformer(
        [("input_mean"  , SimpleImputer(strategy="mean")  , ["height"]),
         ("input_median", SimpleImputer(strategy="median"), ["weight"])
        ],
        remainder=SimpleImputer(strategy="constant", fill_value=-1)
      )
    
    print(data_df)
    print(col_transformer.fit_transform(data_df))

     

     

    결과>>

       height  weight   age
    0   165.0    70.0   NaN
    1     NaN    62.0  18.0
    2   182.0     NaN  15.0
    [[165.   70.   -1. ]
     [173.5  62.   18. ]
     [182.   66.   15. ]]

     

     

     

     

    코드 주석>>

    col_transformer = ColumnTransformer(
        [("input_mean"  , SimpleImputer(strategy="mean")  , ["height"]),
         ("input_median", SimpleImputer(strategy="median"), ["weight"])
        ],
        remainder=SimpleImputer(strategy="constant", fill_value=-1)
      )

    SimpleImputer를 사용해서 mean과 median 값을 null에 넣고 나머지 열(column)에 대한 값은 상수로 -1 값을 넣어 줍니다.

     

     

     

    예제 코드 다운로드

    sklearn_ex.py
    0.00MB

     

     

     

     

    다음 포스트에서는 pipeline 사용법과 파이프라인을 이미지화 하는 방법에 대해 알아보겠습니다. 

    반응형