GeoHD - 一种用于智慧城市热点探测的Python工具箱
详细原理请参考:Yan, Y., Quan, W., Wang, H., 2024. A data‐driven adaptive geospatial hotspot detection approach in smart cities. Trans. GIS tgis.13137.
代码下载:下载
1. 简介
在城市数据分析领域,研究对象的空间分布通常呈现出不均匀性,具有明显的空间异质性。密度较高的点数据往往代表着区域内事件的热点。因此,城市区域内热点的探测成为了城市研究的一个焦点话题,对于规划者、研究人员以及管理部门具有重要的价值。以犯罪热点的探测为例,通过对城市犯罪历史数据的分析可以揭示出犯罪活动发生的原因,进而有助于相关管理部门制定更加有效的犯罪预防策略。在过去的研究中,已经有多种经典的聚类算法或热点分析方法被应用于城市热点探测,比如Getis-Ord空间统计、k均值聚类以及核密度分析等。此外,针对特定研究背景,如交通出行、交通事故和犯罪等,许多学者也提出了相应的热点探测方案。尽管已经出现了一些优秀的基于特定背景的热度可视化工具,如基于交通的transbigdata,但当前的热点探测研究仍然存在一些挑战。现有的研究往往局限于单一的研究背景,缺乏完整的热点探测分析方案。此外,现有的地理处理工具主要停留在热度可视化的层面,难以提供精确的热点定位。由于地理空间数据的复杂性,不同背景的研究者可能会面临操作上的困难,而目前的地理信息系统软件如ArcGIS则需要较高的学习成本。因此,迫切需要开发一种普适性且易于操作的开源热点探测工具,以满足不同研究者对于城市热点分析的需求。
2. 功能
GeoHD是一个用于地理空间热点探测、可视化与分析的Python工具包。其主要目标在于提供一个易于使用且适用于不同城市研究背景的热点探测与分析工具。GeoHD的工作原理如图1所示。首先,GeoHD对输入数据进行清晰可视化与统计分析,从而获得核密度估计(KDE)结果。接下来,采用窗口分析方法计算栅格数据的像元最大值表面,然后执行密度场表面与像元最大值表面的地图代数差运算,以得到相减结果,即非负值表面。在此阶段,相减结果中每个窗口中为零的位置即代表当前区域的局部热点位置。完成窗口分析后,采用重分类算法将极值区域与除极值以外的区域分为两类。最终,通过该过程获得的极值区域即为当前区域内事件发生的热点。
目前,GeoHD主要包含以下几种功能:
- 研究数据真实分布的可视化:通过输入点数据,实现对点数据真实地理空间位置的可视化。
- 固定带宽与自适应带宽的核密度分析:实现了经典的固定带宽核密度估计以及优化的自适应带宽核密度估计,同时提供可调节参数与清晰可视化。
- 基于固定带宽与自适应带宽的地理空间热点探测:通过结合密度分析和栅格代数,实现了局部研究热点的提取,最终得到热点探测结果。
- 平面点模式分析:提供了针对热点分布的Ripley G、Ripley F、Ripley J、Ripley K、Ripley L函数图像绘制功能。
- 矩阵网格与六边形网格的热点分析:实现了基于矩阵网格与六边形网格对空间点数据进行统计,并提供清晰可视化。
GeoHD的开发填补了当前热点探测工具在普适性和易用性方面的空白,为城市研究领域提供了一种全面且有效的分析工具。
3. 使用案例
最近一项基于GeoHD的智慧城市下的自适应热点探测的研究证明了GeoHD工具包的实用性。该研究利用哈尔滨市出租车GPS数据和纽约市犯罪数据进行了热点探测。研究表明,这种热点探测方法能够精确识别城市环境中的热点区域,而不是简单地划分热点区域。该方法能够根据数据的空间分布特征动态调整参数,从而提高了热点检测的准确性和相关性。这使得研究者能够进行更精确的小尺度分析,并根据热点的具体地理位置做出及时的事件特定准备和部署。
4. 教程
文档
我们建议您从文档开始您的 GeoHD 之旅。
使用 pip 安装
该软件包在 PyPi 中可用,需要 Python 3.11 或更高版本。可以使用以下方法进行安装:
$ pip install GeoHD
用法
$ cd test
$ python -m test_automation
您还可以在 Jupyter Notebook 中运行test.ipynb
在真实地图上可视化热点:
visualize_shapefile('data.shp', output_image_path='custom_image.png')
解析平面点模式:Ripley G、Ripley F、Ripley J、Ripley K、Ripley L 等。
plot_g_function('data.shp')
将研究区域划分为四边形(六边形)网格,并根据划分区域内点数据的密度实现快速可视化。
create_cell_zones(area_file, crash_file)
create_hex_grid_zones(area_file, crash_file)
create_cell_heatmap(area_file, crash_file)
create_hexagonal_heatmap(area_file, crash_file)
实现固定带宽的核密度分析:
density_raster = process_shapefile(input_file_path)
plot_density_raster(density_raster,output_data_path, *gpd.read_file(input_file_path).total_bounds)
用于实现自适应带宽的核密度分析:
adaptiveKDE(shp_file,output_data_path)
热点识别:
hotspots = extract_hotspots(density_data_path)
visualize_hotspots(np.load(density_data_path), hotspots)
5.引用
github项目地址:如果喜欢的话请给项目一个star
论文请引用:
Yan, Y., 2024. GeoHD: A Python Toolkit for Geospatial Hotspot Detection, Visualization, and Analysis. SSRN Electron. J.
Yan, Y., Quan, W., Wang, H., 2024. A data‐driven adaptive geospatial hotspot detection approach in smart cities. Trans. GIS tgis.13137.