250x250
Link
๋‚˜์˜ GitHub Contribution ๊ทธ๋ž˜ํ”„
Loading data ...
Notice
Recent Posts
Recent Comments
๊ด€๋ฆฌ ๋ฉ”๋‰ด

Data Science LAB

[Python] ๋ฐ์ดํ„ฐ ๊ฒฐ์ธก์น˜ ์ฒ˜๋ฆฌ ๋ณธ๋ฌธ

๐Ÿ Python/Pandas

[Python] ๋ฐ์ดํ„ฐ ๊ฒฐ์ธก์น˜ ์ฒ˜๋ฆฌ

ใ…… ใ…œ ใ…” ใ…‡ 2022. 3. 11. 14:05
728x90

Pandas ์—์„œ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฒฐ์ธก์น˜(NA)๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

๊ฒฐ์ธก์น˜๋ž€, ์ปฌ๋Ÿผ์— ๊ฐ’์ด ์—†๋Š” NULL ์ƒํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋งํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ์…‹์„ ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์— ์ ์šฉํ•  ๋•Œ ๊ฒฐ์ธก์น˜๊ฐ€ ์กด์žฌํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•ด์•ผํ•œ๋‹ค. 

 

 

๋ฐ์ดํ„ฐ์˜ ๊ฒฐ์ธก ์—ฌ๋ถ€ ํ™•์ธ

import pandas as pd
import numpy as np

data = pd.read_csv("titanic_train.csv")
data.head()

๋จผ์ €, ์œ ๋ช…ํ•œ ๋ถ„๋ฅ˜ ๋ฐ์ดํ„ฐ์…‹ ์ค‘ ํ•˜๋‚˜์ธ ํƒ€์ดํƒ€๋‹‰ ๋ฐ์ดํ„ฐ์…‹์„ ๋ถˆ๋Ÿฌ์˜จ๋‹ค. 

 

 

data.isna()

isna()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฒฐ์ธก์ธ์ง€ ์•„๋‹Œ์ง€์— ๋Œ€ํ•ด True/False๋กœ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค. 

True -> ๊ฒฐ์ธก

False -> ๊ฒฐ์ธก X

 

 

data.isna().sum()

isna์— sum()ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ๋ฉด,

๊ฐ ์ปฌ๋Ÿผ๋ณ„ ๊ฒฐ์ธก ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ด ์ค€๋‹ค. 

titanic ๋ฐ์ดํ„ฐ์…‹์—์„œ๋Š” 'Age'์ปฌ๋Ÿผ์˜ ๊ฒฐ์ธก์น˜๊ฐ€ 177๊ฐœ, 'Cabin' ์นผ๋Ÿผ์˜ ๊ฒฐ์ธก์น˜๊ฐ€ 678๊ฐœ, 'Embarked'์ปฌ๋Ÿผ์˜ ๊ฒฐ์ธก์น˜๊ฐ€ 2๊ฐœ์ธ ๊ฒƒ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

๊ฒฐ์ธก ๋ฐ์ดํ„ฐ ๋Œ€์น˜

๊ฒฐ์ธก ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ๋‹ค๋ฉด, ํŠน์ • ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•˜์—ฌ ๋ฐ์ดํ„ฐ์…‹์„ ์ฑ„์šธ ์ˆ˜ ์žˆ๋‹ค. 

๋Œ€์น˜๊ฐ’ ์ข…๋ฅ˜

  • ์ตœ๋นˆ๊ฐ’(mode)
  • ํ‰๊ท (mean)
  • ์ค‘์•™๊ฐ’(median)
  • ์กฐ๊ฑด๋ถ€ ๋Œ€์น˜
  • ํšŒ๊ท€๋ถ„์„์„ ํ†ตํ•œ ๋Œ€์น˜

 

- ์ž„์˜์˜ ๊ฐ’์œผ๋กœ ์ „์ฒด ๊ฒฐ์ธก์น˜ ๋Œ€์น˜

data.fillna(0)

fillna()์— ๋Œ€์น˜ํ•˜๊ณ ์ž ํ•˜๋Š” ์ž„์˜์˜ ๊ฐ’์„ ์ž…๋ ฅํ•˜๋ฉด, ์ „์ฒด ๊ฒฐ์ธก์น˜๊ฐ€ ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ๋Œ€์น˜๋œ๋‹ค. 

 

 

- ๊ฒฐ์ธก์น˜ ์ด์ „ ๊ฐ’์œผ๋กœ ๋Œ€์น˜

data.fillna(method='pad')

 

 

- ๊ฒฐ์ธก์น˜ ์ดํ›„ ๊ฐ’์œผ๋กœ ๋Œ€์น˜

data.fillna(method = 'bfill')

 

 

 

- ํ‰๊ท ๊ฐ’ ๋Œ€์น˜

data['Age'].fillna(data['Age'].mean(),inplace=True)

fillna()ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ‰๊ท ๊ฐ’์œผ๋กœ ๋Œ€์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค. 

๐Ÿ“inplace = True ๋กœ ์„ค์ •ํ•ด์•ผ ์‹ค์ œ ๋ฐ์ดํ„ฐ ์…‹ ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ๋‹ค. 

 

data['Age'] = data['Age'].fillna(data['Age'].mean(),inplace=False)

inplace ํŒŒ๋ผ๋ฏธํ„ฐ์˜ default ๊ฐ’์€ False ์ด๋ฉฐ, default ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ,

์™ผ์ชฝ์— ๋Œ€์น˜ํ•˜๊ณ ์žํ•˜๋Š” ์ปฌ๋Ÿผ์„ ํ•œ๋ฒˆ ๋” ์„ ์–ธํ•˜์—ฌ fillna()๊ฐ’์„ ๋Œ€์ž…ํ•˜๋ฉด ๋œ๋‹ค. 

 

 

 

 

๊ฒฐ์ธก ๋ฐ์ดํ„ฐ ์‚ญ์ œ

- ๊ฒฐ์ธก์น˜ ํ–‰ ์‚ญ์ œ

data = data.dropna()

dropna()ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒฐ์ธก์น˜๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

data.dropna(inplace=True)

dropna()๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ inplace=True๋กœ ์„ค์ •ํ•ด์•ผ ๋ฐ”๋กœ ๊ฒฐ์ธก์น˜ ์‚ญ์ œ๊ฐ€ ์ ์šฉ๋œ๋‹ค. 

 

-ํ–‰ ์ „์ฒด๊ฐ€ ๊ฒฐ์ธก์น˜์ธ ํ–‰ ์‚ญ์ œ

data = data.dropna(how='all')

 

-ํ–‰์˜ ๊ฒฐ์ธก์น˜๊ฐ€ n๊ฐœ ์ดˆ๊ณผ์ธ ํ–‰ ์‚ญ์ œ

data = data.dropna(thresh=n)

 

- ๊ฒฐ์ธก์น˜๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ์ปฌ๋Ÿผ ์‚ญ์ œ

data = data.dropna(axis=1)

 

- ํŠน์ • ์ปฌ๋Ÿผ ์ค‘ ๊ฒฐ์ธก์น˜๊ฐ€ ์กด์žฌํ•  ๋•Œ ํ–‰ ์‚ญ์ œ

data = data.dropna(subset = ['Age','Cabin','Embarked'])

 

 

 

 

๊ฒฐ์ธก์น˜ ์ฒ˜๋ฆฌ ๊ฐ€์ด๋“œ๋ผ์ธ

- 10% ๋ฏธ๋งŒ : ์‚ญ์ œ ๋˜๋Š” ๋Œ€์น˜

- 10~50% : regression or model based imputation

- 50% ์ด์ƒ : ํ•ด๋‹น ์ปฌ๋Ÿผ ์‚ญ์ œ

728x90
Comments