次のようなpandas データフレームからエッジのリストをインポートして、graph-toolで作業を開始しています。df
node1 node2
0 1 2
1 2 3
2 1 4
3 3 1
4 4 3
5 1 5
つまり、基本的に有向辺のリストです。チュートリアルに従って、次のようにグラフツールにインポートしています。
from graph_tool.all import *
import pandas as pd
# Read pandas dataframe
df = pd.read_csv('file.csv')
# Define Graph
g = Graph(directed=True)
# Add Edges
g.add_edge_list(df.values)
add_edge_list( edge_list )のドキュメントによると: edge_listは形状 (E,2) の ndarray である場合があります。ここで、E はエッジの数であり、各行は (ソース、ターゲット) ペアを指定します。
edge_list = df.values を設定して上記のコードを実行し、グラフを描画すると、次の結果が得られました。
これは、データフレームの元のedge_listの表現ではありません。私は設定しようとし*edge_list* = df.values.tolist()
ました:
g.add_edge_list(df.values.tolist())
取得:
これは実際には正しいものです。誰でもこれを再現できますか?ここでの問題は、私が巨大なネットワーク (~4*10^6 ノード) で作業していることです.tolist()
。この方法では、プロセスで大量のメモリが浪費されると思います。
編集: グラフを描画するためのコードを追加:
graph_draw(g, vertex_text=g.vertex_index, vertex_font_size=18, output_size=(200, 200), output="graph.png")