본문 바로가기

Data Science/Pandas

[pandas] 누락된 데이터 (결측값, missing value) 다루기

728x90

출처 : https://analyticsindiamag.com/wp-content/uploads/2018/02/missing-values.png

 

  • 타임스탬프 내 결측값이 있어 길이가 다른 시계열 데이터의 경우, pandas의 indexing(multi indexing)과 reindexing 기능을 통해 모든 데이터가 동일한 타임 스탬프 길이를 가지고 있도록 설정할 수 있다.
  • set() 함수를 통해 모든 타임스탬프 리스트를 구하고, 이를 토대로 indexing, reindexing을 하며 결측값을 채운 후에 reset_index로 인덱스를 초기화하면 간편하게 타임스탬프의 길이를 맞출 수 있다.
  • 결측값이 있는 데이터가 분석에 필요 없는 경우엔 pandasdrop을 사용해 해당 행을 쉽게 제거할 수 있다.

 

1)      결측값 찾기

  • 빈 셀이 가장 많은 열 순서대로 나열됨
isnull().sum().sort_values(ascending=False)

 

 

2)      결측값 채우기

A.       대치법

: 데이터셋 전체의 관측에 기반하여 누락된 데이터를 채워넣는 방법

       특정한 값으로 채우기

df.fillna()

       이전 값으로 채우기 (forward fill)

fillna(method='ffill')

fillna(method='ffill', limit=number)

       이후 값으로 채우기 (backward fill)

fillna(method='pad')
  • 사전관찰이기 때문에 데이터를 사용하여 미래를 예측하지 않거나 특정 분야의 지식에 기반하여 데이터의 미래보다 과거를 채우는 것이 더 의미있는 경우에만 사용

       이동평균으로 채우기

  • 과거의 값으로 미래의 값을 예측한다는 관점에서 forward fill과 유사하지만 이동평균은 최근 과거의 여러 시간대 내용을 사용한다는 점에서 다르다
  • 데이터의 대치에 forward fill보다 이동평균이 더 적합한 상황이 많다 (전체 평균에 관한 개별 데이터값을 의심한만한 이유(이상치의 유무)가 있을 때는 이동평균을 사용)
  • 이동평균으로 누락된 데이터를 대치할 때는 미래 예측을 위한 과거의 데이터만으로 이동평균 값을 구할 수 있는지, 사전관찰을 수월하게 만들 수 있는지 등을 고려해야 한다
  • 사전관찰을 방지하기 위해선 누락이 발생되기 전의 데이터만 사용해야 함
  • 하지만, 사전관찰을 고려하지 않는 상황이라면 누락된 데이터의 전과 후를 모두 포함하는 것이 최상의 추정치를 만들 수 있는 방법이 된다
  1. 산술평균 : 가장 일반적으로 사용됨
  2. 지수가중이동평균 : 비교적 최근 데이터에 더 많은 가중치를 줘 계산 가능
  3. 기하평균 : 일련의 데이터가 강한 상관관계를 가지고 시간이 지나면서 복합적인 값을 가지는 시계열에 유용

 

       평균으로 채우기

특정 시점만을 다루는 단면적인 맥락에서는 평균으로 채우는 것이 괜찮지만, 시계열 데이터의 경우 데이터셋의 전체 평균을 아는 것은 사전관찰을 의미하기 때문에 적절하지 않다

 

B.        보간법

  • 전체 데이터를 기하학적인 행동에 제한하여 누락된 데이터값을 결정하는 방법
  • 이동평균과 마찬가지로 보간법은 사전관찰의 영향도에 따라 과거와 미래의 데이터를 모두 활용하거나 둘 중 하나만 활용할 수도 있다

ex) 선형 보간법 (linear interpolation)

: 누락된 데이터가 주변 데이터에 선형적인 일관성을 갖도록 제한

시간에 따라 시스템이 동작하는 방식을 이미 알고 있을 때 유용 (연도에 따른 온도 변화에 대한 추세를 이미 알고 있을 때)

 

 

C.       영향받은 기간 삭제

  • 누락된 데이터의 기간을 완전히 사용하지 않는 방법

 

3)      결측값 제거

df.drop()
반응형