2016-11-29 6 views
0

私は奇妙な問題を抱えています。私はCSVファイルからデータを読み込み、それをマルチレベル辞書に変換しています。マルチレベル辞書をPythonのネットワークグラフに変換する

CSV形式:CSVファイルに合計1,500行あります。以下の形式を参照してください。上記ファイルで

1-103rd Street,1-96th Street,2327.416174 
1-116th Street–Columbia University,1-Cathedral Parkway–110th Street,2327.416174 
1-125th Street,1-116th Street–Columbia University,2327.416174 
1-137th Street–City College,1-125th Street,2327.416174 
1-145th Street,1-137th Street–City College,2327.416174 
1-14th Street,1-Christopher Street–Sheridan Square,2327.416174 

、最初の列は、ソースステーションを示し、第2列は、宛先局を示し、第3列は、それらの間の距離を提供します。

私は2つのステーション間の最短距離を見つけるためにDijkstraのアルゴリズムを適用する必要があります。そのためには、CSVファイル全体を重み付きグラフに変換する必要があります。各グラフはノードで、その間の距離はエッジの重さ。

私のアプローチ:

まず私はCSVファイルから各行を読み取り、マルチレベルの辞書に変換しています。私はこれのための適切な辞書を取得しています。以下は私のコードです。

Dijkstra's Algorithmを適用するには、この新しく作成した辞書をグラフに変換する必要があります。

G = nx.from_dict_of_dicts(my_dict) 

をしかし、私は"TypeError: Input graph is not a networkx graph type"を言って、エラーを取得しています。そのために私はこのコードを使用しています。

私を助けてください。 CSVファイル全体をグラフに変換するにはどうすればいいですか?Dijkstraのアルゴリズムを適用して、2つのステーション間の最短距離を見つけることができます。

+0

は[この質問](http://stackoverflow.com/questions/22768224/unable-to-load-a-simple-csv-in-networkx-in-python)の重複する場合がございます。受け入れられた答えを確認してください。私はなぜあなたが辞書の束を使用しなければならないのかわかりません... – 3novak

+0

ありがとう、しかし、上記のリンクのために、CSVは異なったformat.Iを持っていますCSVファイルから行の重み付きグラフを作成する必要があります。あなたは私にどのように進むべきかを提案できますか? –

+0

完全なエラーメッセージと[MCVE]を付けることはできますか?エラーメッセージには、コードのどの行がトリガされているかが明記されています。あなたが提供した行のいずれにもないと思います。 (あなたのコードは私のために別のエラーを引き起こしますが、修正方法はわかりましたが、あなたが持っているエラーを引き起こすコードを提供する方が良いでしょう)。 – Joel

答えて

1

私はNetworkXに精通していませんが、私はパンダとnx.from_pandas_dataframe()を使って次のようにします。

import pandas as pd 
import networkx as nx 

df = pd.read_csv('csvpath.csv', names=['origin', 'dest', 'dist']) 

g = nx.from_pandas_dataframe(df, source='origin', target='dest', edge_attr='dist') 

g['1-103rd Street']['1-96th Street']['dest'] 
# 2327.416174 
+0

ありがとうたくさん...それは完全にうまく動作します:) –

関連する問題