트렌드

[디블로터] ⑬시간 처리를 편리하게…‘루브리데이트’ 패키지

2016.04.05

데이터를 처리할 때 의외로 짜증나는 항목은 시간입니다. 날짜와 시간은 단순한 숫자가 아닙니다. 시간을 단순한 숫자로 인식하면 계산이 나오지 안 됩니다. 시간의 연산을 위해서는 시간을 ‘Date’나 ‘DateTime’이라는 객체 형식으로 저장해야 합니다.

시간은 보통 체계적으로 적혀있기는 합니다. 다만 꼭 체계적이라고 보기도 어렵습니다. 사람이 보기엔 괜찮아도 컴퓨터가 보기엔 적절하지 않을 수 있다는 의미입니다. 때문에 컴퓨터가 날짜로 인식하는 패턴에 맞추기 위해서 한 번 더 손이 가곤 합니다. 컴퓨터가 날짜로 인식하는 경우는 보통 ‘2016-04-03’같은 경우입니다. ‘2016년 04월 3일’, ’16. 4. 3′ 등의 형식일 때는 컴퓨터가 이해할 수 있는 형태로 변환해주는 과정이 필요합니다.

이번에 공부한 패키지는 이 과정을 굉장히 쉽게 만들어주는 루브리데이트(Lubridate) 패키지입니다. R의 기본기능으로도 날짜 데이터를 처리할 수는 있지만, 루브리데이트 패키지를 쓰면 훨씬 편리합니다. 이해를 돕기 위해 다음 사진을 보겠습니다.

lubridate (1)

루브리데이트의 ‘ymd()’ 함수를 활용한 결과입니다. ymd() 함수는 년-월-일 순으로 날짜를 정렬하는 함수입니다. 중요한 것은 ‘정렬한다’가 아닙니다. 어떤 구분자를 활용하든지 날짜를 제대로 파악해서 저장한다는 점입니다. 구분자로 ‘-‘, ‘/’ 처럼 많이 쓰이는 것뿐 아니라 한자나 한글이 들어가 있어도 문제가 없습니다. 심지어는 ‘..’ 처럼 오타로 보이는 데이터도 수정해서 인식합니다. 사진에는 없지만, 연도에서 끝 두 자리만 써도(ex. 16년) 인식합니다.

날짜표시 유형에 따라 조금씩 달리 사용할 수 있습니다. 다음과 같습니다.

ymd() : 연-월-일

mdy() : 월-일-연

hm() : 시-분

hms() : 시-분-초

등이 있습니다.

날짜를 가지고 연산을 할 때도 어렵지 않습니다. 날짜 더하기·빼기도 가능하고, 변환도 쉽습니다. 일자로만 표기하거나, 시간 혹은 분·초 단위로만 표기하는 것도 가능합니다.

‘wday()’ 함수는 해당하는 날이 그 주의 몇 번째 날인지를 파악합니다. 이를 활용하면 요일을 파악할 수 있습니다. 일요일에 해당하는 숫자가 1입니다. 요일별 차이를 파악하는 분석이 필요할 때 유용할 것으로 보입니다.

chaibs@bloter.net

뉴스, 콘텐츠, 미디어, 플랫폼