본문 바로가기

R

R boxplot을 이용한 출근시간 분석 및 시각화

사내 근태관리 시스템에서 출퇴근 데이터를 이용하여 사내직원의 출퇴근 성향을 파악해보려 한다.

이를 위하여 boxplot을 사용해보고자 한다.


boxplot이란?

최대값, 최소값, 중앙값, 사분편차를 사용하여 자료의 측정값들이 어떤 모양으로 분포되어 있으며, 극단값들은 어떠한지 등을 쉽게 알 수 있도록 하는 그림이다. 자료들이 비대칭으로 분포되어 있을 경우에는 상자그림을 그려 극단값의 개수, 비대칭 여부 등을 파악할 수 있으므로 측정값들의 중심위치와 산포도의 척도로 사용할 수 있다.

[네이버 지식백과] 상자그림 [box plot, box and whisker plot] 


boxplot 해석을 돕기 위한 그림(출처)



boxplot분석

우선 데이터 전처리 작업을 진행하였다. DB에 저장된 직원별 근태정보에서 출퇴근시간에서 년월일을 제외한 시간만 가져와 R에서 분석하기 위한 CSV 데이터로 생성하였다.

attitude <- read.table(file="~/attitude.csv", header= T, sep=",")
summary(attitude)

USER_ID USER_NM START_TIME END_TIME xxxx1 :28 아무개1 :28 Min. : 82027 Min. : 53416 xxxx2 :27 아무개2 :27 1st Qu.: 85814 1st Qu.: 61226

xxxx3 :24 아무개3 :24 Median : 90724 Median : 62600 xxxx4 :24 아무개4 :24 Mean : 90763 Mean : 68178

xxxx5 :22 아무개5 :22 3rd Qu.: 91619 3rd Qu.: 71935

 xxxx6 :21 아무개6 :21 Max. :123546 Max. :112241

(Other) :95 (Other):95

데이터 컬럼은 아이디, 이름, 출근시간, 퇴근시간으로 구성되어있다.

여기서 아무개1출근시간에 대하여 boxplot으로 표현해보자.

pooh <- attitude[attitude$USER_NM=='아무개1',]
boxplot(pooh[3])

아무개1의 경우 주 출근시간대는 8:40~8:50 사이로 나타난다. box 크기가 크지 않으므로 해당시간에 주로 출근했음을 알 수 있다. upper outlier표시로 9:00 이후로 지각한 것을 알 수 있다.

만약 아무개1이 9:00시 넘어 지각을 할 경우 매일 일정한 시간대에 오던 아무개1이 늦자 회사동료들은 이상하게 여길 수 있겠다. :)

그렇다면 아무개1과는 정반대의 결과를 가진 직원 아무개3의 출근시간을 확인해보자.

아무개3은 위 boxplot에서도 나타나듯이 9:00시 이전에 오는게 low outlier에 나타난다.

이 아무개3은 일찍오는게 이상하다는거다 ㅡ,.ㅡ; 평균 출근시간은 10:00시 쯤으로 늦을때는 점심시간대에도 출근을 하는 직원이다. 출근시간도 일정 치 않고 들쭉날쭉이고 ... 해튼 boxplot만 보면 이런 직원은 짤라야 한다...


이제 직원 개개인에 대한 boxplot이 아닌 ggplot2를 이용하여 전체직원의 출근시간을 표현해보자.

library(ggplot2)
ggplot(attitude, aes(x=USER_NM, y=START_TIME)) + geom_boxplot()

개인정보 보호차원에서 x축의 이름정보는 모자이크 처리했다. ;)

위 boxplot만 보더라도 어느 직원이 성실한지 한 눈에 파악할 수 있을 것이다. 

(물론 출근시간으로 성실함을 판단하는게 문제가 있겠지만 ^^;)



'R' 카테고리의 다른 글

R svn commit history 시각화  (0) 2014.02.21
R data.table  (1) 2014.02.07
R 상위버전 설치  (1) 2014.01.28