본문 바로가기

R

R svn commit history 시각화

이번에는 사내에서 진행중인 한 프로젝트의 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 boxplot을 이용한 출근시간 분석 및 시각화  (1) 2014.02.19
R data.table  (1) 2014.02.07