まえし

プログラムの共通注意事項†

netファイルならびにpajファイルの命名規則は↓の通りです.

※ ***には年月(6桁)が入ります.命名規則に従っていない場合はプログラムは動作しません(きめうちなので)

提案指標(コミュニティ媒介性)の求め方†

※1〜3はpajekでネットワークを描画するのに必要なファイル(netファイルならびにpajファイル)を作成するまでの流れ
 4〜は提案指標(各コミュニティ媒介性)を求めるための流れ

image of flow.gif

各プログラムの説明†

↑の1〜5の工程(net,pajファイルの作成ならびに中心性の値の計算)で用いるプログラムの説明はまつしんやろぎのページにもあるのですが,あちこち参照するのはめんどうなのでこのページにも載せておきます.あしからず f(^ ^;)

mboxからnetファイル(3ヶ月分)の作成†

filegetRelationWithCluster.pl ← 修正済

入力:mboxファイル

3ヶ月分なら3つのmboxファイルが必要
e.g.) perl getRelationWithCluster.pl 200007 200008 200009

※200007や20008といった引数はmboxのファイル名です.mboxによってはファイル名の形式が異なる(たとえば,postgre_200007とか)場合もあるのでリネームするなり引数を変更するなりして対応してください

出力:netファイル

↑の入力例だと200007.netというnetファイルができる

batファイルの例

  • perl getRelationWithCluster.pl 2000101 200102 200103
  • perl getRelationWithCluster.pl 2000102 200103 200104
         ・
         ・
         ・

修正・追加した点
1.mboxからメールアドレスを抽出するための条件の追加.  e.g.)  "名前 <メールアドレス (名前)" とかも取れるようにした
2.スパム対策の偽造("@"が" at "になっている)部分の解除 ← 特にGIMPの中期に多くある
3.↓のルールで同一人物を特定.(大文字は小文字に統一)

  • ルール1:メールアドレスが完全一致ならば,同一人物
  • ルール2:メールアドレスの@以前が一致 && From行にある名前が完全一致ならば,同一人物

4.ノード0問題の解決
5.自己ループの削除 (Pajekで処理してもよかったけどめんどかったのでプログラムで処理した)

2つのnetファイルをマージするプログラム†

filemergeNetworksByName_v2.pl <- by まつしん

入力:マージしたい2つのNetファイル

e.g) perl mergeNetworksByName_v2.pl data1_***.net data2_***.net

出力:Pajファイル(merge_***.paj)

※注意事項

割り当てられるパーティション番号は引数の順番(↑の例だと以下のようになる)
Partition 1 : data1_***.net
Partition 2 : data2_***.net
Partition 3 : data1_***.netとdata2_***.netに共通して出現する人

batファイルの例

  • perl mergeNetworksByName_v2.pl dev_200101.net user_200101.net > merge_200101.paj
  • perl mergeNetworksByName_v2.pl dev_200102.net user_200102.net > merge_200102.paj
         ・
         ・
         ・

中心性を計算するためのマクロファイル作成プログラム†

filemakeEachDegreePajekMacro.pl <- Eachはサブコミュニティ毎の中心性の意
filemakeMergeBetweennessPajekMacro.pl <-Mergeはサブコミュニティ毎に分けずに求めた中心性の意

※個人的に作ったので,他の人が使うときは編集して下さいm(_ _)m (主にディレクトリ名と保存先)
また,このへんのプログラムはまつしんも作っているみたいなのでそちらのほうを使ったほうがよいかもしれません f(^ ^;)

入力: OSSコミュニティ名,サブコミュ二ティ名,開始年月,終了年月

e.g) perl makePajekMacro4calculateDegreeCentrality.pl ○○ △△ □□ ××
○○ = OSSコミュニティ名 e.g.) apache,gimp,netscape など
△△ = サブコミュ二ティ名 e.g.) dev,user, merge など
□□ = 期間(開始年月) : e.g.) 2000年7月からなら200007
×× = 期間(終了年月) : e.g.) 2007年5月で終了なら200705

出力:中心性を計算するためのマクロファイル(↑の例は次数中心性の場合)

コミュニティ媒介性を計算するためのプログラム†

重みなしコミュニティ媒介性 : filemetricsWithNoWgt_Fvalue.pl
エッジ重み付きコミュニティ媒介性 : filemetricsWithEdgeWgt_Fvalue.pl
ノード重み付きコミュニティ媒介性 : filemetricsWithNodeWgt_Fvalue.pl

使い方: perl metricsWithNoWgt_Fvalue.pl merge_***.paj dev_***.net user_***.net

Partitionの割り当ては手動で(各プログラムの比較的上のほうに書いてある.metricsWithNoWgt_Fvalue.plの場合は上から32行目あたり),2番目,3番目の引数として与えたサブコミュニティ名に従って自分で編集すること.
↑の例では,subCommunity_1(dev) = 1, subCommunity_2(user) = 2, andman = 3 となる

  • $subCommunity_1 = 1;
  • $subCommunity_2 = 2;
  • $andman = 3;

もし,dev_***.netとuser_***.netを入れ替えるなら,

  • $subCommunity_1 = 2;
  • $subCommunity_2 = 1;
  • $andman = 3;

※defaultでは,subCommunity_1 = 1(dev), subCommunity_2 = 2(user) になってる.


batファイルの例 ※ノード重みなし(NoWgt)の場合

  • perl metricsWithNoWgt_Fvalue.pl merge_200101.paj dev_200101.net user_200101.net
  • perl metricsWithNoWgt_Fvalue.pl merge_200102.paj dev_200102.net user_200102.net
         ・
         ・
         ・

batファイルの例 ※エッジ重み付き(EdgeWgt)の場合

↑のmetricsWithNoWgt_Fvalue.plの部分をmetricsWithEdgWgt_Fvalue.plに変えるだけ

batファイルの例 ※NodeWgtの場合

  • perl metricsWithNodeWgt_Fvalue.pl merge_200101.paj dev_200101.net user_200101.net dev_200101.vec user_200101.vec
  • perl metricsWithNodeWgt_Fvalue.pl merge_200102.paj dev_200102.net user_200102.net dev_200102.vec user_200102.vec
         ・
         ・
         ・

※NodeWgtは,中心性の値が必要になるので,netファイル(subCommunity_1 subCommunity_2の順)の次に,vecファイル(subCommunity_1 subCommunity_2の順)を付け足す

補足プログラム : filemergeEachDirection.pl

※各コミュニティ媒介性を計算するプログラムでは,1To2(dev⇒user)と2To1(user⇒dev)の2つのファイルが出力される
この補足プログラムは,それらを足し合わせて双方向?での指標値を求める

アンドマンのメール送信回数カウントプログラム(伊原研究用)†

filecountMailNum4Andman.pl

アンドマン同士のメッセージのやりとりが開発者コミュニティで行われたものか,ユーザコミュニティで行われたものかまで調べた上で,アンドマンのメール送信回数をカウントするプログラム

入力: mergeしたpajファイルと2つのnetファイル

e.g.) perl countMailNum4Andman.pl merge_***.paj data1_***.net data2_***.net

出力:それぞれのサブコミュニティ参加者へのアンドマンのメール送信総数

e.g.) andman⇒subCommunity_1の参加者へのメール送信総数
andman⇒subCommunity_2の参加者への送信総数
andman⇒subCommunity_1&2の参加者への送信総数

同様に,プログラムの350行目(?)以降をコメントアウトすれば受信回数も分かる
ちょっと改良すればアンドマン個人個人の送信回数を求めることも可能.
※3-coordinator(3つのサブコミュニティに属する人のメール回数)については不可(要改良)

おまけ(同一人物判定用のサブプログラムたち)†

getRelationWithCluster.plでは,同一人物を判定するためのルール2までしか処理をしないけど,ここでは新たにルール3を追加する

目的: Joshua問題を含め,Andmanの取りこぼしを軽減する
対象者: 以下の条件に該当する参加者 ※同一サブコミュニティにしか出現しない同じ名前の人は無視(数が多すぎるため)

条件1の場合

手順1:全期間を通じて,mboxから参加者の情報(From行の名前とメールアドレスだけ)を抽出する
手順2:抽出した参加者の情報一覧からルール3に該当する人の一覧を作成する
手順3:***で全期間のmerge_***.pajを用いてPartition=3の人(Andmanになったことがある人)の一覧を作成する
手順4:手順2,3で得られたそれぞれの一覧をもとに,***を使って名前とそれぞれのメールアドレスの一覧を作成する(e.g: joshua slive -> "joshua@slive.ca" "jslive@gmail.com")
手順5:気合で調べる(42人分)

条件2の場合

手順1:全期間を通じて,それぞれのサブコミュニティ毎にmboxから参加者の情報(From行の名前とメールアドレスだけ)を抽出する
手順2:抽出した参加者の情報一覧をもとに,それぞれのサブコミュニティに共通して出現する人(名前)の一覧を作成する
手順4:条件1の処理で得られたAndmanの一覧をもとに,Andmanではない人だけの一覧を作成する
手順5:気合で調べる(???人分)

以下は,↑の処理を行うための補足プログラムたち

filegetParticipantsIdentifier.pl

各月毎にmboxからFrom行の名前とメールアドレスだけを抽出してListを作成する

filemergeText.pl

↑の処理で得られたListをマージする(全期間分 または,全てのサブコミュニティ分)

filemakeMailListByNameIdentifier.pl

↑でマージしたListをもとに,参加者が利用している複数のメールアドレス一覧を吐き出す(e.g: joshua slive -> "joshua@slive.ca"  "jslive@gmail.com" みたいな)

filecorrectAndman.pl

全期間において1度でもAndmanになったことがある人のListを作成する

fileextractAndmanByName.pl

makeMailListByNameIdentifier.plで作成した参加者が利用している複数のメールアドレス一覧からAndmanだけを抽出する


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS