파이썬 분석 실무, 유저 Funnel 분석 - (3) 결측치 처리

|

python 분석 실무, 유저 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)

실습 파일 확인하기