networkx で多数のエッジを一緒に追加する簡単な方法はありますか?
リストからエッジを追加したい。
「多数のエッジを一緒に追加する」とは、「それらをグラフに追加する」ことを意味すると仮定しますhelp(networkx.Graph)
。
| **Edges:**
|
| G can also be grown by adding edges.
|
| Add one edge,
|
| >>> G.add_edge(1, 2)
|
| a list of edges,
|
| >>> G.add_edges_from([(1,2),(1,3)])
など:
>>> import networkx as nx
>>> g = nx.Graph()
>>> g.add_edges_from([(0,4),(1,2),(2,3)])
>>> g
<networkx.classes.graph.Graph object at 0x1004b58d0>
>>> g.edges()
[(0, 4), (1, 2), (2, 3)]
インタラクティブなドキュメントを読む習慣を身につけることを強くお勧めします。私は を使用しIPython
ていたので、使用可能なメソッドをすばやくざっと調べるために必要だったのは、グラフを作成して をg
入力することだけでしたg.[TAB]
。これでリストが表示され、g.add_edges_from
3 位になりました。
OTOH、単純にエッジの 2 つのリストを一緒に追加したい場合は、それもできます。
>>> g0.edges() + g1.edges()
[(1, 2), (2, 3), (3, 4), (1, 2), (2, 3), (3, 4), (5, 6)]
>>> set(g0.edges() + g1.edges())
set([(1, 2), (3, 4), (5, 6), (2, 3)])
多くの場合、グラフ データはファイルに保存されるため、Pandas データフレームで簡単に読み取ることができます。たとえば、中学 1年生のネットワークのグラフを作成するとします。次のようにグラフを初期化できます。
import pandas as pd
import networkx as nx
#read the edge list
edges = pd.read_csv('./data/moreno_seventh/out.moreno_seventh_seventh', skiprows=2, sep = " ", header=None)
edges.columns = ['student1', 'student2', 'count']
#read node metadata
meta =pd.read_csv('./data/moreno_seventh/ent.moreno_seventh_seventh.student.gender', header=None)
meta.index += 1
meta.columns = ['gender']
#construct the graph
G = nx.DiGraph()
for row in edges.iterrows():
G.add_edge(row[1]['student1'], row[1]['student2'], count=row[1]['count'])
#add meta data
for i in G.nodes():
G.node[i]['gender'] = meta.ix[i]['gender']