質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

1114閲覧

networks:ラベルに対するkey error

eme

総合スコア27

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2020/11/16 05:39

以下のようなCSVファイルからデータをダウンロードし、
一定距離内にある原子(ノード)をエッジでつなぎ、
それをnetworkxからdglへと変換する過程においてエラーが発生しました。

#読み込んだデータ
pandas.read_csvを用いて以下のようなデータをロードしました。

python

1 Xnm Ynm Znm Mass element Cluster 20 23.481321 -7.134153 -39.491711 11.996704 0 1 31 23.853514 -7.915858 -39.470348 11.994069 0 1 42 24.003975 -7.988654 -39.413750 13.089952 0 1 53 22.822966 -7.829986 -39.594307 13.992764 1 1 64 21.998539 -7.488298 -39.792698 14.035108 1 1 7... ... ... ... ... ... ... 891324 -6.768085 -11.560308 33.360088 12.003025 0 1000 991325 -9.146031 -10.729319 33.862568 12.499396 0 1000 1091326 -11.821389 -11.540415 34.308655 12.985589 0 1000 1191327 -13.612114 -9.707627 35.039318 14.013540 1 1000 1291328 -7.447951 -10.075975 33.741989 12.998513 0 1000

#実装内容

python

1dgl_graph_data = [] 2nx_graph_data =[] 3cutoff =1.30 4 5for l in range(1000): 6 df1 = df[df["Cluster"]==l+1].reset_index(drop=True)#クラスター番号を抽出 7 G = nx.Graph() 8 for i in range(len(df1)-2): 9 x = df1.loc[i,"Xnm"] 10 y = df1.loc[i,"Ynm"] 11 z = df1.loc[i,"Znm"] 12 element = df1.loc[i,"element"] 13 G.add_node(i,Xnm=x,Ynm=y,Znm=z,Element=element) 14 nx.draw(G) 15 16 df2 = df1.loc[i+1,"Xnm":"Znm"]- df1.loc[i,"Xnm":"Znm"] 17 df3 = df2*df2 18 df4 = np.sqrt(df3.sum(axis=0)) 19 df5 = df4[df4<cutoff] #原子間の距離を判定 20 for j in df5.index: 21 G.add_edge(i,j) 22 H = dgl.from_networkx(G,node_attrs=["Xnm","Ynm","Znm","Element"]) 23 dgl_graph_data.append(H) 24 nx_graph_data.append(G)

#エラー内容

python

1KeyError Traceback (most recent call last) 2<ipython-input-34-f103bb7d2140> in <module>() 3 21 for j in df5.index: 4 22 G.add_edge(i,j) 5---> 23 H = dgl.from_networkx(G,node_attrs=["Xnm","Ynm","Znm","Element"]) 6 24 dgl_graph_data.append(H) 7 25 nx_graph_data.append(G) 8 9/usr/local/lib/python3.6/dist-packages/dgl/convert.py in from_networkx(nx_graph, node_attrs, edge_attrs, edge_id_attr_name, idtype, device) 10 1003 for nid in range(g.number_of_nodes()): 11 1004 for attr in node_attrs: 12-> 1005 attr_dict[attr].append(nx_graph.nodes[nid][attr]) 13 1006 for attr in node_attrs: 14 1007 g.ndata[attr] = F.copy_to(_batcher(attr_dict[attr]), g.device) 15 16KeyError: 'Xnm'

一体、どのようにすればnetworkxからdgl形式へと変換することができますか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toast-uz

2020/11/16 12:10

エラー表示と違うので自信はありませんが G,node_attrs=["Xnm","Ynm","Znm","Element"] の最後のElementのEが大文字なのは、問題ありませんか?
eme

2020/11/16 12:44

試しに、小文字でelementと書き直したところ、 KeyError: "element"に変化しました。 大文字で問題ないと思います。
toast-uz

2020/11/16 12:51

KeyError: 'Xnm' というエラーメッセージだったのが、KeyError: "element" に変化したということでしょうか?
eme

2020/11/16 12:55

その通りです。 あと、G.node_attrs=["Xnm","Ynm","Znm"]に書き換えると、 KeyError: "Xnm"です。
toast-uz

2020/11/16 13:01

ついでにお聞きすると G,node_attrs=["Ynm","Znm","Element"] とするとエラーは出ない(Xnmだけアトリビュートとして認識されていない)のでしょうか?
eme

2020/11/16 14:34

"Xnm"を削除すると今度は、 KeyError: "Ynm"になりました。
toast-uz

2020/11/16 14:58

ありがとうごさいます。再現実行してみようとしましたが、 for j in df5.index: AttributeError: 'numpy.ndarray' object has no attribute 'index' と出ちゃって質問者様のエラーまでたどり着けませんでした。
guest

回答1

0

自己解決

python

1for l in range(1000): 2 df1 = df[df["Cluster"]==l+1].reset_index(drop=True)#ここでクラスター番号を抽出 3 G = nx.Graph() 4 for i in range(len(df1)): 5 G.add_node(i,Xnm = df1.loc[i,"Xnm"],Ynm = df1.loc[i,"Ynm"],Znm = df1.loc[i,"Znm"],Element = df1.loc[i,"element"]) #nodeの追加 6 df2 = df1.loc[i+1:,"Xnm":"Znm"]- df1.loc[i,"Xnm":"Znm"] 7 df3 = df2*df2 8 df4 = np.sqrt(df3.sum(axis=1)) 9 df5 = df4[df4<cutoff] 10 for j in df5.index: 11 G.add_edge(i,j) 12 H = dgl.from_networkx(G,node_attrs=["Xnm","Ynm","Znm","Element"]) #netwokxからdglに変換 13 dgl_graph_data.append(H) 14 nx_graph_data.append(G)

のように、df2 = df1.loc[i+1:,"Xnm":"Znm"]とコロンを挿入することで動きました。

投稿2020/11/17 02:45

eme

総合スコア27

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問