-1

二部ネットワークを構成する 100 万行で構成される大規模なデータがあります。ネットワークの片側は APP を表し、反対側は IP を表します。

データ形式は次のとおりです。

1     1.1.1.1  

1     1.2.1.1

2     1.1.1.1

1     1.3.1.1

2     1.2.1.1 

私がやりたいのは、igraph(pythonインターフェース)で何かを書いて、データを片側に投影することです。例えば

1.1.1.1  1.2.1.1 the weight = 2

1.1.2.1  1.3.1.1 the weight = 1

重みは、1.1.1.1ノードが 1 つの共通 A​​PP (1) と共通 APP (2) を共有することを表します。1.2.1.1

そして、体重を次の形式のファイルに保存したいtxt

でこれを処理する方法が少し混乱していigraphます。

igraphこの問題を処理できますか?

ありがとう

4

1 に答える 1

3

次のような方法で実行できます。

from igraph import Graph

def looks_like_ip_address(label):
    return "." in label

g = Graph.Read_Ncol("your-input-file.txt")
g.vs["type"] = [looks_like_ip_address(name) for name in g.vs["name"]]
one, other = g.bipartite_projection()
the_projection_you_need = other

2 部グラフは、igraph でブール属性を持つと想定され、関数は=を持つ頂点がグラフの一方の側に属し、 =typeを持つ頂点がもう一方の側に属すると単純に仮定します。したがって、最初にグラフをロードしてから、単純な経験則を使用してタイプを手動で設定します。頂点ラベルにドットが含まれている場合、それは=側に属していると見なされます。次に、単純に両方の予測を作成し、そのうちの 1 つを破棄します。次の式を使用して、射影から重みを取得できます。typeFalsetypeTruetypeTrue

the_projection_you_need.es["weight"]

更新: グラフによっては、投影の 1 つ (不要なもの) が大きすぎてメモリに収まらない場合がありますが、他の投影は収まります。g.bipartite_projection()には、which必要なプロジェクションを指定できるキーワード引数があるため、次のようにすることができます。

the_projection_you_need = g.bipartite_projection(which=True)
于 2014-05-18T21:42:32.913 に答える