파이썬 분석 실무, 유저 Funnel 분석 - (3) 결측치 처리
31 Oct 2018 | python missing valuepython 분석 실무, 유저 funnel 분석
결측치 처리(Missing Value)
결측치를 어떻게 처리할 것인가는 결측치의 수량, 데이터 타입, 그리고 결측값의 원인에 따라 다르다. 전체 샘플의 수가 많다면 상대적으로 적은 결측값을 버릴 수도 있고, 데이터의 타입이 연속되어 있는 시간이라면 앞뒤 중간 값을 넣을 수 있다. 데이터를 합치면서 새로운 데이터를 만드는 경우, 예를 들어 결제 내역 로그를 바탕으로 일별 결제건수를 정리한다면 결제건수 중 결측값이 있는 곳은 결제 내역이 없는 즉 0개의 결제가 일어난 날로 보고 0으로 결측값을 채워 넣기도 한다. 또한 결측값을 채워 넣을 정보가 없는 경우, 결측값이 없는 데이터들을 바탕으로 결측값을 모델링을 통해 예측하여 넣을 수 있다.
dropna()
- 샘플수가 많다면 missing values 를 포함하는 행을 모두 삭제하는 것이 가능함
# 결측치가 하나라도 있으면 버리는 코드 예제
df.dropna()
# 모든 값이 Null일 경우만 버리는 코드 예제
df.dropna(how='all')
# 결측치가 두개 이상인 경우 버리는 코드 예제
df.dropna(thresh=2)
# 해당 column의 결측치가 있는 것을 선택하여 버리는 코드 예제
df.dropna(subset=['name', 'born'])
# 결측치가 하나 이상 있는 Case만 선택하는 코드 예제
df[df.isnull().any(axis=1)]
fillna()
- 샘플수가 충분하지 않을 경우, 이 명령어를 이용해 Null값을 채우는 것이 가능하다.
- 연속형인 경우 Mean값이나 Median을 이용하고, 명목형인 경우 Mode(최빈치)를 이용한다.
- 결측값이 없는 데이터를 이용해 예측 모형을 만들어 Null 값을 채워 넣을 수 있다.
# frequency table - 가장 빈도가 높은 것부터 차근차근 나온다
df_ms.documentposition.value_counts()
# OTHERAPP 213775
# MYPOLARISDRIVE 55518
# LOCALSTORAGE 18922
# NEWDOCUMENT 7612
# NONE 4335
# OTHERCLOUD 1617
# SHAREDDOCUMENT 76
# Name: documentposition, dtype: int64
# fillna with most frequent value (MODE)
freq_values = df_ms.documentposition.value_counts().index[0]
df_ms['documentposition'] = df_ms['documentposition'].fillna(freq_values)