我做了一個代碼,用於生成379613734邊的圖。代碼運行時的內存問題(Python,Networkx)
但由於內存原因代碼無法完成。當它通過6200萬線時,它佔用了大約97%的服務器內存。所以我殺了它。
你有什麼想法來解決這個問題嗎?
我的代碼是這樣的:
import os, sys
import time
import networkx as nx
G = nx.Graph()
ptime = time.time()
j = 1
for line in open("./US_Health_Links.txt", 'r'):
#for line in open("./test_network.txt", 'r'):
follower = line.strip().split()[0]
followee = line.strip().split()[1]
G.add_edge(follower, followee)
if j%1000000 == 0:
print j*1.0/1000000, "million lines done", time.time() - ptime
ptime = time.time()
j += 1
DG = G.to_directed()
# P = nx.path_graph(DG)
Nn_G = G.number_of_nodes()
N_CC = nx.number_connected_components(G)
LCC = nx.connected_component_subgraphs(G)[0]
n_LCC = LCC.nodes()
Nn_LCC = LCC.number_of_nodes()
inDegree = DG.in_degree()
outDegree = DG.out_degree()
Density = nx.density(G)
# Diameter = nx.diameter(G)
# Centrality = nx.betweenness_centrality(PDG, normalized=True, weighted_edges=False)
# Clustering = nx.average_clustering(G)
print "number of nodes in G\t" + str(Nn_G) + '\n' + "number of CC in G\t" + str(N_CC) + '\n' + "number of nodes in LCC\t" + str(Nn_LCC) + '\n' + "Density of G\t" + str(Density) + '\n'
# sys.exit()
# j += 1
邊緣的數據是這樣的:
1000 1001
1000245 1020191
1000 10267352
1000653 10957902
1000 11039092
1000 1118691
10346 11882
1000 1228281
1000 1247041
1000 12965332
121340 13027572
1000 13075072
1000 13183162
1000 13250162
1214 13326292
1000 13452672
1000 13844892
1000 14061830
12340 1406481
1000 14134703
1000 14216951
1000 14254402
12134 14258044
1000 14270791
1000 14278978
12134 14313332
1000 14392970
1000 14441172
1000 14497568
1000 14502775
1000 14595635
1000 14620544
1000 14632615
10234 14680596
1000 14956164
10230 14998341
112000 15132211
1000 15145450
100 15285998
1000 15288974
1000 15300187
1000 1532061
1000 15326300
最後,有沒有人誰擁有的經驗來分析Twitter的鏈接數據?我很難拿出有向圖並計算平均/中值的不完整和節點的超出。任何幫助或想法?
據我所知,你試圖對有向圖做什麼是毫無意義的。對'G.to_directed()'的調用不會提供任何有意義的邊緣指示,所以'DG.in_degree()'和'DG.out_degree()'正是您從G中獲得的。度()'。如果您關心的是不同點和不同點之間的差異,那麼您需要從頭開始將圖形建立爲有向圖。 –
感謝您的評論。我不知道那件事。我希望查看網絡的基本統計數據,例如#CC(連接組件數量),LCC(%)(最大連接組件中的節點數),In-degree Avg(Med),Out-degree Avg(Med) ,直徑和聚類係數。這是我第一次使用networkx。所以做得很好很難。 – ooozooo
networkx的教程很好,但它既不是網絡分析教程,也不是python教程;出於學習目的,從小型網絡入手肯定更容易。對於基本統計數據,嘗試類似[Pajek](http://pajek.imfm.si/doku.php)可能更容易。他們處理[大型網絡]的技巧(http://vlado.fmf.uni-lj.si/pub/networks/pajek/howto/extreme.htm)應該特別適合。 –