전처리가 쉬워지는 판다스 파이프라인


PNG


pdpipe 관련 글 목록


데이터 스케일링과 문자열 처리 파이프라인

pdpipe에는 Scikit-learn의 스케일러 메소드와 NLTK의 문자열 처리 메소드가 내장되어 있습니다. 따라서 데이터 스케일링과 문자열 처리에도 파이프라인을 심플하게 적용할 수 있습니다.


파이프라인 생성

pdpipe - Pandas DataFrame 전처리 자동화 01 에서 정의한 파이프라인을 다시 한 번 구현해 보고, 스케일링 파이프라인과 문자열 처리 파이프라인을 만들어보겠습니다.

import pandas as pd
import pdpipe as pdp

df = pd.read_csv('Data/USA_Housing.csv')

def size(n):
    if n <= 6.3:
        return 'Small'
    elif 6.3 < n <= 7.7:
        return 'Medium'
    else:
        return 'Big'

df['House_size'] = df['Avg. Area Number of Rooms'].apply(size)

pipeline = pdp.ColDrop('Avg. Area Number of Rooms')
pipeline += pdp.OneHotEncode('House_size')
pipeline += pdp.RowDrop({'Price': lambda x: x <= 250000})

df2 = pipeline(df)

print('Number of Rows : ', len(df2), sep='')
df2.head()
Number of Rows : 4990
Avg. Area Income Avg. Area House Age Avg. Area Number of Bedrooms Area Population Price Address House_size_Medium House_size_Small
0 79545.458574 5.682861 4.09 23086.800503 1.059034e+06 208 Michael Ferry Apt. 674\nLaurabury, NE 3701... 1 0
1 79248.642455 6.002900 3.09 40173.072174 1.505891e+06 188 Johnson Views Suite 079\nLake Kathleen, CA... 1 0
2 61287.067179 5.865890 5.13 36882.159400 1.058988e+06 9127 Elizabeth Stravenue\nDanieltown, WI 06482... 0 0
3 63345.240046 7.188236 3.26 34310.242831 1.260617e+06 USS Barnett\nFPO AP 44820 0 1
4 59982.197226 5.040555 4.23 26354.109472 6.309435e+05 USNS Raymond\nFPO AE 09386 0 0


스케일링 기능

머신러닝 모델링 작업 중에 흔히 데이터 스케일링 작업을 진행합니다.

  • Standardization Scaling
  • Min-Max Scaling

위 두 가지 스케일링 방법이 가장 흔히 사용됩니다. 이 중에서 첫 번째 스케일링 방법인 Standardization Scaling을 파이프라인을 통해 사용해보겠습니다. 원-핫 인코딩한 컬럼인 House_size_MediumHouse_size_Small 컬럼을 제외하고 스케일링을 해보겠습니다. (str 형식의 컬럼은 스케일링 시 옵션 지정을 하지 않아도 자동 제외됩니다.)

pipeline_scaler = pdp.Scale('StandardScaler', exclude_columns=['House_size_Medium', 'House_size_Small'])

df3 = pipeline_scaler(df2)

스케일링된 결과입니다!

df3.head()
Avg. Area Income Avg. Area House Age Avg. Area Number of Bedrooms Area Population Price Address House_size_Medium House_size_Small
0 1.028113 -0.300130 0.087245 -1.322810 -0.500532 208 Michael Ferry Apt. 674\nLaurabury, NE 3701... 1 0
1 1.000175 0.023142 -0.722671 0.401923 0.775998 188 Johnson Views Suite 079\nLake Kathleen, CA... 1 0
2 -0.690443 -0.115252 0.929559 0.069730 -0.500662 9127 Elizabeth Stravenue\nDanieltown, WI 06482... 0 0
3 -0.496719 1.220456 -0.584986 -0.189886 0.075327 USS Barnett\nFPO AP 44820 0 1
4 -0.813263 -0.948927 0.200634 -0.992999 -1.723449 USNS Raymond\nFPO AE 09386 0 0
df3.describe().T
count mean std min 25% 50% 75% max
Avg. Area Income 4990.0 -1.242081e-15 1.000100 -4.783945 -0.669945 0.018812 0.675038 3.678300
Avg. Area House Age 4990.0 1.231240e-16 1.000100 -3.369390 -0.658761 -0.005282 0.679106 3.574860
Avg. Area Number of Bedrooms 4990.0 -4.534894e-17 1.000100 -1.605481 -0.682176 0.054849 0.411212 2.039145
Area Population 4990.0 -2.937752e-16 1.000100 -3.635828 -0.683094 0.002692 0.674915 3.374546
Price 4990.0 -7.796035e-17 1.000100 -2.802583 -0.671241 -0.002958 0.678598 3.527482
House_size_Medium 4990.0 5.100200e-01 0.499950 0.000000 0.000000 1.000000 1.000000 1.000000
House_size_Small 4990.0 2.494990e-01 0.432766 0.000000 0.000000 0.000000 0.000000 1.000000


문자열 처리 기능 추가

데이터셋의 주소를 나타내는 문자열 컬럼 Address를 활용해 Zip 코드나 주(State)를 추출해 분석에 활용해보고자 합니다. 텍스트 마이닝과 자연어처리에 사용되는 파이썬 라이브러리 NLTKWord Tokenizer를 위에서 만든 파이프라인에 추가하여 사용해보도록 하겠습니다.

## 주소 데이터 예시
df.loc[0,'Address']
'208 Michael Ferry Apt. 674\nLaurabury, NE 37010-5101'
def extract_state(token):
    return str(token[-2])

pipeline_tokenizer = pdp.TokenizeWords('Address')
pipeline_state = pdp.ApplyByCols('Address', extract_state, result_columns='State')
pipeline_state_extract = pipeline_tokenizer + pipeline_state

df4 = pipeline_state_extract(df3)

State 컬럼이 추가되었습니다!

df4.head()
Avg. Area Income Avg. Area House Age Avg. Area Number of Bedrooms Area Population Price State House_size_Medium House_size_Small
0 1.028113 -0.300130 0.087245 -1.322810 -0.500532 NE 1 0
1 1.000175 0.023142 -0.722671 0.401923 0.775998 CA 1 0
2 -0.690443 -0.115252 0.929559 0.069730 -0.500662 WI 0 0
3 -0.496719 1.220456 -0.584986 -0.189886 0.075327 AP 0 1
4 -0.813263 -0.948927 0.200634 -0.992999 -1.723449 AE 0 0


pdpipe 관련 글 목록


태그:

카테고리:

업데이트:

댓글남기기