์ธ๊ณต์ง€๋Šฅ ๐ŸŒŒ/๋จธ์‹ ๋Ÿฌ๋‹

๋ฐ์ดํ„ฐ ์ •์ œ ๋ฐ ๋ถ„๋ฆฌ

23.8 2022. 11. 28. 22:29
๋ฐ˜์‘ํ˜•

 

๊ฒฐ์ธก๊ฐ’ ์ฒ˜๋ฆฌํ•˜๊ธฐ

์ผ๋ฐ˜์ ์ธ ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์˜ ์ž…๋ ฅ ๊ฐ’์œผ๋กœ ๊ฒฐ์ธก๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ Null, None, NuN๋“ฑ์˜ ๊ฒฐ์ธก๊ฐ’์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๋Œ€ํ‘œ์ ์ธ ๊ฒฐ์ธก ๊ฐ’ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์—๋Š” ์„ธ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

1. ๊ฒฐ์ธก๊ฐ’์ด ์กด์žฌํ•˜๋Š” ์ƒ˜ํ”Œ ์‚ญ์ œ(ํ–‰)

2. ๊ฒฐ์ธก๊ฐ’์ด ๋งŽ์ด ์กด์žฌํ•˜๋Š” ๋ณ€์ˆ˜ ์‚ญ์ œ(์—ด)

3. ๊ฒฐ์ธก๊ฐ’์„ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋Œ€์ฒด

 

 

 

 

1. ๊ฒฐ์ธก๊ฐ’์ด ์กด์žฌํ•˜๋Š” ์ƒ˜ํ”Œ ์‚ญ์ œ(ํ–‰)

๊ฒฐ์ธก๊ฐ’์ด ์žˆ๋Š” ์ƒ˜ํ”Œ์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 'dropna'๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

DataFram.dropna()

 

 

2. ๊ฒฐ์ธก๊ฐ’์ด ๋งŽ์ด ์กด์žฌํ•˜๋Š” ๋ณ€์ˆ˜ ์‚ญ์ œ(์—ด)

pandas์˜ DataFrame์—์„œ ํŠน์ • ๋ณ€์ˆ˜(Columns)๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 'drop'์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

DataFrame.drop(columns=['Cabin'])

 

 

import pandas as pd

# ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ต๋‹ˆ๋‹ค.
titanic = pd.read_csv('./data/titanic.csv')

# ๋ณ€์ˆ˜ ๋ณ„ ๋ฐ์ดํ„ฐ ์ˆ˜๋ฅผ ํ™•์ธํ•˜์—ฌ ๊ฒฐ์ธก ๊ฐ’์ด ์–ด๋””์— ๋งŽ์€์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
print(titanic.info(),'\n')


#1. Cabin ๋ณ€์ˆ˜๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
titanic_1 = titanic.drop(columns=['Cabin'])

# Cabin ๋ณ€์ˆ˜๋ฅผ ์ œ๊ฑฐ ํ›„ ๊ฒฐ์ธก๊ฐ’์ด ์–ด๋””์— ๋‚จ์•„ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
print('Cabin ๋ณ€์ˆ˜ ์ œ๊ฑฐ')
print(titanic_1.info(),'\n')


#2. ๊ฒฐ์ธก๊ฐ’์ด ์กด์žฌํ•˜๋Š” ์ƒ˜ํ”Œ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
titanic_2 = titanic_1.dropna()

# ๊ฒฐ์ธก๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
print('๊ฒฐ์ธก๊ฐ’์ด ์กด์žฌํ•˜๋Š” ์ƒ˜ํ”Œ ์ œ๊ฑฐ')
print(titanic_2.info())

 


 

 

์ด์ƒ์น˜(Outlier) ์ฒ˜๋ฆฌํ•˜๊ธฐ

์ด์ƒ์น˜๊ฐ€ ์žˆ์œผ๋ฉด, ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์„ ์ €ํ•˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ƒ์น˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ „์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ ์ œ๊ฑฐํ•˜๋ฉฐ,

์–ด๋–ค ๊ฐ’์ด ์ด์ƒ์น˜ ์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ๊ธฐ์ค€์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

 

 

์ด์ƒ์น˜ ํŒ๋‹จ ๊ธฐ์ค€ ๋ฐฉ๋ฒ•

1. ํ†ต๊ณ„ ์ง€ํ‘œ(์นด์ด์ œ๊ณฑ ๊ฒ€์ •, IQR ์ง€ํ‘œ ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒ๋‹จ

2. ๋ฐ์ดํ„ฐ ๋ถ„ํฌ๋ฅผ ๋ณด๊ณ  ์ง์ ‘ ํŒ๋‹จ

  (๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ณ  ์ง์ ‘ ํŒ๋‹จํ•  ์ˆ˜๋„ ์žˆ๊ณ , ๋„์ˆ˜๋ถ„ํฌํ‘œ๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ๊ทธ๋ž˜ํ”„ ๋“ฑ์„ ํ†ตํ•ด ํ™•์ธ ๊ฐ€๋Šฅ)

3. ๋จธ์‹ ๋Ÿฌ๋‹ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ƒ์น˜ ๋ถ„๋ฅ˜

 

 

์‹ค์Šต

Titanic ๋ฐ์ดํ„ฐ Age ๋ณ€์ˆ˜ ์ค‘ ์†Œ์ˆ˜์  ๊ฐ–๋Š” ๋ฐ์ดํ„ฐ ์ œ๊ฑฐํ•˜๊ธฐ

import pandas as pd
import numpy as np

#๋ฐ์ดํ„ฐ ์ฝ์–ด์˜ค๊ธฐ
titanic = pd.read_csv('./data/titanic.csv')

#Cabin ๋ณ€์ˆ˜ ์ œ๊ฑฐ
titanic_1 = titanic.drop(columns=['Cabin'])

#๊ฒฐ์ธก๊ฐ’์ด ์กด์žฌํ•˜๋Š” ํ–‰ ์ œ๊ฑฐ
titanic_2 = titanic1.dropna()

#Age ๊ฐ’ - Age ๋‚ด๋ฆผ ๊ฐ’์ด 0๋ณด๋‹ค ํฌ๋‹ค๋ฉด ์†Œ์ˆ˜์ ์„ ๊ฐ–๋Š” ๋ฐ์ดํ„ฐ๋กœ ๋ถ„๋ฅ˜
#floor : ๋‚ด๋ฆผ ํ•จ์ˆ˜
outlier = titanic_2[titanic_2['Age']-np.floor(titanic_2['Age'])>0]['Age']

print('์†Œ์ˆ˜์ ์„ ๊ฐ–๋Š” Age ๋ณ€์ˆ˜ ์ด์ƒ์น˜')
print(outlier)

print('์ด์ƒ์น˜ ์ฒ˜๋ฆฌ ์ „ ์ƒ˜ํ”Œ ๊ฐœ์ˆ˜ : %d' %(len(titanic_2)))

print('์ด์ƒ์น˜ ๊ฐœ์ˆ˜ : %d' %(len(outlier)))

#์ด์ƒ์น˜ ์ฒ˜๋ฆฌํ•˜๊ธฐ
#titanic_2['Age']์—์„œ np.floor(titanic_2['Age'])๋ฅผ ๋บธ ๊ฐ’์ด 0์ด๋ฉด ์ •์ˆ˜์ด๊ณ , 0๋ณด๋‹ค ํฌ๋‹ค๋ฉด ์†Œ์ˆ˜์ .
#0์ธ ๊ฐ’๋งŒ titanic_3์— ์ €์žฅ
titanic_3 = titanic_2[titanic_2['Age']-np.floor(titanic_2['Age']==0)]
print('์ด์ƒ์น˜ ์ฒ˜๋ฆฌ ํ›„ ์ƒ˜ํ”Œ ๊ฐœ์ˆ˜ : %d' %len(titanic_3))

 

 


 

๋ฐ์ดํ„ฐ ๋ถ„๋ฆฌ๋Š” ์™œ ํ•„์š”ํ• ๊นŒ?

๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ํ‰๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•™์Šต์— ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ํ‰๊ฐ€์šฉ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๋ถ„๋ฆฌ ์‹œ ์•ฝ 7:3 ~ 8:2 ๋น„์œจ๋กœ ํ•™์Šต๊ณผ ํ‰๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

 

์ง€๋„ํ•™์Šต ๋ฐ์ดํ„ฐ ๋ถ„๋ฆฌ

์ง€๋„ํ•™์Šต์˜ ๊ฒฝ์šฐ featrue ๋ฐ์ดํ„ฐ์™€ label ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

Feature ๋ฐ์ดํ„ฐ : label์„ ์˜ˆ์ธกํ•˜๊ธฐ ์œ„ํ•œ ์ž…๋ ฅ ๊ฐ’

Label ๋ฐ์ดํ„ฐ : ์˜ˆ์ธกํ•ด์•ผ ํ•  ๋Œ€์ƒ์ด ๋˜๋Š” ๋ฐ์ดํ„ฐ

 

์˜ˆ์‹œ

feature : ๊ณผ์ผ ์ด๋ฏธ์ง€

label : ๊ณผ์ผ ์ด๋ฆ„

 

feature : ๊ณต๋ถ€์‹œ๊ฐ„

label : ์‹œํ—˜์ ์ˆ˜ 

 

feature : ์•„๋ฒ„์ง€์˜ ํ‚ค

label : ์•„๋“ค์˜ ํ‚ค

 

 

์‹ค์Šต

ํƒ€์ดํƒ€๋‹‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ƒ์กด์ž๋ฅผ ์˜ˆ์ธกํ•œ๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค.

์ด ๊ฒฝ์šฐ Survived ๋ฐ์ดํ„ฐ๊ฐ€ Label ๋ฐ์ดํ„ฐ๊ฐ€ ๋˜๊ณ , 

๋‚˜๋จธ์ง€ ๋ณ€์ˆ˜๊ฐ€ Feature ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

์ฆ‰, Feature๋ฐ์ดํ„ฐ(train ๋ฐ์ดํ„ฐ)๋“ค์„ ํ†ตํ•ด์„œ ์ƒ์กด์—ฌ๋ถ€(test ๋ฐ์ดํ„ฐ)๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

๊ทธ๋Ÿฌ๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๋ถ„๋ฆฌ์—์„œ๋Š” skleran๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ train_test_split๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

#์•ž์—์„œ ์ •์ œํ•œ titanic_3๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


#feature ๋ฐ์ดํ„ฐ์™€ label ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
X = titanic_3.drop(columns=['Survived'])
y = titanic_3['Survived']

#๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜ ํ™•์ธ
print('X ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜: %d' %(len(X)))
print('y ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜: %d' %(len(y)))

#X, y ๋ฐ์ดํ„ฐ๋ฅผ ํ•™์Šต์šฉ, ํ‰๊ฐ€์šฉ ๋ฐ์ดํ„ฐ๋กœ ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.
#test : train = 3 : 7๋กœ ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.
#random state๋ฅผ ์ด์šฉํ•˜๋ฉด ํ–ฅํ›„ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# ๋ถ„๋ฆฌํ•œ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
print('ํ•™์Šต์šฉ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜: %d' %(len(X_train)))
print('ํ‰๊ฐ€์šฉ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜: %d' %(len(X_test)))
728x90
๋ฐ˜์‘ํ˜•