2

次のような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")
4

3 に答える 3

0

これは古いですが、最初のグラフは、データフレームから頂点のペアを列の主要な順序で読み取った場合に発生するものであることに気付きました。これが奇妙な行動の原因だと思います。

于 2018-08-26T11:09:53.560 に答える