결측치란?
보통은 na값을 말한다. 0이나 이런 값은 결측치가 아니고 NaN 이런 값들을 말한다.
머신을 돌리는데 있어서 결측치가 존재하면 머신러닝을 돌릴 수 없다. 그래서 이 결측치를 다양한 방법으로 처리한다.
결측치에 대한 추가적인 내용은 여기를 간단하게 참고를 바란다.
대체법의 종류와 다중 대체법 : continuous-development.tistory.com/160?category=736685
결측치의 종류와 결측치 처리 가이드라인: continuous-development.tistory.com/157?category=736685
# 결측치 확인
from io import StringIO
import pandas as pd
import numpy as np
csv_data = StringIO("""
x1,x2,x3,x4,x5
1,0.1,"1",2019-01-01,A
2,,,2019-01-02,B
3,,"3",2019-01-03,C
,0.4,"4",2019-01-04,A
5,0.5,"5",2019-01-05,B
,,,2019-01-06,C
7,0.7,"7",,A
8,0.8,"8",2019-01-08,B
9,0.9,,2019-01-09,C
""")
df = pd.read_csv(csv_data)
df
결측치를 가지고 있는 데이터 프레임을 만들었다.
이 상태에서 해당 df.isna().sum() 을통해 결측치가 몇 개 있는지를 확인한다.
isna()를 할 경우 True/False로 결측치의 유무를 확인하고 sum을 추가로 함으로써 총결측치의 개수를 센다.
그래프를 통해서 결측치를 볼 수 있다.
import missingno as msno
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
#결측 데이터를 시각화 함수
# 결측 데이터는 흰색, 그렇지 않은 데이터는 검은색
msno.matrix(df)
plt.show()
채워져 있는 값은 검정색으로 결측치 값은 흰색으로 들어가 있다.
또한 bar그래프를 이용해서 결측치의 유무를 볼 수 있다.
타이타닉을 통한 예시)
import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
# 타이타닉 생존자 데이터를 이용한 missingno 쓰임새를 알아보자
titanic = sns.load_dataset('titanic')
titanic.head()
# 결측 된 데이터를 처리하는 방법
- 결측된 데이터가 너무 많은 경우 해당 데이터의 열전체를 삭제
- 결측된 데이터가 일부인 경우 가장 그럴듯한 값으로 대체
# 행 삭제 - dropna()
# 특정행만 남기기 - thresh
# 결측 데이터 대체
- 결측 데이터를 대체하는 방법
- sklearn - SimpleImputer(평균, 중앙, 최빈)
- fit transform 대체 값이 채워진 데이터 프레임을 생성할 수 있다.
- mean, median, most_frequent
from sklearn.impute import SimpleImputer
sklearn에 있는 impute를 넣고 simpleImputer를 넣어준다.
이 형태의 데이터 프레임에서
아래 구문을 통해 결측 값을 채워주었다.
# mean, median, most_frequent
imputer = SimpleImputer(strategy = 'most_frequent')
df = pd.DataFrame(imputer.fit_transform(df))
df
이 simpleImputer를 통해서 값을 넣어주는데 여기서는 most_frequent를 사용했다. 이건 가장 많이 나온 값을 넣어준 것이다.
'Data scientist > Machine Learning' 카테고리의 다른 글
[ML/DL] python 을 통한 분류(classification) 성능평가지표 사용법(Accuracy,Precision,Recall,F1 Scroe) (0) | 2020.11.02 |
---|---|
[ML/DL] python 을 통한 교차검증 ( k -Fold , stratifiedkFold) (0) | 2020.10.28 |
[ML/DL] 데이터 인코딩 - Label Encoding / One-hot Encoding/ dummies (0) | 2020.10.28 |
[ML/DL] 파이썬(python)을 이용한 분류(Classification)하기 (0) | 2020.10.27 |
[ML/DL] 대체법의 종류와 다중 대체법 사용법 (1) | 2020.10.27 |