2016-10-10 3 views
0

私はそのコンテンツのようなCSVファイルからグラフツール(https://graph-tool.skewed.de)でグラフを作成しようとしている:今、私はノードとしてA、B、C、Dとのグラフを作成したいグラフツールでCSVファイルデータを使用してPythonでグラフを作成するには?

A,B,50 
A,C,34 
C,D,55 
D,D,80 
A,D,90 
B,D,78 

をし、第3の列番号をエッジとする。私はグラフツールライブラリを使用しています。 3番目の列番号は、A、B、A、Cなどの共通項目を示しています。

私は "networkx"(read_edgelistなど)で行うことができますが、グラフツールでやりたいと思います。

+0

がどのように一般的な、あなたのプログラムになりたいですか? (つまり、渡したCSVファイルをプロットしたいのですか、それともこれだけでなければなりませんか?)これまでのコードを投稿できますか? –

+0

実際には、networkxでいくつかのコードを実行しましたが、グラフツールを使用したコードはありません(グラフツールを使用してエッジを読み取る方法はわかりません) – Nikito

+0

特に、CSVパーサーはすでに動作していますか?つまりあなたはすでに '[[A、B、50]、[A、C、50]]'のようなものをメモリに持っていますか? –

答えて

1

ウェブサイト上のドキュメントは

import graph_tool 
g = Graph(directed=False) 


# this is the result of csv.parse(file) 
list_of_edges = [['A', 'B', 50], ['A','C',34], ['C','D',55], ['D','D',80], ['A','D',90], ['B','D',78]] 

vertices = {} 

for e in list_of_edges: 
    if e[0] not in vertices: 
     vertices[e[0]] = True 
    if e[1] not in vertices: 
     vertices[e[1]] = True 


for d in vertices: 
    vertices[d] = g.add_vertex() 

for edge in list_of_edges: 
    g.add_edge(vertices[edge[0]], vertices[edge[1]]) 
+0

ありがとう、私はテストし、それは仕事ですが、インデックス番号の代わりにノードにラベルを表示する場合はどうですか?私はグラフをプロットするためにこのコードを使用しています:graph_draw(g、vertex_text = g.vertex_index、vertex_font_size = 18, output_size =(800,800)、output = "two-nodes.png") – Nikito

2

ようexplain how to do this very clearly.

何かがあなたが(add_edge_listを使用することができ、あなたはすでに(CSV libraryを使用して、例えば)PythonでCSVファイルを読み取る方法を知っていると仮定すると、 )エッジのリストを追加します。それらが自動的に割り当てられたインデックスと異なる名前で格納されている場合、リストから名前を含む文字列のリストを返します。

例:

from graph_tool.all import * 
import csv 

g=Graph(directed=False) 
csv_E = csv.reader(open('*text_input*')) 

e_weight=g.new_edge_property('float') 
v_names=g.add_edge_list(csv_E,hashed=True,string_vals=True,eprops=[e_weight]) 
#this will assign the weight to the propery map *e_weight* and the names to *v_names* 

graph_draw(g, vertex_text=v_names) 
関連する問題