EDA - 결측치 처리 ( pandas, matplotlib, seaborn etc )

반응형

Kaggle 로 데이터 분석 혹은 머신러닝 실습을 하다 보면 자주 쓰이는 파이썬의 라이브러리들을 정리하려고 합니다.

 

캐글에서 여러 사람들의 노트를 보면 쉬운 문법으로 정말 인터렉티브한 분석을 합니다. 

그런 부분들을 하나씩 모아서 저도 써볼 수 있도록 노력하겠습니다. 

 

데이터 세트 하나를 정해놓고 쭉 분석을 하는 포스팅은 Kaggle 카테고리에서 진행하도록 하고 

여기에서는 제가 실습했었던 부분들 중 정말 유용하게 쓰일 수 있는 테크닉이나 plotting 기법등을 리뷰하고 

다른 캐글 랭커들의 테크닉도 발췌해서 같이 공부하면 좋을 듯 합니다 :0

 


결측치 처리 

결측치를 확인할 때는 info() 메서드를 통해 가장 심플하게 확인이 가능합니다. 

뿐만 아니라 데이터의 형태, 칼럼의 개수등을 파악하기에 정말 좋습니다.

 

캐글에서는 missing value 들 , 즉 결측값들을 굉장히 다양한 방법으로 핸들링합니다.

 

우선 기본적으로 결측값의 합을 볼 수 있는 코드인데요

isnull()은 데이터의 결측값을 불타입으로 반환합니다. True 를 반환하는 데이터들을 모두 더하면 해당 칼럼의 결측값 개수를 파악할 수 있겠죠?

그 결과들의 합, 즉 결측값의 총합을 구할 수 있는거죠.

저는 여기서 결측값이 많이 관측되는 컬럼의 데이터 타입을 확인합니다.

수치형 자료라면 평균, 중간값, 최빈값 중에서 가장 적합한 값으로 결측값들을 채워넣습니다. 

명목형 자료라면 'Nan'이라는 문자열로 결측값들을 채우죠. 

 

원래 이정도 수준에서 결측값 핸들링을 종료합니다. 

하지만 많은 사람들이 함수를 만들고 결측값들의 백분율을 구해서 출력값을 정말 보기 쉽게 만들어 놨어요.

 

결측값 핸들링 함수

missing_pct 라는 함수는 데이터 프레임을 입력값으로 받고 데이터 프레임을 return 해주네요.

 

missing_count_percent = df.isnull().sum() * 100 / df.shape[0]

위의 코드는 데이터의 결측값이 전체 데이터에서 차지하는 비율을 나타냅니다.

 

 

    df_missing_count_percent = pd.DataFrame(missing_count_percent).round(2)
    df_missing_count_percent = df_missing_count_percent.reset_index().rename(
                    columns={
                            'index':'Column',
                            0:'Missing_Percentage (%)'
                    }
                )

그 다음 결측값의 비율을 데이터 프레임화합니다.  ( pd.DataFrame 활용 ) 그리고 round() 메서드를 통해 소수점 아래 두 번째 수까지만 표현해줍니다.

 

df_missing_count_percent 라는 변수에 reset_index() 메서드를 사용해서 인덱스를 리셋시켜줍니다.

그런데 인덱스를 왜 리셋해주는걸까요?

 

데이터 프레임의 다양한 전처리 과정을 겪다보면 인덱스가 뒤죽박죽 섞일 때가 많습니다. 

이럴 때 인덱스를 다시 처음부터 재배열 해주는 유용한 함수입니다. 

reset_index() 는 행 인덱스를 초기화 합니다.

 

그 뒤에 rename() 메서드를 이용해서 컬럼의 이름을 바꿔주는 과정이 나옵니다. 

'index'가 어디서 나왔지? 생각했는데 reset_index()를 하게 되면

데이터 프레임에서 Column 이라고 되어 있는 부분이 index 라는 첫 번째 컬럼으로 자동 삽입됩니다. 

이럴 때 drop=True 옵션을 줘서 기존 인덱스를 버리고 재배열 해줘도 되지만 저런 식으로 이름을 바꿔줘도 됩니다. 

 

df_missing_value 역시 마찬가지로 똑같은 역할을 합니다 ! 

 

Final = df_missing_value.merge(df_missing_count_percent, 
		how = 'inner', left_on = 'Column', right_on = 'Column')

merge 의 파라미터인 how에 들어갈 옵션들

** pandas 의 merger() 메서드 

->  공통의 열을 기준으로 두 데이터프레임을 합쳐줍니다. sql에서 join 과 같은 역할을 합니다.

 

 

반응형