私は、さまざまな委員会の共有関係によってリンクされている組織のデータセットを持っています。データがこのフォーマット(幾分簡略化)である。パンダがあまりにも多くのメモリを使用しているネストループ
organization name | committee name | number of relationships
ABC Corporation | Committee A | 7
ACME Inc. | Committee B | 3
XYZ Corporation | Committee A | 2
これは約30K行のpandas
データフレームに現在あります。
私はigraph
を使ってRでネットワーク解析を行うことができるように、データフレームを並べ替える必要があります。その分析には、2つのファイルが必要です.1つはすべてのノードをリストし、もう1つはノード間のすべての「エッジ」または関係をリストします。ここでは、itertuples
という2つのネストループを使用して、組織が互いにどのように関係しているかを記録する新しいデータフレームを構築しています。つまり、同じ委員会に属しています。
これは、(私が輸入し、この後にそれをエクスポートした後、データを精緻化処理する方法を除く)のコードです:
list_ = []
node_list = []
for row_a in network_df.itertuples():
for row_b in network_df.itertuples():
node_list.append({'node':row_a[1]})
if row_a[2] == row_b[2] && row_a[1] != row_b[1]:
temp_dict = {'from':row_a[1],'to':row_b[1], 'rels':row_a[3]}
list_.append(temp_dict)
edge_df = pd.DataFrame(list_)
node_df = pd.DataFrame(node_list)
は、ここで問題です:このプロセスが終了したことがない、パンダは30GBの上で取って終わります最終的にはプロセスを終了させるだけです。
私は、パンダのデータフレームを反復することが間違った方法を行っていることは知っていますが、ネストループなしでこのデータを反転させる方法がわかりません。ネイティブのPythonのリストや辞書を使用してネストされたループを使用するソリューションですか? 30k行でも、このようなメモリオーバーヘッドを取るようには見えません。
なぜあなたは、ほぼ億エントリで 'node_list'を構築していますか?あなたは 'node_list.append'か何かを間違って配置したかもしれません。 – user2357112
これは 'groupby'の仕事のようです。 – user2357112
@ user2357112あなたは間違った 'node_list'を正しく読んでいます。私は非効率なループの最後に私の重複排除を持っています。 – tchaymore