Data scientist/Machine Learning

[ML/DL] python 을 통한 결측값 확인 및 결측치 처리 방법

반응형

결측치란?

 

보통은 na값을 말한다. 0이나 이런 값은 결측치가 아니고 NaN 이런 값들을 말한다. 

 

머신을 돌리는데 있어서 결측치가 존재하면 머신러닝을 돌릴 수 없다. 그래서 이 결측치를 다양한 방법으로 처리한다.

 

 


결측치에 대한 추가적인 내용은 여기를 간단하게 참고를 바란다. 

대체법의 종류와 다중 대체법 : continuous-development.tistory.com/160?category=736685

 

[ML/DL] 대체법의 종류와 다중 대체법 사용법

대체법의 종류 우선, 전통적인 대체방법으로는 완전 제거법, 한쌍 제거법(pairwise deletion), 평균 대체법(mean substitution), 회귀 대체법(regression imputation), 확률적 회귀대체(stochastic imputation) 등..

continuous-development.tistory.com

결측치의 종류와 결측치 처리 가이드라인: continuous-development.tistory.com/157?category=736685

 

[ML/DL]결측치의 종류와 결측치 처리 가이드라인

# 결측치의 종류 - 완전 무작위 결측(MCAR : Missing completely at random) 변수 상에서 발생한 결측치가 다른 변수들과 아무런 상관이 없는 경우 우리는 완전 무작위 결측(MCAR)이라고 부릅니다. 대부분의

continuous-development.tistory.com

 


 

# 결측치 확인

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를 사용했다. 이건 가장 많이 나온 값을 넣어준 것이다.

 

 

반응형