TimeSeries Data 다루기
Motivation
기상청 기후 데이터를 분석할 일이 생겼다. 폭염과 일교차가 정말 심해지고 있는지, 최근 몇 년간 얼마나 어떻게 심해지고 있는지를 파악하기 위해서다. 그래서 TimeSeries data를 다루는 방법 및 DateTimeIndex
자료형에 대해 공부해보게 되었다.
데이터셋
- 기상자료개방포털
- 메인페이지>기후통계분석>기후분석>기온분석 (링크)
- 기간과 지역을 설정한 뒤, CSV 파일로 다운받을 수 있다.
인덱스 설정
1) 파일을 읽어들일 때 인덱스로 설정하기
read_csv()
할 때 옵션 지정index_col='date'
parse_dates=True
2) 데이터프레임의 열을 인덱스로 설정하기
- 일반적인 방법으로 파일을 읽어들인다.
data = pd.read_csv("seoul.csv", encoding="utf-8", skiprows=8, header=None, names=['date','region','min','mean','max'])
- datetime 형으로 변환한 뒤, 인덱스로 설정
data['date'] = pd.to_datetime(data['date'])
data = data.set_index('date')
추출하기 Subsetting
특정 연/월 등 필요한 데이터만 추출해야 할 때 쉽게 수행할 수 있다. ‘January’, ‘JAN’ 등의 변형된 포맷도 사용 가능하다.
data.loc['2017-08'].head()
data.loc['2016-JAN'].head()
data.loc['2017'].count()
슬라이싱도 가능하다.
data.loc['2016-07':'2016-08']
리샘플링 Resampling
pd.resample()
- 리샘플링의 종류에는 upsampling과 downsampling이 있다.
- 시간 단위로 group by하는 것은 업샘플링에 해당한다.
data.resample('M').max()
output[01]:
최저기온 평균 최대기온
date
2010-01-31 5.8 2.4 8.4
2010-02-28 12.2 9.8 17.9
2010-03-31 8.7 5.9 14.2
2010-04-30 16.8 13.3 20.7
리샘플링한 뒤의 date 컬럼 값은 구간의 오른쪽 한계값이 표시된다.
- 다운샘플링
- 더 작은 시간 단위로 쪼개는 것이다.
- NaN이 발생해 값을 채워야 할 경우가 발생 (보간)
- backfill, forwardfill, nearest 등
시각화
습관처럼 seaborn을 사용하면 에러가 발생한다. 인덱스를 x축으로 사용할 수 없어서인 것 같다.
import seaborn as sns
sns.lineplot(x="date", y="max", data=data_2018)
Output[01]: ValueError: Could not interpret input 'date'
기본적인 문법을 사용해 오히려 간단하게 plotting할 수 있다.
import matplotlib.pyplot as plt
data_2018 = data.loc['2018']
plt.plot(data_2018)
참고자료
Subscribe via RSS