来自 gdf 的 Osmnx 基本统计信息
Posted
技术标签:
【中文标题】来自 gdf 的 Osmnx 基本统计信息【英文标题】:Osmnx basic stats from gdf 【发布时间】:2021-12-23 11:49:37 【问题描述】:我正在尝试使用以下代码计算从 gdf 创建的图表的基本统计数据:
ox.utiles_graph.graph_from_gdf(n,e)
节点和边之前已被保存并产生于:
G = graph.graph_from_place(some_place_name)
n,e = ox.graph_to_gdfs(G)
n.save_to_file(filname,driver="ESRI Shapefile")
e.save_to_file(filname,driver="ESRI Shapefile")
我可以绘制图表并从中计算旅行时间,但我无法使用基本统计功能。 我收到以下错误:
---> 56 ox.basic_stats(G)
~/anaconda3/envs/ox/lib/python3.9/site-packages/osmnx/stats.py in basic_stats(G, area, clean_int_tol, clean_intersects, tolerance, circuity_dist)
346 stats["edge_length_avg"] = stats["edge_length_total"] / stats["m"]
347 stats["streets_per_node_avg"] = streets_per_node_avg(G)
--> 348 stats["streets_per_node_counts"] = streets_per_node_counts(G)
349 stats["streets_per_node_proportions"] = streets_per_node_proportions(G)
350 stats["intersection_count"] = intersection_count(G)
~/anaconda3/envs/ox/lib/python3.9/site-packages/osmnx/stats.py in streets_per_node_counts(G)
80 """
81 spn_vals = list(streets_per_node(G).values())
---> 82 return i: spn_vals.count(i) for i in range(int(max(spn_vals)) + 1)
83
84
ValueError: max() arg is an empty sequence
有什么办法可以解决这个问题吗?
【问题讨论】:
我忘了说 G = ox.utiles_graph.graph_from_gdf(n,e) 【参考方案1】:如果您想将图表保存到磁盘并稍后再次使用它,您应该将save it 作为 GraphML 文件。如果您出于某种原因必须将其保存为节点/边 shapefile,如果要计算基本统计信息,则需要手动计算每个节点的街道数:
import osmnx as ox
import networkx as nx
G = ox.graph_from_gdfs(some_nodes, some_edges)
spn = ox.utils_graph.count_streets_per_node(G)
nx.set_node_attributes(G, values=spn, name="street_count")
stats = ox.basic_stats(G)
请注意,如果您以这种方式手动执行此操作,由于外围效应,您的每节点街道数可能会有些不准确。如果您只是以通常的方式下载图形然后将其保存为 GraphML 文件,则不会出现此问题。
【讨论】:
感谢您的快速回答。使用 Shapefile 的原因是能够加载特定社区的数据。有什么方法可以计算多边形描述的单个邻域的统计数据? 当然。查看使用示例和文档:osmnx.readthedocs.io/en/stable/…以上是关于来自 gdf 的 Osmnx 基本统计信息的主要内容,如果未能解决你的问题,请参考以下文章
python 来自nginx访问日志的HTTP状态代码统计信息