2.8. mfriends グラフデータからの相互類似関係にある辺の選択

グラフ \(G=(V,E)\) の任意の枝 \((a,b)∈E\) について条件 \(b \in A\ \mathrm{and}\ a \in B\) を満たす枝を選択する。 ここで、 \(A(B)\) は節点 \(a(b)\) の隣接節点の内、 類似度が上位 \(r\) 個の節点集合のこと。 \(r\)rank= で指定し、類似度(項目)は sim= で指定する。 結果は有向グラフとして出力される。 例えば節点 \(a,b\) が相互類似関係にあれば、 a->b,b->a の両有向辺が出力される。 無向グラフで出力したければ、 udout オプションを指定する。

パラメータ

ei= : 型=str , 必須

エッジデータファイル名を指定する。

ef= : 型=str , 任意(default=node1,node2)

エッジデータ上の2つのノード項目名を指定する。

ni= : 型=str , 任意(default=エッジファイル上のノードのみを対象にする)

ノードデータファイル名を指定する。

nf= : 型=str , 任意(default=node)

ノードデータ上のノード項目名

eo= : 型=str , 必須

出力の辺データファイル名を指定する。

no= : 型=str , 任意(default=ノードデータを出力しない)

出力の節点データファイル名を指定する。

rank= : 型=int , 任意(default=3)

類似度上位何個までの隣接節点を対象とするかを指定する。

sim= : 型=str , 必須

rank=で使う節点間類似度(枝の重み)項目名を指定する。

dir= : 型=str , 任意(default=b)

出力する類似関係を以下の3つから選んで指定する。
b : 双方向類似枝のみ出力する。
m :片方向類似枝のみ出力する。
x :双方向類似枝、片方向類似枝両方共出力する。

directed= : 型=bool , 任意(default=False)

有向グラフとみなして計算する。

udout= : 型=bool , 任意(default=False)

無向グラフとして出力する。両方向に枝がある場合(a->b,b->a)の枝はa-bとして出力される。
a->b,b->aで類似度が異なる場合は平均値が出力される。

T= : 型=str , 任意(default=/tmp)

ワークディレクトリ名を指定する。

利用例

入力データの準備

 1with open('edge.csv','w') as f:
 2  f.write(
 3'''n1,n2,sim
 4a,b,0.40
 5a,c,0.31
 6a,d,0.31
 7b,c,0.20
 8b,d,0.24
 9b,e,0.14
10c,d,0.30
11d,e,0.09
12''')

基本例

rank=2の相互類似関係にある辺を選択する。 edge.csvの辺データを見ると、各節点に隣接する節点のうち、 sim が上位2位の隣接節点は次の通りである。 a-(b,c,d)(cとdは同点2位), b-(a,d), c-(a,d), d-(a,c), e-(b,d)。 最初の節点aにとっての1位の節点はbで、逆にbから見てもaは2位に入っているため相互類似関係にあるので、 有向辺a->bを出力する。 一方で、節点bにとっての2位の節点はdであるが、逆にdから見るとbは2位に入っていないので有向辺b->dは出力されない。 このように、上に示した、上位2位の節点-隣接節点について、有向辺の出力判定をして得られた結果が output.csv に出力される。

 1import nysol.take as nt
 2nt.mfriends(ei="edge.csv", ef="n1,n2", sim="sim", rank=2, eo="output.csv").run()
 3### output.csv の内容
 4# n1%0,n2%1,sim
 5# a,b,0.40
 6# a,c,0.31
 7# a,d,0.31
 8# b,a,0.40
 9# c,a,0.31
10# c,d,0.30
11# d,a,0.31
12# d,c,0.30

関連メソッド