안녕하세요! 제리입니다.
오늘은 시계열 데이터에 대해서 다뤄보는데 그 중 pandas를 사용한 방법에 대해서 소개하려고 합니다.
참고한 곳은 유데미 강의 중 '시계열 데이터 분석 with 파이썬' 입니다!
우선 시계열 데이터는 시간 속 데이터로 일반 데이터와 다른 특징을 지니고 있기에
다른 데이터 처리 방법을 사용해야합니다.
우선 코드로 간단히 한번 봐보시죠!
간단한 시계열 데이터 처리
from datetime import datetime # 시계열 데이터를 표현하는 라이브러리 중 하나
# 연, 월, 일, 시, 분, 초 이렇게 있으며 입력하지 않은 값은 자연스럽게 0으로 처리가 됩니다.
my_date_time = datetime(my_year,my_month,my_day,my_hour,my_minute,my_second)
# 또는 이렇게 리스트 속에서 type을 바꿔주는 dtype을 이용해 datetime 형식으로 바꿔 줍니다. (여기서 64는 64bit를 의미합니다.)
np.array(['2016-03-15', '2017-05-24', '2018-08-09'], dtype='datetime64')
# 만일 시간을 추가 하고 싶다면 'datetime64[h]' 이런식으로 hour를 의미하는 h를 추가합니다.
여기까지가 시계열 데이터를 처리하는 극히 기초적인 부분입니다.
이렇게 흔히 format을 바꿔서 이 데이터가 시간 데이터라는 것을 의미해줘야 진행이 됩니다.
이제 pandas를 이용하도록 하겠습니다.
pandas를 이용한 시계열
# 월/일/연도 이런 식으로 표현이 되며, periods는 기간을 의미하고, freq는 어떤 방식으로 기간을 진행할 지 의미합니다. 아래에서는 day를 의미하는 것입니다.
pd.date_range('7/8/2018', periods=7, freq='D')
여기서 많이 쓰이는 방법이 바로 인덱스 부분을 날짜로 바꿔서 시계열 데이터를 처리하는 것입니다.
df.set_index('Date', inplace = True)
df = pd.read_csv('데이터 csv', index_col='Date', parse_dates=True)
이것을 생각보다 많이 사용하기에 인덱스를 설정하는 것 알아주시면 좋습니다!
또한 처음 데이터를 불러올 때부터 인덱스를 바꿀 수 있습니다.
이제 시간 데이터를 인덱스로 처리했다면 시간에 따라 값에 대해서 구해봐야겠죠??
- resample을 이용한 평균, 최대, 최소 등 구하기
# Yearly Means
df.resample(rule='A').mean()
# monthly min
df.resample(rule='M').min()
# 바차트로 그려보기
df[컬럼].resample('M').max().plot.bar()
# 참고로 그냥 라인 차트를 그려보고 싶다면 그냥 plot()으로 하시면 됩니다.
shift를 이용한 값 이동
날짜에 대한 데이터 값들을 주어진 수에 맞게 앞이나 뒤로 하나씩 전체적으로 옮길 수 있습니다.
우선 한번 보시죠
# 다음 날짜로 값을 이동
df.shift(1)
# 이전 날짜로 값을 이동
df.shift(-1)
괄호 안 숫자의 변경을 통해 이동할 날짜를 작성해주면 되고 다음 날짜로 이동될 시 1행의 데이터는 NAN 결측치 처리가 되며 마지막 행의 값은 없어지게 됩니다. 이 점 유의하시기 바랍니다.
rolling & expanding
롤링도 어떻게 보면 shift와 유사하다고 할 수 있습니다. 다만 다른 점은 shift는 값을 이동했다면,
롤링은 윈도우(Window)의 개념으로 평균을 내서 이동한다고 보시면 될 것 같습니다.
날짜를 총 30개를 더해서 평균을 낸 그림이 주황색입니다.
주황색 라인을 자세히 보시면 앞 부분이 없다는 것을 알 수 있습니다. 처음부터 30개이기에 앞부분의 데이터를 활용하기에 처음 값들은 NAN 처리가 됩니다.
롤링이 커질수록 좀 더 일반적인 현상을 보여주고 smooth하다는 것을 알 수 있습니다!
또한 mean()이 아니라 다른 것을 사용하셔도 됩니다~
rolling의 경우는 주어진 날짜에 대해서 집계함수를 계산한 것이지만 누적하는 결과를 가져오는 것이 바로 expanding입니다.
그래프의 마지막 값은 전체의 평균이 될 것입니다.
마지막으로 format 지정 표를 보여드리도록 하겠습니다.
흔히 이것을 이용해 format을 지정해줍니다. '%Y-%m-%d' 이런식으로 많이 사용하기에 알아두시면 좋습니다!
다음은 pandas가 아닌 statsmodels를 이용하여 시계열 처리에 대해서 다뤄보도록 하겠습니다.
감사합니다.
'머신러닝' 카테고리의 다른 글
시계열 공부 (1) - 시계열회귀분석 (0) | 2023.06.27 |
---|---|
Statsmodels 이용한 시계열 분석에 대해 (0) | 2023.05.04 |
클러스터링(군집화) 알고리즘에 대해 (1) | 2023.05.01 |
Pandas에 대해 (Series, DataFrame) (0) | 2023.04.30 |
Numpy에 대해 (0) | 2023.04.30 |