반응형
시계열데이터에 관심이 생겨서 보게됐다.
시계열 데이터는 시간 데이터를 인덱스로 하는 연속된 데이터
보통 시간이 String으로 되어있을 경우가 많은데 DateTime 인덱스로 처리하는게 더 강력하다.
Time Resampling
자신에게 필요한 시간단위로 Resampling 하는것.
groupby로 Resampling할 수도 있지만 Time Resampling이 더 유용하다.
Time Shifting
데이터를 임의 시간마니큼 앞, 뒤로 이동시킬 수 있음
Rolling and Expanding
데이터에 노이즈가 포함될 수 있음. (데이터가 빠지거나 / 중복되거나 / outlier거나 등등)
이럴경우 데이터의 트렌드를 구하기 위해서 뭉뚱그려 smoothing하는 경우가 있는데 rolling mean을 사용함(moving average) expanding도 비슷한데, window가 sliding되지 않고 시점이 고정된 채로 증가하면서 계산됨.
실습내용때 사용한 함수들 정리해서 추가할것
from datetime import datetime
today=datetime(2020,12,28)
today.year, today.month, today.day
#datetime이 아닌 string Datetime을 datetime type으로 바꾸려면
df['Date'] = df['Date'].apply(pd.to_datetime)
#특정 col을 index로 바꾸려면
df.set_index('칼럼명', inplace = True)
#시계열을 groupby로 할수도 있지만 그러면 multi-level index를 다뤄야한다.
#이를 편하게 하기 위해서 pandas에서는 resampling을 사용하는데,
#판다스의 resampling을 사용하기 위해서는 offset String을 외우거나 찾아가면서 써야한다.
#대표적으로 'A','M','D' = Anuual, month, day end값, 'AS','MS','DS' 같이 'S'를 붙이면 start값.
#가장 좋아보이는 기능은 인덱싱 기능인데 말도안된다. 한번 보자
#df['2015':]라고 하면 2015년 이후 자료를 인덱싱 할 수 있고
#df['2015-05':]라고하면 2015년 5월 이후
#df['2015-05-15':]라고하면 2015년 5월 15일 이후 를 인덱싱 할 수 있다.
#마찬가지로 df['2015-05-15':'2018-12-01']라고도 인덱싱이 가능하다
# '-' 대신 '/'를 사용할 수 도 있다.
#이처럼 데이터 프레임 만들 때 data에 dictionary값으로 들어가게 된다.
pd.DataFrame(data = {'value': np.random.rand(len(daily_daterange))},
index = daily_daterange)
#시간단위로 미룰수도 있는데, df.shift(num), df.tshift(freq = 'D',periods = 1)처럼 할수도있음.
#마지막으로 rolling은 이거 봐도 될 것 같다.
df['Close: 20Day Mean'] = df['Close'].rolling(window=20).mean()
df['Upper'] = df['Close: 20Day Mean'] + 2*df['Close'].rolling(20).std()
df['Lower'] = df['Close: 20Day Mean'] - 2*df['Close'].rolling(20).std()
df[['Close', 'Close: 20Day Mean', 'Upper', 'Lower']]['2018'].plot()
실습 내용은 아래 Github에 올려뒀으니 나중에 다시 보자.
반응형
'Data Handling > 시계열데이터' 카테고리의 다른 글
ARIMA 모델 (0) | 2021.01.04 |
---|---|
Pandas로 하는 시계열 데이터분석 (4) [시계열 데이터 분석 기본 모델] (0) | 2021.01.01 |
Pandas로 하는 시계열 데이터분석 (3) [시계열 데이터 특성 및 ETS모델이해] (0) | 2020.12.30 |
Pandas로 하는 시계열 데이터분석 (2) [TimeZone, Visualize] (0) | 2020.12.29 |