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
関連メソッド¶
mpal 相互類似関係にあるアイテムペア列挙 : トランザクションデータから相互類似関係にある2アイテム集合を選択する