Showing posts with label Data Mining. Show all posts
Showing posts with label Data Mining. Show all posts

Sunday, December 18, 2011

メールからエンジニアの活動パターンを調査する in Groovy

これは Ariel Advent Calendar 2011 の記事です。

僕が以前所属していたアリエル・ネットワークではほとんどの情報がメールで共有されていました。面倒なミーティングに招待されたことや、誰かが typo まみれの恥ずかしいコードをコミットしたことも全てメールで届きます。それはログであり、誰が、何時、何をしているかがそこからわかります。

エンジニアの活動について知りたいならば最も適切な材料になるのは ITS (Issue Tracking System) から届くメールです。問題の報告、仕様の記述、進捗や調査内容の共有、質問と回答などなど、事あるごとにメールが飛びます。今回はそれらのメールの送信時間から何がわかるのか見てみたいと思います。使うのは手元に残っている 2007 - 2009 の12月のメールです。mbox で保存されている各月ごとのメールと次の Groovy スクリプトを使って、時間帯ごとの送信回数をグラフで表示してみます(DateヘッダがGMTだったので実際はJSTに変える処理が必要だったけどそこは省略):
def mbox = mboxName as File
mbox.withReader { r ->
    def acts = new int[24]
    while (r.ready()) {
        (r.readLine() =~ /^Date:.+\s(\d{2}):\d{2}:\d{2}\s/).with { m ->
            if (m) acts[m[0][1] as int]++ 
        }
    }
    acts.eachWithIndex { c, h ->
        println(String.format("%2d %s(%d)", h, '*'*(c/10), c))
    }
}

Dec 2007:
 
 0 **(27)
 1 **(20)
 2 (5)
 3 (5)
 4 (2)
 5 (0)
 6 (0)
 7 (0)
 8 (0)
 9 (1)
10 *************(132)
11 *********************************(337)
12 **************************************(384)
13 ***************(158)
14 ****************************(286)
15 *******************************(312)
16 *******************************(314)
17 *************************************(374)
18 ***********************************(351)
19 *******************************(315)
20 **********************(228)
21 ********************(203)
22 ****************(166)
23 *****(59)
 

Dec 2008:
 
 0 (5)
 1 (7)
 2 (0)
 3 (0)
 4 (1)
 5 (0)
 6 (0)
 7 (0)
 8 (0)
 9 *(17)
10 ***********(119)
11 ******************************(304)
12 ************************(245)
13 ***********(119)
14 ****************************(288)
15 *******************************(311)
16 *************************(250)
17 ***************************(275)
18 **********************(226)
19 *****************(171)
20 *********(99)
21 *****(55)
22 *******(77)
23 *(19)
 

Dec 2009:
 
 0 ******(68)
 1 **(26)
 2 **(29)
 3 **(21)
 4 (7)
 5 (8)
 6 (5)
 7 (2)
 8 (5)
 9 *******(75)
10 **********************************(349)
11 **************************************************************************(749)
12 ****************************************************************************(766)
13 **************************************************(502)
14 ***********************************************************(598)
15 *************************************************************(615)
16 ****************************************************************(642)
17 *********************************************************************(698)
18 ***************************************************************(634)
19 **********************************************************(584)
20 **********************************(343)
21 ***********************(235)
22 *************(136)
23 *************(139)
 

このグラフから次のことが見て取れます:

1. 10時 - 24時までが主な活動時間: 今は朝7時とかに出社するよくわからないグループもいるみたいですが。

2. 10時台になると一気に活発になる: 多くの人は 10時 - 11時に出社するようです。そう、アリエルは11時までに出社すればOKです。ギリギリに来る人が多かったですね。

3. ランチは13時台: 自分が早く出社してお腹が空いているからといって早めに誘ってしまうと、12時台のピークを奪うことになりますから止めましょう。

4. 午後の活動のピークは17時前後: ランチ後の睡眠欲に打ち勝ち(あるいは充足し)、ノッている時間帯です。この時間帯にミーティングが入ってしまうと生産性が非常に落ちます。

5. 20時 - 22時 にかけて人が帰宅していく: ただし、アリエルは15時以降ならいつでも帰ってよいことになってるし、帰りづらい雰囲気は皆無です。僕も明るいうちに会社出て遊びに行ったりしてました。逆に忙しい時は自宅で朝っぱらから夜中までとかもやってましたが。自由を制する力が求められます。

6. 2008年と比較すると2009年は倍増: 会社が急激に成長したようです。グラフの形があまり変わっていないのは仕事と一緒に人もどんどん増えた結果でしょうか。コアチームのメンバーはほとんど増えなかったですけど。

見落としていることもあるかもしれません。でも少なくともメールの送信時間だけでこれだけのことはわかるわけです。ここに人やissueの属性が加わればもっといろんなことがわかります。

このようにログを取っていてそれを利用できる会社なら、無駄な報告作業が減るかもしれませんね。