본문 바로가기
Experience/- KT AIVLE School

KT AIVLE School 6주차 정리 - 전처리 고급

by Yoojacha 2023. 3. 7.

누락된 값 분석

import missingno as msno

ax = msno.matrix(df)
plt.show()

# 파일 저장
# from time import time, localtime
# today = localtime(time())
# ax.get_figure().savefig(f'images/mlpr_{today.tm_mon}{today.tm_mday}.png')
fig, ax = plt.subplots(figsize=(16, 6))
(1 - df.isna().mean()).abs().plot.bar(ax=ax)

# 파일 저장
# from time import time, localtime
# today = localtime(time())
# fig.savefig(f'images/mlpr_{today.tm_mon}{today.tm_mday}.png', dpi=300)

누락된 값 대치

from sklearn import impute
from sklearn.experimental import enable_iterative_imputer

target = '컬럼명'
imputer = impute.IterativeImputer(
                                    missing_values = np.nan,    # 찾을 값 (결측값)
                                    initial_strategy = 'mean',  # 대치할 방법, 'most_frequent'
                                    verbose = 0
                                    )
imputed = imputer.fit_transform(train_x[target])
train_x.loc[:, target] = imputed
imputed = imputer.fit_transform(test_x[target])
test_x.loc[:, target] = imputed
drop_cols = ['컬럼명1', '컬럼명2']
df = df.drop(columns=drop_cols, inplace=True)
df = df.dropna()
df = df.dropna(axis=1)

누락된 값이 있었다는 범주형 컬럼 생성

def add_missing_indicator(col):
    def wrapper(df):
        return df[col].isna().astype(int)
    return wrapper

df = df.assign(컬럼명_missing=add_missing_indicator('컬럼명'))

열 이름 수정

import janitor as jn
jn.clean_names(df) # 스네이크 케이스로 컬럼명 정리 (그러나 앞뒤 공백은 처리 못해줌)
def clean_col(name):
    return name.strip().lower().replace(' ', '_')  # 양쪽 여백 제거, 소문자, 스네이크케이스

df.rename(columns=clean_col)

정규식으로 추출

# 이름컬럼에서 .앞의 알파벳 추출
df['컬럼명'].str.extract(
	"(A-Za-z]+)\.", expand=False
).head() 

"""
0	Miss
1	Mr
...
"""

댓글