'R분석'에 해당하는 글 2건

이번에는 사내에서 진행중인 한 프로젝트의 svn commit history를 이용한 간단한 시각화 방법이다.


svn commit history 가져오기

Eclipse에서 해당 프로젝트의 Show History를 가져와 정보를 파일(txt)로 저장한다.


Eclipse Generate ChangeLog


저장된 파일은 아래와 같이 commint순번, 아이디, 날짜, 수정된 파일 리스트로 되어있다.

r799 | y2kpooh | 2014-02-21 10:54:35 KST| Changed paths: D /trunk/~~~.xml r798 | y2kpooh | 2014-02-21 10:53:21 KST| Changed paths: D /trunk/~~~.jsp D /trunk/~~~.xml

R data 핸들링

우선 작업에 사용하기 위한 패키지를 로드한다.

library(data.table)
library(stringr)
library(ggplot2)

ggplot2은 Plot, data.table을 데이터를 핸들링, stringr은 문자열을 핸들링 하기 위해 사용하였다.


이제 위에서 만들어진 데이터를 R에서 작업해보자. 

svn.log.dtl <- read.table(file="~/svn_log_dtl.txt", header= F, sep="|")
svn.log.dtl.dt <- data.table(svn.log.dtl)
head(svn.log.dtl.dt)

V1 V2 V3 V4 1: r799 y2kpooh 2014-02-21 10:54:35 KST Changed paths:\tD /trunk/~~xxx.xml /trunk/~~~.jsp

2: r798 y2kpooh 2014-02-21 10:54:35 KST Changed paths:\tD /trunk/~~xxx.xml

3: r797 y2kpooh 2014-02-21 10:54:35 KST Changed paths:\tD /trunk/~~xxx.img

4: r796 y2kpooh 2014-02-21 10:54:35 KST Changed paths:\tD /trunk/~~xxx.xml /trunk/~~~.png

5: r795 y2kpooh2 2014-02-21 10:54:35 KST Changed paths:\tD /trunk/~~xxx.jsp

6: r794 y2kpooh2 2014-02-20 10:54:35 KST Changed paths:\tD /trunk/~~xxx.jsp

텍스트 파일을 | 기호로 구분하여 데이터를 로드 후 data.table로 변경하였다.


위 데이터를 가지고 날짜별,아이디별 commit한 파일 갯수를 만들고자 한다.

그러기 위해서는 V3에서는 날짜에서 시간을 제거하고 V4에서는 문자열에서 파일 갯수를 알아내야 한다.

이제 그 작업을 진행해보자.

#날짜에서 시간제거
svn.log.dtl.dt$V3 <- substr(svn.log.dtl.dt$V3, 1, 11)
#commit 파일정보에서 한 커밋 트랜젝션당 파일갯수 구하기
svn.log.dtl.dt.n <- svn.log.dtl.dt[, str_count(V4, 'trunk'), by="V3,V2"]
head(svn.log.dtl.dt.n)

            V3             V2         V1
1:  2014-02-21  y2kpooh   1
2:  2014-02-21  y2kpooh   1
3: 2014-02-21 y2kpooh 2
4: 2014-02-21 y2kpooh 4
5: 2014-02-21 y2kpooh2 2
6: 2014-02-20 y2kpooh2 21

날짜를 제거하고 날짜별,아이디별(쉬운 이해 : group by date, user) V4 파일경로의 /trunk 문자열의 일치하는 갯수를

stringr패키지의 str_count()함수를 이용해 구했다. 그정보는 V1 컬럼에 추가되었다.


여기서 다시 한번 V3, V2(날짜,아이디) group by 를 해보자.

svn.log.dtl.dt.daily <- svn.log.dtl.dt.n[, sum(V1), by="V3,V2"]
head(svn.log.dtl.dt.daily)

V3 V2 V1 1: 2014-02-21 y2kpooh 8 2: 2014-02-21 y2kpooh2 2 3: 2014-02-20 y2kpooh 21 4: 2014-02-20 y2kpooh2 2 5: 2014-02-19 y2kpooh 40 6: 2014-02-19 y2kpooh2 24

이제 데이터 핸들링 작업은 다 되었다. 이제 Plot을 하기위해 데이터를 data.table에서 data.frame으로 변경하자.

ggplot2로 Plot을 하기 위해서는 데이터는 data.frame class이어야 한다.

svn.log.dtl.dt.daily.df <- data.frame(svn.log.dtl.dt.daily)

R ggplot

이제 bar, line차트를 각각 생성해보자

#bar
ggplot(svn.log.dtl.dt.daily.df, aes(x=V3, y=V1, fill=V2)) + geom_bar(stat='identity', position='dodge') 
#line
ggplot(svn.log.dtl.dt.daily.df, aes(x=V3, y=V1, color=V2, linetype=V2)) + geom_line(aes(group=V2))


bar chart


line chart


참 쉽죠? ^^; 작업하다 svn commit 로그가 눈에 보이기에 심심해서 한번 해봤다. :)

저작자 표시
신고

'R' 카테고리의 다른 글

R Oracle Connection  (4) 2014.02.24
R svn commit history 시각화  (0) 2014.02.21
R boxplot을 이용한 출근시간 분석 및 시각화  (0) 2014.02.19
R data.table  (1) 2014.02.07

WRITTEN BY
빵군
Web Programmer HOONS닷넷(http://www.hoons.kr) 2011 ASP.NET 시삽 http://about.me/y2kpooh

받은 트랙백이 없고 , 댓글이 없습니다.
secret

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

이를 위하여 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 boxplot을 이용한 출근시간 분석 및 시각화  (0) 2014.02.19
R data.table  (1) 2014.02.07
R 상위버전 설치  (0) 2014.01.28

WRITTEN BY
빵군
Web Programmer HOONS닷넷(http://www.hoons.kr) 2011 ASP.NET 시삽 http://about.me/y2kpooh

받은 트랙백이 없고 , 댓글이 없습니다.
secret