728x90
모든 데이터가 다 있으면 좋겠지만 데이터를 수집하다보면 결측값들이 존재한다. 데이터가 많다면 비어있는 데이터를 삭제할 수 있다. 데이터셋의 크기가 작다면 결측값들을 평균, 최빈값 또는 중간값 등으로 채워 넣는다. 마지막으로 모델링을 통해 예측되는 값을 넣을 수도 있는데 이는 잘 사용하지 않는다. 정확하게 데이터간의 관계를 파악하고 있어야 가능하고, 이러한 예측값이 정확하다는 보장도 없다.
애플과 삼성전자의 주가데이터를 통해 결측값을 삭제 또는 평균 등의 값으로 채워 넣는 방법에 대해 알아보자.
우선 삼성전자와 애플의 주가를 불러오자.
import FinanceDataReader as fdr
if __name__ == '__main__':
aapl = fdr.DataReader('AAPL', '2020-04-01')
ssec = fdr.DataReader('005930', '2020-04-01')
price = aapl[['Close']].merge(ssec[['Close']], how='outer', left_index=True, right_index=True)
price = price.rename(columns={'Close_x': 'AAPL', 'Close_y': 'SSEC'})
print(price)
결과 값
AAPL SSEC
Date
2020-04-01 60.23 45800.0
2020-04-02 61.23 46800.0
2020-04-03 60.35 47000.0
2020-04-06 65.62 48700.0
2020-04-07 64.86 49600.0
2020-04-08 66.52 48600.0
2020-04-09 67.00 49100.0
2020-04-10 NaN 49250.0
2020-04-13 68.31 48300.0
2020-04-14 71.76 49000.0
2020-04-15 71.11 NaN
2020-04-16 71.67 49000.0
2020-04-17 70.70 51400.0
2020-04-20 69.23 50100.0
2020-04-21 67.09 49250.0
2020-04-22 69.03 49850.0
2020-04-23 68.76 49850.0
2020-04-24 70.74 49350.0
2020-04-27 70.79 49850.0
2020-04-28 69.64 50100.0
2020-04-29 71.93 50000.0
2020-04-30 73.45 NaN
2020-05-01 72.27 NaN
결과 값을 보면 애플은 4월 10일, 삼성전자는 4월 30일, 그리고 5월 1일 데이터가 없다. 이는 두 나라의 공휴일이 다르기 때문에 생기는 결과이다. 시계열 데이터는 기본적으로 전일 값을 가져오거나 아니면 결측값을 삭제한다. 하지만 우리는 다양한 방법을 실습해보기로 한다.
1) 결측값 삭제
print(price.dropna())
결과 값
AAPL SSEC
Date
2020-04-01 60.23 45800.0
2020-04-02 61.23 46800.0
2020-04-03 60.35 47000.0
2020-04-06 65.62 48700.0
2020-04-07 64.86 49600.0
2020-04-08 66.52 48600.0
2020-04-09 67.00 49100.0
2020-04-13 68.31 48300.0
2020-04-14 71.76 49000.0
2020-04-16 71.67 49000.0
2020-04-17 70.70 51400.0
2020-04-20 69.23 50100.0
2020-04-21 67.09 49250.0
2020-04-22 69.03 49850.0
2020-04-23 68.76 49850.0
2020-04-24 70.74 49350.0
2020-04-27 70.79 49850.0
2020-04-28 69.64 50100.0
2020-04-29 71.93 50000.0
2) 평균
print(price.fillna(price.mean()))
결과 값
AAPL SSEC
Date
2020-04-01 60.23000 45800.000000
2020-04-02 61.23000 46800.000000
2020-04-03 60.35000 47000.000000
2020-04-06 65.62000 48700.000000
2020-04-07 64.86000 49600.000000
2020-04-08 66.52000 48600.000000
2020-04-09 67.00000 49100.000000
2020-04-10 100.81116 49250.000000
2020-04-13 68.31000 48300.000000
2020-04-14 71.76000 49000.000000
2020-04-15 71.11000 56766.853933
2020-04-16 71.67000 49000.000000
2020-04-17 70.70000 51400.000000
2020-04-20 69.23000 50100.000000
2020-04-21 67.09000 49250.000000
2020-04-22 69.03000 49850.000000
2020-04-23 68.76000 49850.000000
2020-04-24 70.74000 49350.000000
2020-04-27 70.79000 49850.000000
2020-04-28 69.64000 50100.000000
2020-04-29 71.93000 50000.000000
2020-04-30 73.45000 56766.853933
2020-05-01 72.27000 56766.853933
3) 중간값
print(price.fillna(price.median()))
결과 값
AAPL SSEC
Date
2020-04-01 60.23 45800.0
2020-04-02 61.23 46800.0
2020-04-03 60.35 47000.0
2020-04-06 65.62 48700.0
2020-04-07 64.86 49600.0
2020-04-08 66.52 48600.0
2020-04-09 67.00 49100.0
2020-04-10 108.94 49250.0
2020-04-13 68.31 48300.0
2020-04-14 71.76 49000.0
2020-04-15 71.11 56250.0
2020-04-16 71.67 49000.0
2020-04-17 70.70 51400.0
2020-04-20 69.23 50100.0
2020-04-21 67.09 49250.0
2020-04-22 69.03 49850.0
2020-04-23 68.76 49850.0
2020-04-24 70.74 49350.0
2020-04-27 70.79 49850.0
2020-04-28 69.64 50100.0
2020-04-29 71.93 50000.0
2020-04-30 73.45 56250.0
2020-05-01 72.27 56250.0
4) 직전값
print(price.ffill())
결과 값
AAPL SSEC
Date
2020-04-01 60.23 45800.0
2020-04-02 61.23 46800.0
2020-04-03 60.35 47000.0
2020-04-06 65.62 48700.0
2020-04-07 64.86 49600.0
2020-04-08 66.52 48600.0
2020-04-09 67.00 49100.0
2020-04-10 67.00 49250.0
2020-04-13 68.31 48300.0
2020-04-14 71.76 49000.0
2020-04-15 71.11 49000.0
2020-04-16 71.67 49000.0
2020-04-17 70.70 51400.0
2020-04-20 69.23 50100.0
2020-04-21 67.09 49250.0
2020-04-22 69.03 49850.0
2020-04-23 68.76 49850.0
2020-04-24 70.74 49350.0
2020-04-27 70.79 49850.0
2020-04-28 69.64 50100.0
2020-04-29 71.93 50000.0
2020-04-30 73.45 50000.0
2020-05-01 72.27 50000.0
728x90
'Data Science > Data Preprocessing' 카테고리의 다른 글
[03. Feature Engineering] 002. Scaling (0) | 2021.06.24 |
---|---|
[03. Feature Engineering] 001. Aggregation (0) | 2021.06.24 |
[02. Data Quality Assessment] 003. Duplicate values (0) | 2020.12.18 |
[02. Data Quality Assessment] 002. Outlier values (0) | 2020.12.18 |
[01. 데이터] 001. 데이터 전처리 (0) | 2020.05.02 |