mfriends グラフデータからの相互類似関係にある辺の選択 -------------------------------------------------------------- グラフ :math:`G=(V,E)` の任意の枝 :math:`(a,b)∈E` について条件 :math:`b \in A\ \mathrm{and}\ a \in B` を満たす枝を選択する。 ここで、 :math:`A(B)` は節点 :math:`a(b)` の隣接節点の内、 類似度が上位 :math:`r` 個の節点集合のこと。 :math:`r` は ``rank=`` で指定し、類似度(項目)は ``sim=`` で指定する。 結果は有向グラフとして出力される。 例えば節点 :math:`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) | ワークディレクトリ名を指定する。 利用例 '''''''''''' **入力データの準備** .. code-block:: python :linenos: with open('edge.csv','w') as f: f.write( '''n1,n2,sim a,b,0.40 a,c,0.31 a,d,0.31 b,c,0.20 b,d,0.24 b,e,0.14 c,d,0.30 d,e,0.09 ''') **基本例** 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`` に出力される。 .. code-block:: python :linenos: import nysol.take as nt nt.mfriends(ei="edge.csv", ef="n1,n2", sim="sim", rank=2, eo="output.csv").run() ### output.csv の内容 # n1%0,n2%1,sim # a,b,0.40 # a,c,0.31 # a,d,0.31 # b,a,0.40 # c,a,0.31 # c,d,0.30 # d,a,0.31 # d,c,0.30 関連メソッド '''''''''''''''''''' * :doc:`mpal` : トランザクションデータから相互類似関係にある2アイテム集合を選択する