告别全局平均用PythonMGWR库实战空间异质性分析附南京房价数据案例空间数据分析中传统OLS回归常被诟病为一刀切的全局平均模型。当数据存在空间依赖性时比如相邻区域的房价会相互影响这种忽略地理位置的建模方式往往导致结果失真。本文将带你用Python的mgwr库从零实现多尺度地理加权回归MGWR通过南京房价数据案例揭示不同区位影响因素的差异化作用规律。1. 空间异质性分析的核心工具地理加权回归GWR系列模型的核心突破在于允许回归系数随空间位置变化。这意味着在分析房价影响因素时超市、学校等配套设施的贡献度可以因区域不同而动态调整。以下是关键概念对比模型类型带宽特征适用场景计算复杂度OLS全局统一空间无关数据低GWR单一带宽中等空间异质性中MGWR多尺度带宽强空间异质性高带宽选择是模型效果的关键过大会退化为OLS过小则导致过拟合。MGWR通过为每个变量独立优化带宽实现了更精细的空间尺度捕捉。2. 环境配置与数据准备2.1 安装必备库推荐使用conda创建独立环境conda create -n spatial python3.8 conda activate spatial conda install -c conda-forge mgwr geopandas libpysal contextily pip install keplergl2.2 数据预处理实战假设已获取南京市六城区玄武、秦淮、建邺、鼓楼、栖霞、雨花台的房价与POI数据需进行以下处理格网化处理将研究区域划分为1km×1km网格变量标准化import geopandas as gpd from sklearn.preprocessing import StandardScaler data gpd.read_file(nanjing.shp) scaler StandardScaler() variables [school,mall,hospital,park] data[variables] scaler.fit_transform(data[variables])空间可视化检查import contextily as ctx ax data.plot(figsize(10,10), columnprice, legendTrue) ctx.add_basemap(ax, crsdata.crs, sourcectx.providers.Stamen.TonerLite)3. MGWR建模全流程解析3.1 模型参数初始化from mgwr.sel_bw import Sel_BW from mgwr.gwr import MGWR # 准备数据矩阵 y data[price].values.reshape(-1,1) X data[variables].values coords list(zip(data[center_x], data[center_y])) # 带宽选择 selector Sel_BW(coords, y, X, multiTrue) bandwidths selector.search(verboseTrue)3.2 模型拟合与诊断model MGWR(coords, y, X, selector) results model.fit() # 模型诊断指标 print(f R-squared: {results.R2} Adjusted R-squared: {results.adj_R2} AICc: {results.aicc} )典型输出示例Variable-specific bandwidths: intercept: 43 school: 184 mall: 271 hospital: 51 park: 633.3 结果空间可视化将系数映射到地理空间import matplotlib.pyplot as plt fig, axs plt.subplots(2, 2, figsize(15,12)) for i, var in enumerate(variables): data.plot(axaxs[i//2,i%2], columnfmgwr_{var}, legendTrue, cmapcoolwarm, schemequantiles, edgecolorwhite) axs[i//2,i%2].set_title(var)4. 业务解读与模型优化4.1 空间异质性模式识别通过分析各变量带宽值可以发现mall271影响范围最大说明商业配套具有区域级影响力hospital51作用范围最小呈现高度本地化特征school184表现出中等影响半径反映学区房效应范围4.2 常见问题解决方案内存不足报错减少网格分辨率使用kernelgaussian替代默认bi-square核selector Sel_BW(coords, y, X, multiTrue, kernelgaussian)系数可视化优化技巧# 动态调整色阶范围 vmin data[variables].min().min() vmax data[variables].max().max() data.plot(columnmgwr_school, vminvmin, vmaxvmax)模型对比决策矩阵指标OLSGWRMGWRR²0.620.780.85AICc1523.41387.21276.5运行时间(s)0.358.7213.44.3 进阶应用方向时空加权回归结合时间维度分析房价演变机器学习融合用随机森林筛选重要变量后再进行MGWR三维可视化使用kepler.gl展示系数空间分布from keplergl import KeplerGl map_config {config: {version: v1}} mgwr_map KeplerGl(datadata, configmap_config) mgwr_map.save_to_html(file_namemgwr_result.html)