๊ธฐ์ด ํ๋ก์ ํธ : ์ํ ๊ณ ๊ฐ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ ์๋น์ค ๋ถ์
์๊พธ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ๋จ๊ณ๋ก ๋์๊ฐ๋ ์ค....ใ ์ด์ง๋ง ์ค๊บพ๋ง ๋ง์ธ๋๋ก ์ผ๋จ ํด๋ณด๋ ์ค์ด๋ค.!
๐งน ๊ฒฐ์ธก์น ์ฒ๋ฆฌํ๊ธฐ
๊ฒฐ์ธก๊ฐ ์ฐพ๊ธฐ
bank.isna().sum()์ ํ์ฉํด ์ ์ฒด ์ปฌ๋ผ ์ค ๊ฒฐ์ธก์น๊ฐ ์๋ ์ปฌ๋ผ์ ์ฐพ์๋ค. ๊ฒฐ์ธก๊ฐ์ด ๋ฐ๊ฒฌ๋ ์ปฌ๋ผ์ Type of Loan, Num_of_Delayed_Payment, Credit_History_Age, Amount_invested_monthly, Monthly_Balance ์ด๋ ๊ฒ 5๊ฐ์ ์ปฌ๋ผ์ด์๋ค. ๊ฐ๊ฐ์ ์ปฌ๋ผ์ ๋ํด ์๋ง๋ ๊ฒฐ์ธก๊ฐ์ ๊ณ์ฐํด ์ฑ์๋ณด๋๋ก ํ๊ฒ ๋ค.
bank.isna().sum()
## ID 0
...
## Type_of_Loan 5704
## Delay_from_due_date 0
## Num_of_Delayed_Payment 3498
## Credit_Mix 0
## Outstanding_Debt 0
## Credit_Utilization_Ratio 0
## Credit_History_Age 4470
## Payment_of_Min_Amount 0
## Total_EMI_per_month 0
## Amount_invested_monthly 2271
## Payment_Behaviour 0
## Monthly_Balance 562
## dtype: int64
Type of Loan : 'none'
๋์ถ์ ๋ฐ์ ๊ณ ๊ฐ์ ๊ฒฝ์ฐ Type of Loan ์ปฌ๋ผ์ '์ด๋ค ๋์ถ์ ๋ฐ์๋์ง' ๋์ถ์ ์ข ๋ฅ๊ฐ ๋ช ๊ธฐ๋์ด์๋ค. ํ์ธ ๊ฒฐ๊ณผ, ๊ฒฐ์ธก๊ฐ์ด ์กด์ฌํ๋ ํ๋ค์ ๋์ถ์ ๊ฐ์๋ฅผ ์ธ๋ 'num_of_loan'์ปฌ๋ผ์ ๊ฐ์ด ์๋๊ฒ์ ํ์ธํ๊ณ , ๋ฐ๋ผ์ ๋์ถ์ ๋ฐ์ง ์์๊ณ ๊ฐ์ผ๋ก ๊ฐ์ฃผ, 'none'์ผ๋ก null๊ฐ์ ์ฑ์ ๋ค.
bank['Type_of_Loan'] = bank['Type_of_Loan'].fillna('none')
Num_of_Delayed_Payment : ํ๊ท
delayed payment๊ฐ ๋ฐ์ํ๋์ง, ๋ฐ์ํ์ง ์์๋์ง ํ์ธํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด์์น๋ฅผ ์ ์ธ(0~30๋ฒ์ ์ธ ๊ฐ)ํด ๊ณ์ฐํ ํ๊ท (mean_delayed_payment)๋ก ๊ฒฐ์ธก์น๋ฅผ ์ฑ์๋ฃ์๋ค.
# Num_of_Delayed_Payment
cond = (bank['Num_of_Delayed_Payment']>=0) & (bank['Num_of_Delayed_Payment']<=30)
mean_delayed_payment = bank.loc[cond,'Num_of_Delayed_Payment'].mean()
mean_delayed_payment #13.417525098210389
# ๊ฒฐ์ธก์น ์ฑ์ฐ๊ธฐ
bank['Num_of_Delayed_Payment'] = bank['Num_of_Delayed_Payment'].fillna(mean_delayed_payment)
Credit_History_Age : 0
Credit History Age์ ๋ํ ์ ๋ณด๊ฐ ์๋ ๊ฒฝ์ฐ, ์ํ์ ๋ํ ์ ์ฉ ๊ธฐ๋ก์ด ์๋ค๊ณ ๊ฐ์ฃผ 0์ผ๋ก ๊ฐ์ ์ฑ์๋ฃ์๋ค. (์ ์ฒ๋ฆฌ ๋จ๊ณ์์ year๋จ์๋ง ์ถ์ถํ๊ธฐ ์ํด extract_years๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ด ๊ณผ์ ์์ pd.isnull์ ํ์ฉํด ๊ฒฐ์ธก์น๋ฅผ ์ฑ์ ๋ค.)
def extract_years(data):
if pd.isnull(data):
return 0
result = data.split()[0]
return result
bank['Credit_History_Age'] = bank['Credit_History_Age'].apply(extract_years)
Amount_invested_monthly : customer_id๋ณ ํ๊ท
Amount_invested_monthly์ ๊ฒฝ์ฐ ๋ฐ๋ณต์ ์ผ๋ก __10000__๊ฐ์ด ๋ฑ์ฅํด ์ธ๋๋ฐ ์ ๊ฑฐ์ ํฌํจํ์ง ์์๋ค. (1. __10000__์ด๋ผ๋ ๊ฐ์ ๊ฐ๋ค์ด 10ํ ์ด์ ๋ฐ๊ฒฌ 2. customer_id๋ณ๋ก ์ํ์ ๋ฝ์ ํ์ธํด๋ณด์์ ๋ ๋ค๋ฌ๊ฐ์ ๋ฐ์ดํฐ ์ค ์ธ๋๋ฐ๋ฅผ ์ ๊ฑฐํ ์ํ์ธ 10000์ด ์ง๋์น๊ฒ ํฐ ๊ฐ์ด๋ผ๋ ์ฌ์ค์ ํ์ธํจ)
๋ฐ๋ผ์ __10000__๊ณผ ๊ณต๋ฐฑ๊ฐ์ ๋ชจ๋ error, ๊ฒฐ์ธก์น๋ก ํ๋จํ๊ณ customer_id๋ณ ํ๊ท ๊ฐ์ ๊ณ์ฐํด ์ด๋ฅผ ์ฑ์๋ฃ์๋ค. 1์ฐจ์ ์ผ๋ก ๊ฐ์ ์ฑ์๋ฃ์ ๊ฒฐ๊ณผ 4๊ฐ์ ๊ณต๋ฐฑ๊ฐ์ด ๋ฐ์ํ๊ณ , ์ด๋ ์์ ์ด์์น๋ฅผ ์ญ์ ํ์๊ธฐ ๋๋ฌธ์ด์๋ค. (์ด๋ฌํ ์ฌ์ ๋๋ฌธ์ ๊ฒฐ์ธก์น ์ฒ๋ฆฌ๋ฅผ ๋จผ์ ํด์ผํ๋ค๋ ์ฌ์ค์ ๊นจ๋ซ๊ฒ ๋์๋ค..!) 4๊ฐ์ ๊ณต๋ฐฑ๊ฐ์ ๊ฒฝ์ฐ ์ฑ์๋ฃ์ ๊ฐ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ ์์๊ธฐ ๋๋ฌธ์ 0์ผ๋ก ๊ฐ์ ์ฑ์๋ฃ์๋ค.
# ๋ฐ์ดํฐ ํ์
์ numeric์ผ๋ก ๋ณํํ๊ธฐ : __10000__๊ฐ ๋๋ ๊ณต๋ฐฑ๊ฐ์ ๋ชจ๋ error๋ก ๋ฐํ
bank['Amount_invested_monthly'] = pd.to_numeric(bank['Amount_invested_monthly'], errors='coerce')
# customer_id๋ณ ํ๊ท ๊ฐ์ผ๋ก error๋ ๊ณณ ์ฑ์๋ฃ๊ธฐ
bank['Amount_invested_monthly'] = bank.groupby('Customer_ID')['Amount_invested_monthly'].transform(lambda x: x.fillna(x.mean()))
# null๊ฐ ์ธ๊ธฐ
bank['Amount_invested_monthly'].isna().sum() ## ๊ฒฐ๊ณผ 4
# customer_id๊ฐ 'CUS_0x311a'์ธ ๊ณ ๊ฐ์ ๊ฒฝ์ฐ amount_invested_monthly ๊ฐ์ด ๋ชจ๋ ์์ -> 0์ผ๋ก ์ฑ์ฐ๊ธฐ
bank['Amount_invested_monthly'] = bank['Amount_invested_monthly'].fillna(0)
Monthly_Balance : ํ๊ท (mean)
Monthly_balance์ ๊ฒฝ์ฐ ์ญ์ 562๊ฐ์ ๊ฒฐ์ธก์น๊ฐ ๋ฐ์ํ์๋๋ฐ, ์ด์์น์ธ 0์ ์ ์ธํ ๋๋จธ์ง ๊ฐ๋ค์ ํ๊ท ์ผ๋ก ๊ฒฐ์ธก๊ฐ์ ์ฑ์๋ฃ์๋ค.
# monthly balance ๊ฒฐ์ธก์น (ํ๊ท ์ผ๋ก ์ฑ์ฐ๊ธฐ)
mean_balance = bank[bank['Monthly_Balance']>0]['Monthly_Balance'].mean()
bank['Monthly_Balance'] = bank['Monthly_Balance'].fillna(mean_balance)
๐๏ธ ์ด์์น ์ฒ๋ฆฌํ๊ธฐ
์ปฌ๋ผ ์ ๋ณด๊ฐ ๋ถ๋ช ํํ์์๋, ์์์ด๋ ๊ด๋ จ ์กฐ์ฌ ๊ฒฐ๊ณผ ๋ง์ด ๋์ง ์๋ ์ด์์น๋ค์ด ๋ฐ๊ฒฌ๋์๊ณ , ๋ค์๊ณผ ๊ฐ์ด ์ฒ๋ฆฌํ์๋ค.
Age : 0 ~ 109
bank = bank[((bank['Age']>0) & (bank['Age']<=109))]
bank['Customer_ID'].count() ##48599
Interest_Rate : 30์ดํ
bank = bank[bank['Interest_Rate']<30]
bank['Interest_Rate'].count() #43846
Num_of_Delayed_Payment 0์ด์ 30
cond = (bank['Num_of_Delayed_Payment'] >= 0) & (bank['Num_of_Delayed_Payment'] <= 30)
bank = bank[cond]
bank['Num_of_Delayed_Payment'].count() ##43,226
Monthly Balance, Delay_from_due_date ์์์ญ์
bank = bank[bank['Monthly_Balance']>0]
bank['Monthly_Balance'].count() ##43220
cond = (bank['Delay_from_due_date']) >= 0 & (bank['Delay_from_due_date'] <= 54)
bank = bank[cond]
bank['Delay_from_due_date'].count()##42942