728x90
- 타임스탬프 내 결측값이 있어 길이가 다른 시계열 데이터의 경우, pandas의 indexing(multi indexing)과 reindexing 기능을 통해 모든 데이터가 동일한 타임 스탬프 길이를 가지고 있도록 설정할 수 있다.
- set() 함수를 통해 모든 타임스탬프 리스트를 구하고, 이를 토대로 indexing, reindexing을 하며 결측값을 채운 후에 reset_index로 인덱스를 초기화하면 간편하게 타임스탬프의 길이를 맞출 수 있다.
- 결측값이 있는 데이터가 분석에 필요 없는 경우엔 pandas의 drop을 사용해 해당 행을 쉽게 제거할 수 있다.
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보다 이동평균이 더 적합한 상황이 많다 (전체 평균에 관한 개별 데이터값을 의심한만한 이유(이상치의 유무)가 있을 때는 이동평균을 사용)
- 이동평균으로 누락된 데이터를 대치할 때는 미래 예측을 위한 과거의 데이터만으로 이동평균 값을 구할 수 있는지, 사전관찰을 수월하게 만들 수 있는지 등을 고려해야 한다
- 사전관찰을 방지하기 위해선 누락이 발생되기 전의 데이터만 사용해야 함
- 하지만, 사전관찰을 고려하지 않는 상황이라면 누락된 데이터의 전과 후를 모두 포함하는 것이 최상의 추정치를 만들 수 있는 방법이 된다
- 산술평균 : 가장 일반적으로 사용됨
- 지수가중이동평균 : 비교적 최근 데이터에 더 많은 가중치를 줘 계산 가능
- 기하평균 : 일련의 데이터가 강한 상관관계를 가지고 시간이 지나면서 복합적인 값을 가지는 시계열에 유용
⑤ 평균으로 채우기
특정 시점만을 다루는 단면적인 맥락에서는 평균으로 채우는 것이 괜찮지만, 시계열 데이터의 경우 데이터셋의 전체 평균을 아는 것은 사전관찰을 의미하기 때문에 적절하지 않다
B. 보간법
- 전체 데이터를 기하학적인 행동에 제한하여 누락된 데이터값을 결정하는 방법
- 이동평균과 마찬가지로 보간법은 사전관찰의 영향도에 따라 과거와 미래의 데이터를 모두 활용하거나 둘 중 하나만 활용할 수도 있다
ex) 선형 보간법 (linear interpolation)
: 누락된 데이터가 주변 데이터에 선형적인 일관성을 갖도록 제한
시간에 따라 시스템이 동작하는 방식을 이미 알고 있을 때 유용 (연도에 따른 온도 변화에 대한 추세를 이미 알고 있을 때)
C. 영향받은 기간 삭제
- 누락된 데이터의 기간을 완전히 사용하지 않는 방법
3) 결측값 제거
df.drop()
반응형