networkX距离矩阵生成器到数据帧

2024-03-28 11:59:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过osmnx下载了graph,我想得到所有节点之间的距离。 我调用nx.all_pairs_dijkstra_path_length(G, weight='length'),它返回dicts的生成器,然后将其存储到数据帧中,然后存储到.csv

如何处理巨大的图表(斯德哥尔摩、华盛顿、巴黎等)

我做到了这一点,达到了阿姆斯特丹的规模:

G = ox.graph_from_place('Amsterdam, Netherlands', network_type='drive')
skim_generator = nx.all_pairs_dijkstra_path_length(inData.G,weight='length') # this is generator of dicts
skim_dict = dict(inData.skim_generator) 
skim = pd.DataFrame(inData.skim_dict).fillna(_params.dist_threshold).T.astype(int) 
skim.to_csv(_params.paths.skim, chunksize=20000)

但现在它用更大的网络摧毁了我的RAM。所以我试着调整它并将其放入内存,但它的速度非常慢,如何改进它

    ret = dict()
    first = True
    j=0
    for i in nx.all_pairs_dijkstra_path_length(_inData.G, weight='length'):
        ret[i[0]]=dict(i[1])
        j+=1
        if divmod(j,chunk)[1]==0:  
            print(j,_inData.nodes.shape[0])
            df = pd.DataFrame(ret).reindex(_inData.nodes.index).fillna(999999).astype(int)
            df.T.to_csv(path, mode = 'w' if first else 'a', header = first)
            first = False
            ret = dict()

Tags: csvpathallgeneratorlengthdictgraphfirst