天泣記

2012-01-01 (Sun)

#1

tb に、git-log の結果を csv で吐き出す機能をつけてみた。

とりあえず、git-log では、author date と committer date というふたつの時刻が記録されていることが分かったので、その差をプロットしてみよう。対象は perl のリポジトリ。

% (cd perl; tb git-log -o ../z1.csv)
% ruby -EASCII-8BIT `which tb` cut author-date,committer-date z1.csv -o z2.csv
% tb newfield timediff 'Time.parse(_["committer-date"]) - Time.parse(_["author-date"])' z2.csv -o perl-timediff.csv

ruby -EASCII-8BIT とか面倒なことをやっているのは、なんかメッセージのエンコーディングがうまくない模様。tb git-log は適当にエンコーディングを修復するようにすべきかもしれない。(そういえば、Ruby にエンコーディングを修復するメソッドをつけるべきであるような気はする。)

で、ggplot2 でプロット。

perl-timediff.png

perl-timediff.R:

library(ggplot2)
d <- read.csv("2012-01/perl-timediff.csv")
d <- d[d$timediff != 0,]
print(qplot(sign(timediff) * log10(abs(timediff)), data=d))

44410件中、26516件は author date と committer date が等しかったので、それは除いた。

また、最大で 6年くらい経ってから commit されているものがあるので、linear scale だと分布が見えない。しかし、(なぜか) author date より committer date が早いことがあるので、log scale は使えない。

しょうがないので、正負それぞれで log をとってプロットしてみた。なお、author date と committer date は秒単位であるため、(すでに除いた author date と committer date が等しいものを除き) -1 < timediff < 1 なデータは存在せず、log で符号が逆転することはない。

正負それぞれの山は値で見るとどんな感じですかね、ということでみてみる。

> summary(d$timediff[d$timediff < 0])
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
-1096000   -13550    -6709   -34860    -3190       -1 
> summary(d$timediff[0 < d$timediff])
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
        1      8364     48960    960700    251500 187300000 
> length(d$timediff[d$timediff < 0])
[1] 1539
> length(d$timediff[0 < d$timediff])
[1] 16355
> length(d$timediff[d$timediff == 0])
[1] 26516

author date より committer date が早いのはなにかの間違いとして気にしないことにすると、(まぁ、そういうデータがある時点でそんなに信用できたものではない気がするが) 中央値でみると 48960秒、つまり 13.6時間くらいで commit されているかんじ?

#2

本人がコミットするのと、他人がコミットするのを区別してみよう。

% ruby -EASCII-8BIT `which tb` cut author-name,author-date,committer-name,committer-date z1.csv -o z2.csv
% tb newfield timediff 'Time.parse(_["committer-date"]) - Time.parse(_["author-date"])' z2.csv -o z3.csv
% tb newfield timediff '_["committer-name"] == _["author-name"]' z3.csv -o z4.csv
% tb newfield sameperson '_["committer-name"] == _["author-name"]' z3.csv -o perl-timediff2.csv

perl-timediff2.png

perl-timediff2.R:

library(ggplot2)
d <- read.csv("2012-01/perl-timediff2.csv")
d <- d[d$timediff != 0,]
print(qplot(sign(timediff) * log10(abs(timediff)), fill=sameperson, data=d[d$timediff != 0,]))
> summary(d$timediff[d$timediff < 0 & d$sameperson == "true"])
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 -43200  -22460  -10840  -16420   -3848   -1058 
> summary(d$timediff[d$timediff < 0 & d$sameperson == "false"])
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
-1096000   -13430    -6705   -34980    -3191       -1 
> summary(d$timediff[d$timediff > 0 & d$sameperson == "true"])
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
        2       626      7140    765300    172000 124100000 
> summary(d$timediff[d$timediff > 0 & d$sameperson == "false"])
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
        1     22470     66520   1070000    270400 187300000 

他人がコミットするのでも 66520秒つまり 18.5時間くらいか。

2012-01-29 (Sun)

#1

tb-0.3 をリリースした。

<URL:http://rubygems.org/gems/tb>


[latest]


田中哲