본문 바로가기

R programming

시계열 데이터 밑바닥부터 다루기 in R (1)

반응형

우리 일상 속 많은 데이터형태 중 하나는 시간의 흐름에 따라 기록된

시계열 데이터다.

개인적으로도 시계열데이터를 다루는 것이 재밌고 흥미로운 점도 참 많다.

시간이 지남에 따라 어떠한 변화의 추이를 분석하는 것은 정말 재밌다!

티켓가격 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")

위와 같은 방법으로 연도, 월, 일을 추출할 수 있다.

 

반응형