본문 바로가기
[개발] 이야기

pandas 시각화 - 결측치를 시각화 해보자 [seaborn, missingno]

by 헤이나우
반응형

결측치는 머신러닝을할때나 딥러닝을 할 때 가장 고민스러운 결측치 즉, 비어있는값을 어떤 값으로 채울지 입니다.

보통 경험상 결측치를 채우는 방법은 아래 방법으로 많이 합니다.

  1. 숫자형일경우, mean, std, midian이런 수치로 많이 채우게 됩니다.
  2. 문자열같은 경우 가장많이 나오는 건수의 문자열로 채워주기도 합니다.

하지만 데이터마다 채워야하는 정보는 다를수 있기 때문에 본인이 판단해서 채워야 합니다.

그럼 우리는 결측치가 데이터셋에 얼만큼있는지 판별하기 위한 시각화 방법을 알려드리겠습니다.

 

크게 2가지 방법을 알려드리겠습니다.

  1. 기본 pandas및 seaborn으로 시각화
  2. missingno를 이용한 시각화 (아주 간편)

그럼 먼저 pandas 및 seaborn을 이용한 시각화를 해보겠습니다.

필요한 패키지 및 모듈 import

import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib import style
import pandas as pd
pd.options.display.max_columns = 50
style.use('ggplot') or plt.style.use('ggplot')
plt.style.use('fivethirtyeight')
plt.rc('font', family='Malgun Gothic')
plt.rc('axes', unicode_minus=False)
#plt.rc('font', family='AppleGothic')
from IPython.display import set_matplotlib_formats
set_matplotlib_formats('retina')

 

 

여기선 타이타닉 셋으로 시각화를 해보겠습니다.

혹시 없으시면 아래파일을 다운로하고 노트북파일이 있는 경로에 풀어 주세요.

titanic.csv
0.03MB

 

df_titanic = pd.read_csv('./data/test.csv')
df_titanic.info()

 

info를 보시면 총 rangeIndex가 418개 인데 Age, Fare, Cabin은 418개의 데이터가 없습니다.

그럼 결측치가 있다고 판단이 되네요 이걸 좀더 시각화를 해보겠습니다.

결측치 건수 bar차트로 확인하기 (with pandas plot)

df_missing = df_titanic.isna().sum()
df_missing.plot.bar(figsize=(15,5), rot=0)

df_titanic.isna()를 통해서 null인값인지 True, False값을 구합니다. python은 불린값이 1, 0으로 치환이 되기 때문에 sum()을 해주면 결측치인것의 피처별 개수가 나옵니다.

 

전체 리스트에서 결측치 부분 확인하기 (with seaborn)

plt.figure(figsize=(8,8))
sns.heatmap(df_titanic.isna(), cmap = 'Blues_r')

.isna()를하면 전체 데이터의 null값인지 True, False가 나온다고 하였는데 이를 heatmap에 그려보면 null값만 1로 보이게 됩니다. 나머진 0이겠군요!

Blus_r은 색영역을 Blue계열로 하는데 _r로 반대로 리버스 해줍니다. (잘보이기 위해서)

 

missingno

설치

  1. conda install -c conda-forge missingno
  2. conda install -c conda-forge/label/gcc7 missingno
  3. conda install -c conda-forge/label/cf201901 missingno
import missingno
missingno.__version__

'0.4.2'

결측치 bar 차트

missingno.bar(df_titanic)

  • 보시면 info에서 봤던 수치가 보입니다. null이 아닌 개수를 시각화한 차트입니다.
  • Cabin이 결측치가 많아 보이네요

결측치 matrix

missingno.matrix(df_titanic)

우리가 seaborn으로 그렸던 차트입니다. missingno로 아주 쉽게 그릴수가 있네요

 

 

.

.

.

 

 

 

  • 여기까지 결측치를 시각화하는 아주 간단한 방법을 알아 봤습니다.
  • 물론 이거말고도 missingno에는 다양한 결측치 처리에대한 알고리즘 및 시각화 기능이 아주 많습니다. 기회가 되시면 직접 해보면서 하나씩 보는것도 좋겠네요!

감사합니다.

반응형

댓글