Я запускаю al oop, который вычисляет networkx.classes.multidigraph.MultiDiGraph
для каждой строки (окрестности) списка GeoDataFrames (городов). Затем он вычисляет некоторую статистику для каждой строки и записывает файл на диск. Проблема в том, что l oop очень долго вычисляется, потому что график вычисляется для каждой строки.
Я хочу ускорить l oop путем вычисления графика для всего GeoDataFrame, а затем вырезания графика в каждой строке (каждая строка имеет многоугольник). Вы можете сделать это для GeoSeries с geopandas.clip
. Однако, похоже, что для графа networkx не существует эквивалента geopandas.clip
.
Кто-нибудь знает способ обрезки графа networkx?
В качестве альтернативы, какие существуют другие методы для ускорения моего l oop.
Примечание : отсечение сработало бы, если бы я мог преобразовать график networkx в pandas объект. К сожалению, я думаю, что невозможно сохранить свойства, на которые действует osmnx, когда граф преобразуется в объект pandas. Если я не прав, скажите, пожалуйста.
Вот мой начальный код:
import osmnx as ox
import pandas as pd
import geopandas as gpd
import os
path="C:/folder/"
files=[os.path.join(path, f) for f in os.listdir(path)]
for i in range(0,2):
city=gpd.read_file(files[i])
circ=[]
for i in range(0,181):
graph_for_row=ox.graph_from_polygon(city.geometry[i])
#above is the long command
stat = ox.basic_stats(graph_for_row)
circ.append(stat['circuity_avg'])
circ=pd.Series(circ)
merged.append(pd.concat([city, circ], axis=1))
for i in (range(0,len(merged))):
with open(geofiles[i], 'w') as f:
f.write(merged[i].to_json())
Вот новый l oop, к которому я стремлюсь:
clipped_graph=[]
for i in range(0,2):
city=gpd.read_file(files[i])
whole_city=city.unary_union
graph=ox.graph_from_polygon(whole_city)
clipped_graph.append(gpd.clip(graph, city.geometry))#this line
#does not work since 'graph' is a networkx object, not
#a GeoDataFrame or GeoSeries
circ=[]
for i in range(0,181)
stat = ox.basic_stats(clipped_graph[i])
circ.append(stat['circuity_avg'])
circ=pd.Series(circ)
merged.append(pd.concat([city, circ], axis=1))
for i in (range(0,len(merged))):
with open(geofiles[i], 'w') as f:
f.write(merged[i].to_json())