데이터 분석 기초 | 결측값 처리 | 결측값 시각화(matplotlib, missingno 라이브러리) | 결측값 확인(isna / notna / isnull / notnull) | 결측값 삭제(dropna 사용법) | 결측값 대체(fillna / replace)

728x90

 

1. 결측값 처리 라이브러리 

 

1-1) matplotlib 활용해서 결측값 시각화

 

▶ matplotlib

: 파이썬에서 사용할 수 있는 시각화 라이브러리. 주로 2D 그래프를 위한 패키지
(파이썬에서 matplotlib과 유사한 인터페이스를 지원하기 위해 시작, IPython과 협력해 대화형 시각화를 지원)

 

▶ 라이브러리 설치

pip install matplotlib
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

 

▶ 데이터셋 불러오기

titanic = pd.read_csv('./datasets/titanic.csv')

 

▶ 결측값 시각화

plt.figure(figsize=(12, 7))
sns.heatmap(titanic.isnull(), cbar=False)
plt.show()

: 12x7 사이즈로 출력

: seaborn의 heatmap() 함수로 결측값(isnull) 시각화

>> Age, Cabin, Embarked 등 3개의 컬럼에 결측값이 존재함을  알수 있음
>> Cabin 컬럼은 결측값이 대부분인 것으로 보임
>> 기존 값을 대체하더라도 이 데이터를 사용하는 것은 힘듦

 


1-2)  missingno 활용해서 결측값 시각화

 

▶ missingno 라이브러리 설치

pip install missingno
import missingno as msno

 

▶ matrix()

: 결측값 시각화

msno.matrix(titanic)

 


2. 결측값 확인하기

 

▶ .info()

: 전반적인 데이터 정보 확인하기

titanic.info()

 

2-1) 결측값 데이터 

 

▶ isna()

: 결측값 유무 확인하기

: isnull() 함수와 동일한 기능

titanic.isna().head()

 

▶ isna().sum() 

: 결측값 데이터의 개수 합계 구하기

titanic.isna().sum()

 

* 1개 열의 결측값 계산

titanic.Age.isna().sum()

 

▶ isnull().sum() 함수

: 결측값 데이터의 개수 합계 구하기

titanic.isnull().sum()

 

* 1개 열의 결측값 계산

titanic.Cabin.isnull().sum()

 

2-2) 결측값이 아닌 데이터 

 

▶ notna().sum() 함수

: 결측값이 아닌 데이터 개수 합계

titanic.notna().sum()

 

▶ notnull().sum()

: 결측값이 아닌 데이터 개수 합계

titanic.notnull().sum()

 


3. 결측값 삭제 / 제거

 

▶ 결측값 삭제/제거

: 가능하면 하지 말아야 함(최악의 상황에서 진행하는 것)

: 데이터가 많으면 2개 이상의 결측값이 있는 행은 삭제해도 무방
: 데이터 분석에 결정적인 역할을 하는 행은 결측값이 1개 있더라도 해당 행을 삭제하면 안 됨
: 판다스의 dropna() 함수 이용

 

▶ dropna()

: 결측값이 1개 이상 있는 행을 다 삭제

titanic.dropna()

>> 원본 데이터셋의 행이 891개였는데 결측값이 1개라도 있는 행이 삭제되면서 183개로 줄어들었음

 

▶ dropna(axis = 'columns')

: 결측값이 1개 이상 있는 열을 삭제

: axis = 의 기본값은 'rows' (axis를 따로 적지 않으면 기본값으로 설정됨)

titanic.dropna(axis='columns')

>> 원본 데이터셋의 열이 12개였는데 결측값이 1개라도 있는 열이 삭제되면서 9개로 줄어들었음

 

 

▶ dropna(how = ' ')

: 모든 열에서 결측값의 개수가 특정 수치를 넘어가는 행만 삭제하기

 

*  how = 'all'

: 모든 열에 결측값이 있는 행을 삭제

titanic.dropna(how = 'all')

>> 타이타닉 데이터셋에는 모든 열의 데이터가 결측값인 승객은 없으므로 삭제된 데이터 없음

 

* how = 'any'

: 1개 이상의 열에 결측값이 있는 행을 삭제

titanic.dropna(how = 'any')

 

dropna(thresh = )

: thresh로 임계값을 설정해서 삭제

titanic.dropna(thresh=2)

: 2개 이상의 열에 결측값이 존재하는 데이터를 삭제하라는 의미

>> 타이타닉 데이터셋에는 2개 이상의 열에 결측값이 존재하는 승객은 없으므로 삭제된 데이터 없음

 

▶ dropna(subset = [  ])

: 지정한 행에 결측값이 있는 행만 삭제

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

: 2개의 열 중 하나에라도 결측값이 있는 행은 삭제됨

 


4. 결측값 대체/보간

 

: 결측값을 특정 값 또는 기존 데이터를 참조하여 적합한 값으로 채우는 방법

: 기존의 값을 보정하는 것

 

4-1) 특정 값으로 결측값 채우기

 

▶ fillna()

: 결측값에 fillna()로 특정 값 채우기

titanic.Age.fillna(25)

 

▶ replace()

: 기존 값을 특정 값으로 대체하기

titanic.Age.replace(to_replace = np.nan, value = 25)

 

4-2) 평균값으로 결측값 채우기

 

▶ .mean()

print(titanic.Age.mean())

titanic.Age.fillna(titanic.Age.mean())

728x90

댓글