본문 바로가기
R 주제/통게분석(임시)

R에서 시간데이터로 산점도 그리기

by 만다린망고 2021. 3. 18.
반응형

 

시간데이터를 다뤄야 하는 상황이 있습니다. 예를들어 아래와 같이 제품의 판매시간-판매량이 표로 정리되어 있고 이 표를 가지고 그래프를 그리고 싶다고 해봅시다. 

 

Time

 Sales_Volume

2018-10-21 08:23:12

 1

2018-10-28 15:33:55

2018-11-02 13:23:52 

12 

2018-11-08 17:12:01

2018-12-12 10:08:01

 

판매량은 숫자벡터로 입력하면 되는데, 시간의 경우는 조금 복잡합니다. 먼저 시간을 문자열 벡터로 입력합니다. 입력한 뒤 산점도를 그리겠습니다. 

 

> SV=c(1,5,12,3,7)

> time=c("2018-10-21 08:23:12","2018-10-28 15:33:55","2018-11-02 13:23:52","2018-11-08 17:12:01","2018-12-12 10:08:01")

> plot(time,SV)

Error in plot.window(...) : need finite 'ylim' values

In addition: Warning messages:

1: In xy.coords(x, y, xlabel, ylabel, log) : NAs introduced by coercion

2: In min(x) : no non-missing arguments to min; returning Inf

3: In max(x) : no non-missing arguments to max; returning -Inf

 

time이 문자열이기 때문에 산점도를 그리려고 하면 에러메시지가 뜹니다. 시간을 문자열이 아닌 수량으로 인식하게 만들어야합니다. strptime 함수를 사용합니다. 

 

>time2=strptime(time,"%Y-%m-%d %H:%M:%S")

 

어떤 변화가 생긴 것인지 str함수를 이용하여 확인해봅시다. 

 

> str(time)

 chr [1:5] "2018-10-21 08:23:12" "2018-10-28 15:33:55" ...

> str(time2)

 POSIXlt[1:5], format: "2018-10-21 08:23:12" "2018-10-28 15:33:55" "2018-11-02 13:23:52" ...

 

문자열(chr)이 POSIXlt 로 변경되었습니다. POSIXlt는 날짜/시간을 나타내는 자료형입니다. 산점도를 그려봅시다. 

 

> plot(time2,SV)

 

x축에 디폴트로 날짜가 나타난 것을 확인할 수 있습니다. 이번에는 x축을 2018-10-21...형태로 변경해봅시다. x축에 아무 표시도 되지 않은 그래프를 그립시다. xaxt 옵션을 "n"으로 해주시면 됩니다. 디폴트는 "s"입니다.

> plot(time2,SV,xaxt="n")

 

우리가 입력한 시간벡터 time2의 범위를 찾아봅시다.

 

> t2_range=range(time2)

> t2_range

[1] "2018-10-21 08:23:12 KST" "2018-12-12 10:08:01 KST"

 

이 범위를 반올림해줍니다. 

 

> r<-as.POSIXct(round(range(time2),"hours"))

> axis.POSIXct(1,time2,at=seq(r[1],r[2],by="hour"),format="%Y-%m-%d %H:%M")

 

반응형

댓글