[머신러닝 과제] Type_of_Loan 원핫인코딩 과제
Type_of_Loan 원핫인코딩 과제
문제
해당 데이터프레임에 있는 Type_of_Loan(대출 상품 타입) 컬럼을 중복제거 후 각 대출 상품에 대한 이름으로 컬럼을 만들고 대출상품이 있는 경우 해당 컬럼에 1을 저장
내가 작성한 코드
# Type_of_Loan의 모든 대출 상품을 변수에 모두 저장
# 각 대출 상품에 대한 이름으로 컬럼을 만들고 대출 상품이 있는 겨웅 해당 컬럼에 1을 저장(원 핫 인코딩 방식)
loan_types = []
for i in credit_df['Type_of_Loan']:
if str(i) == 'nan':
pass
else:
val = str(i).replace('and ', '')
arr2 = val.split(', ')
for j in arr2:
if j in loan_types:
pass
else:
loan_types.append(j)
loan_types.append('nan')
print(loan_types)
우선 Type_of_Loan에 있는 값의 패턴이 일정하지 않아 ( Auto Loan, Auto Loan, and Not Specified, Credit-Builder Loan .... 등 ) 패턴을 일정하게 변경시켜주는 작업을 먼저 진행해야한다.
Type_of_Loan에 값들을 반복시켜 값이 nan일 경우 패스하고 값이 있을 경우 .replace() 함수를 이용하여 and를 제거해주고 .split()을 이용하여 콤마(,) 기준으로 잘라서 배열로 만들어주었다.
for i in credit_df['Type_of_Loan']:
if str(i) == 'nan':
pass
else:
val = str(i).replace('and ', '')
arr2 = val.split(', ')
그 다음 반목문을 이용하여 arr2를 j에 담아주고 그 j가 미리 만들어놨떤 loan_types에 있다면 pass 없다면 loan_types에 append할 수 있게 코드를 작성하였다.
for j in arr2:
if j in loan_types:
pass
else:
loan_types.append(j)
그리고 데이터가 NaN인 경우 nan타입에 체크를 해줘야해서 nan을 loan_types에 append() 해주었다.
loan_types.append('nan')
print(loan_types)
for i in loan_types:
credit_df[i] = 0
반복문을 이용하여 loan_types를 반복시켜 credit_df[i] i컬럼들을 만들어준 후 0으로 초기화시켜주었다.
def oneHot(types, indexes):
for i, idx in zip(types, indexes):
val = str(i).replace('and ', '')
arr2 = val.split(', ')
for loan_type in loan_types:
if loan_type in arr2:
credit_df.loc[idx, loan_type] = 1
oneHot(credit_df['Type_of_Loan'], credit_df.index)
oneHot이라는 함수를 만들고 해당 함수 매개변수로 types, indexes를 받아준다.
그리고 그 두 매개변수를 받아 반복문을 이용하여 i, idx에 한개씩 넣어준 후 위에서 했던 데이터 변경 작업을 진행해준다.
미리 만들어놓았던 loan_types 리스트를 반복시켜 arr2에 해당 타입이 있으면 credit_df.loc[idx, loan_type] = 1로 변경해준다.
친구가 작성한 코드
unique_loan_lists = credit_df['Type_of_Loan'].str.replace('and ', '').str.split(', ', expand=True).stack().unique()
unique_loan_lists
for i in unique_loan_lists:
credit_df[i] = credit_df['Type_of_Loan'].apply(lambda x: 1 if (not pd.isna(x)) and (i in x) else 0)
credit_df['Type_of_Loan'] 을 str 타입으로으로 변경 후 replace로 'and'를 없애주고 콤마(,)를 기준으로 split해준 데이터를expand=True를 사용하여 데이터 프레임으로 변환시킨다.
그 후 stack() 함수를 사용하여 데이터프레임을 하나로 합쳐준 후 unique() 함수를 이용하여 중복제거를 해준다.
그 후 unique_loan_lists를 반복하여 credit_df[i]에 apply() lambda를 이용하여 x가 nan이 아니거나 i안에 x가 있으면 1을 넣어주고 아닐경우 0을 넣어주라는 반복문을 써 credit_df[i]에 0 또는 1을 넣어준다.