우리 일상 속 많은 데이터형태 중 하나는 시간의 흐름에 따라 기록된
시계열 데이터다.
개인적으로도 시계열데이터를 다루는 것이 재밌고 흥미로운 점도 참 많다.
시간이 지남에 따라 어떠한 변화의 추이를 분석하는 것은 정말 재밌다!
티켓가격 EDA 한 것 중에도 시계열데이터를 다루어 인터랙티브하게 만들어 둔 것도 있었지만,
구글의 힘을 받아 구현하고 싶은 내용을 어찌어찌 구현해본 것이지, 기초적인 내용을 알고 한 것은 아니었다.
그래서 오늘 정리해볼 내용은 '시계열 데이터 밑바닥부터 다루기'이다.
그리고 뭐니뭐니해도 데이터는 역시 전처리가 중요하다.
시간 데이터의 형식을 알아보자!
한국에서는 보통 년-월-일 순으로 표시하지만, 외국에서는 월-일-년 혹은 일-월-년 순으로 표기하는 것을 볼 수 있다.
그렇기 때문에 'jan-01-2020' ,'1-1-2020' 등 다양한 포맷의 데이터 형식을 마주하게 된다.
날짜와 시간을 다루는 국제표준 포맷이 있는데 ISO 8601이다.
이 국제표준에 따르면 날짜는 YYYY-MM-DD 형태로 표현해야한다. 예컨대 이 글을 작성하는
2020년 2월 3일은 2020-02-03로 표시한다.
4자리로 표현하는 연도, 2자리로 표현하는 달, 2자리로 표현하는 일 이다.
R에서는 as.Date를 통해서 날짜포맷형태로 저장할 수 있다.
as.Date를 사용하지않으면
날짜형태처럼 보일 수 있지만 실제로는 chr형태로 저장되기 때문에 주의해야한다.
as.Date("2020-02-03")
위와 같은 함수를 통해 날짜로 저장된다.
이럴때 아주 유용한 것이
anytime패키지에 있는 anytime 함수다.
anytime을 활용해 다양한 포맷으로 되어있는 (e.g. JANUARY-01-2020, JAN 01 2020) 데이터를
POSIXct형태로 바꾸고, YYYY-MM-DD 형태의 국제표준 포맷으로 바꾼다.
시간을 나타내는 국제표준도 이와 똑같다.
YYYY-MM-DD HH:MM:SS로 시간을 표현한다.
따라서
as.POSIXct("2020-02-03 02:22:22")
위와 같은 방법으로 표준 시간을 저장한다.
lubridate를 알아보자
lubridate는 R에서 쉽게 날짜와 시간을 다루기 위한 tidyverse의 패키지다.
해당 패키지는 타임존을 다룰 수 있고, 표준형태로 빠르게 데이터를 파싱할 수 있다.
특히 다양한 형태로 생겨먹은 날짜데이터를 표준형태로 파싱할 수 있도록 돕는다.
예컨대
ymd("2019-01-01")
mdy("01-01-2019")
dym("01-2019-01")
ydm("2019-01-01")
myd("01-2019-01")
dmy("01-01-2019")
""안에 입력된 연도, 달, 일을 위와 같은 함수로 파싱하게 되면
모두 표준형태의 2019-01-01(2019년 1월 1일)로 변환된다.
parse_date_time(c("JAN 01 2019", "2019 01 JAN" ), +
order=c("mdy","ydm"))
복수의 날짜데이터를 위와 같이 파싱을 할 수도 있다.
이렇게 파싱을 하게 될 경우
"2019-01-01 UTC" "2019-01-01 UTC"
결과값이 나오게 된다. (따로 타임존을 지정하지 않을경우 UTC가 디폴트)
lubridate패키지는 날짜데이터를 다루기 굉장히 편리하다.
파싱한 값을 기반으로 연도, 월, 일 등 특정 값만을 추출할 수 있고,
파싱한 값이 무슨 요일, 혹은 달인지를 계산해 향후 활용할 수 있다.
year("2020-02-03")
month("2020-02-03")
yday("2020-02-03")
위와 같은 방법으로 연도, 월, 일을 추출할 수 있다.
'R programming' 카테고리의 다른 글
길이가 다른 값들을 구분하여 각 열로 나누어주기 in R (0) | 2020.06.13 |
---|---|
시계열 데이터 밑바닥부터 다루기 in R (2) (0) | 2020.02.04 |
data.frame과 data.table을 비교해보자 in R (0) | 2019.10.28 |
지도학습(supervised learning): 의사결정나무(decision tree)이해하기 (0) | 2019.07.21 |
ROC 커브와 AUC (를 이해하기 전 민감도와 특이도 이해하기) (0) | 2019.07.20 |