J'exécute une boucle qui calcule un networkx.classes.multidigraph.MultiDiGraph
pour chaque ligne (quartier) d'une liste de GeoDataFrames
(villes). Il calcule ensuite quelques statistiques pour chaque ligne et écrit le fichier sur le disque. Le problème est que la boucle est extrêmement longue à calculer car le graphique est calculé pour chaque ligne. Je cherche un moyen d'accélérer la boucle.
J'ai essayé de calculer le graphique pour chaque complet GeoDataFrame
avant de l'écrêter aux limites du voisinage, mais je ne connais pas de méthode pour écrêter les graphiques Networkx.
Voici mon code initial, qui prend 95 secondes :
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)]
merged=[]
for i in range(0,2):
city=gpd.read_file(files[i])
circ=[]
for j in range(0,2):
graph_for_row=ox.graph_from_polygon(city.geometry[j])
#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 k in (range(0,len(merged))):
with open(geofiles[k], 'w') as f:
f.write(merged[k].to_json())
Comment pourrais-je accélérer ma boucle ?