ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

QGIS核密度分析实战:从参数设置到选址决策

QGIS核密度分析实战:从参数设置到选址决策 去年接了个选址分析的活儿一个做连锁餐饮的朋友丢给我几千个竞争对手门店的坐标点让我帮忙看看哪些片区竞争已经白热化、哪些地方看着点不多但人流潜力不错。我当时的第一反应是画核密度图但真正上手之后才发现QGIS里的核密度分析Kernel Density Estimation, KDE远不是点点鼠标出张色斑图那么简单。参数怎么设、坐标系用什么、结果怎么读每一环都有讲究而且每一环都决定着你最终拿到的图是能支撑决策的还是只能发朋友圈当个装饰。这篇文章我就把自己在QGIS里做核密度分析的全过程、参数选择的逻辑、结果解读的方法以及踩过的一些坑完整地梳理一遍。无论你是刚接触QGIS的新手还是已经用过一段时间但不太确定参数怎么调的进阶用户应该都能从中找到能直接落地的内容。1. 为什么是核密度分析离散点与连续密度之间的距离1.1 离散点数据的困惑密度到底怎么算手里有点数据最直接的需求往往是哪些区域点最多最简单的做法是把研究区划分成网格数每个网格里的点数然后做一张分级着色图。这个方法不是不行但问题也明显——网格的大小直接决定结果长相网格大了全是一片色网格小了又切得七零八落而且网格之间的数值是跳变的明明相邻的两个格子可能一个算出来是峰值另一个就是零。这种不连续性在汇报给决策者看的时候往往很难解释。核密度分析解决的就是这个问题。它不再把空间切成一格一格的投票箱而是假设每个点都向周围施加一个影响场距离越近影响越大距离越远影响越小然后把这些影响场叠加起来生成一个连续的密度表面density surface。在这个表面上每一个位置都有一个估计密度值不再有某个格子里恰好没有点所以就是0的尴尬情况。1.2 从点集到表面的数学直觉核密度估计的数学公式看起来不复杂但如果只看公式很难建立起直观感受。我自己习惯用一个比喻来理解把每个点想象成往水面滴入的一滴墨水墨滴会向四周扩散靠近圆心的地方颜色深越往外颜色越淡。如果多个墨滴落在一起颜色就会叠加变深。最后你看到的水面就是一张连续的颜色梯度图深色处就是点最密集的区域。实现这个墨滴扩散的数学函数就是核函数Kernel。QGIS里默认用的是Quartic核四次核可以直接理解成一个扣过来的碗形中心是1往四周逐渐衰减到0到了带宽Bandwidth/Radius边缘正好归零。除此之外还有高斯核它不会在带宽边缘突然截断而是有一条长长的尾巴衰减更平滑。实际选择上Quartic因为计算量小、效果稳定是很多软件默认的选项。我做了很多次实验之后的感觉是核函数的选择对最终结果的影响远小于带宽选择的影响。所以在QGIS里通常保持默认的Quartic就够用了更多精力应该放在调带宽上。1.3 三个关键参数带宽、像元大小、权重QGIS原生工具Heatmap (Kernel Density Estimation)里有几个核心参数搞懂它们是整个分析的关键带宽Radius决定每个点的影响范围也就是墨滴能扩散多远。这是最核心的参数选错了结果天差地别。像元大小Pixel size决定输出栅格的分辨率类似于照片的清晰度。它不影响密度的空间形态主要影响输出细腻度和计算速度。权重字段Weight field如果点数据还附带数值属性比如门店营业额、病例数、事故数量可以把这个字段作为权重让大值点在空间上施加更大影响。2. 动手前必须解决的三个问题坐标系、数据质量、底图2.1 坐标系经纬度坐标无法直接算带宽这是新手最容易忽略、也是最致命的一步。QGIS的核密度工具在计算时完全基于图层的坐标数值来判断距离。如果你的数据是WGS84经纬度坐标坐标系是EPSG:4326那么半径参数的单位是度而不是米。一个纬度大约对应111公里但一个经度在赤道附近也约等于111公里到高纬度地区就只有几十公里了。你如果直接拿经纬度数据去跑核密度所谓的500米半径实际上会变成一个奇怪的500度范围结果自然完全不对形态还会在经度和纬度方向上有严重变形。正确做法是在分析之前把图层投影到合适的投影坐标系。中国地区通常可以选择UTM分区投影比如CGCS2000 / UTM zone 49N、50N、51N或者使用高斯-克吕格投影的地方坐标系。判断标准很简单看图层属性里的CRS只要单位是米而不是度基本就可以用了。在QGIS里做投影转换并不复杂右键点图层选择导出Export→要素另存为Save Features As...。在CRS栏选择一个合适的投影坐标系。导出一个新文件后续分析用新文件不要在原图层上操作。2.2 点数据清洗重复点和离群点怎么处理拿到手里几千个点别急着跑分析先做一次简单的数据体检。我用QGIS最常用的几个操作为重复点排查多个记录可能共用同一个坐标比如同一栋楼里的多个报告这些重复点会在核密度分析中被当成多个独立点形成局部假热点。排查方式可以用处理工具箱Processing Toolbox里的点在多边形内计数之类工具也可以直接打开属性表排序看有没有坐标完全一样的记录。范围检查把点图层叠加到行政边界或底图上用肉眼检查有没有坐标飘到海里去、跑到城市范围外很远的异常点。离群点不多可以手工删掉多了就要回到数据源头确认采集是否有问题。点数量的合理性核密度估计在点非常少的情况下比如只有几十个点其实很不可靠。我的经验是少于100个点画出来的结果更像插值而不是密度解读时要格外谨慎。2.3 底图叠加让结果有地理上下文核密度分析的结果本质上是一张栅格色斑图如果没有地理底图参照看不出来哪里是哪里。QGIS加载底图最简单的方式是通过XYZ Tiles添加公开的在线底图在左侧图层面板里找到XYZ Tiles右键选择新建连接。输入一个名称和服务地址比如OpenStreetMap的标准瓦片服务。添加完成后把该图层拖到最底部作为底图。国内用户如果访问国际底图服务速度不理想也可以考虑加载天地图等公开底图服务。注意在正式汇报或公开发布时按要求注明底图来源即可。3. 在QGIS里跑一遍核密度完整操作路径3.1 找到工具与理解命名QGIS的核密度分析工具在处理工具箱Processing Toolbox里搜索Heatmap就能看到。不同版本里工具命名可能略有不同大多数版本里显示为Heatmap (Kernel Density Estimation)中文界面里通常叫热力图核密度估计。第一次用的时候很多人会把它跟另一个工具混淆——在栅格分析Raster Analysis里有一个叫栅格计算器的那是做格网统计的不是核密度。看准工具名字里有Kernel Density Estimation字样就是它。3.2 参数面板逐项解读双击这个工具打开的对话框里需要设置的内容如下输入点图层Input point layer选择你已经投影好的点图层。半径Radius这就是带宽单位是当前图层坐标系的单位既然我们已经做了投影单位就是米。默认值是图层范围宽度的十分之一但这个默认值通常不适合直接使用。具体怎么选下一节详细说。像元大小Pixel size默认值是输入图层范围除以某个值通常够用。如果要更快出结果可以适当调大比如从10改成50先看效果趋势最终成图再调小。核函数Kernel shape默认Quartic保持默认即可。权重字段Weight field如果有合适的数量字段选上没有就留空。输出栅格Output raster这里一定要选择保存路径建议用GeoTIFF格式不要选临时文件——因为后面还要反复加载、调样式、裁剪保存成正式文件更稳妥。3.3 运行与产物说明点击运行后QGIS会自动把生成的结果加入图层。这一步通常很快几千个点、一个合理像元大小几秒到十几秒就能跑完。输出的是一个单波段栅格每个像元的值代表该位置的核密度估计值。这个值本身不是点的个数而是一个经过核函数加权后的密度度量可近似理解为单位面积上的点密度强度但和单纯的每平方公里的点数并不完全相等因为它还包含了核函数平滑的影响。这一点在结果解读时要清楚。4. 带宽和像元大小不是拍脑袋而是业务尺度的映射4.1 带宽选择的三条实战原则带宽是整个分析里最核心的参数。初学的时候我习惯套用一些理论公式比如Silverman提出的经验法则后来发现在真正的业务分析里带宽应该首先服从业务尺度然后才是统计优化。举个实际的例子分析一个城市里餐饮门店的竞争格局半径选500米和选3公里得到的完全是两回事。500米半径时热点只集中在商圈的几个核心位置3公里半径时整个天际线都被抹平了密度高的片区都连成片。到底哪个对取决于你要回答的问题——是想找一个步行可达范围内的局部竞争强度还是以3公里辐射圈为单位的区域热度。前者500米合理后者3公里更合适。我现在的习惯是遵循三个原则原则一业务尺度优先。先问决策者要回答什么尺度的问题再倒推带宽。做社区商业选址带宽通常在300-800米做区域宏观经济分析带宽可能要到5公里以上。原则二多跑几组做比较。不要只跑一个半径就下结论。我会依次跑0.5倍、1.5倍、3倍于预估值的结果放在一起对比。密度结果的相对分布形态如果稳定说明结果可靠如果变化剧烈说明数据本身或者带宽选择还需要谨慎。原则三参考点的分布密度。如果平均点间距是500米带宽设成200米显然是过小了表面会充满坑如果平均点间距是500米带宽设成3公里表面又会过度平滑。一个粗略参考是带宽至少是平均点间距的3倍以上但不能超过研究区尺度的1/5。这个经验值来自我多次对比实验的体会不是统计教科书公式但实用性强。4.2 像元大小的取舍像元大小对密度形态影响不大主要影响细腻度和计算速度。但有一些经验可以分享像元大小不要比带宽小太多。如果带宽是800米像元设成5米输出栅格会非常精细但相邻像元之间的密度值高度相关这些精细感全是假细节而且文件体积暴大、渲染变慢。一个比较合理的经验是像元大小为带宽的1/30到1/20。带宽800米时像元大小30-40米左右效果通常就不错了。如果只是快速探索可以把像元设大一些比如100米甚至200米先把整个工作流跑顺最后确定所有参数后再用最终像元大小出图。4.3 权重字段的合理使用在实际业务中点往往不是一对一的而是带数量的。比如交通事故数据里每个点代表一个事故位置但同一个路口可能有多次事故记录。这种情况下有两个处理思路思路一先做点聚合把同一位置的多条记录合并成一条用一个数量字段表示次数再在核密度分析里选择这个字段作为权重。思路二保留每条记录直接用计数型核密度。两个思路的结果形态大体一致但细节有差异。思路一会让权重大的位置在空间上突出得更加明显思路二则可能因为多次重复出现在同一精确坐标而导致局部尖峰。我个人的偏好是思路一因为更可控一些也便于未来做敏感性验证。用QGIS实现点聚合的方式是处理工具箱里的按位置连接属性或直接使用统计工具将重复坐标的记录按位置汇总、生成唯一标识字段。5. 结果可视化让密度表面变成能直接汇报的图5.1 栅格样式调整刚跑出来的核密度栅格在QGIS里默认是灰白色的完全看不出信息量。需要手动调整样式右键图层选择属性Properties→符号系统Symbology。渲染类型选择单波段伪彩色Singleband pseudocolor。配色方案选择YlOrRd从黄色到橙红再到深红这类渐变色。这种配色在汇报场景里最容易让人一眼抓住高密度区。在颜色渐变Interpolation选项里选择线性Linear通常就够用。模式Mode建议选分位数Quantile让颜色分布更平均如果你关心的是绝对高值区域可以用等间距Equal Interval。对最小值的处理在最小/最大设置里可以把最小显示值稍微抬高一点把低密度区设为透明避免色斑盖满整张图。5.2 用裁剪把热点限定在研究区内核密度分析的边缘效应是一个绕不开的问题——靠近图层边界的地方因为边界外的点不存在估计值会偏低形成一圈密度塌陷。这是因为核密度估计本质上是在每个位置统计周围窗口内的点但到了研究区边缘窗口有一部分落在研究区外自然算不出密度来。一个常用的处理是用研究区的面图层比如行政区边界去裁剪密度栅格把研究区以外的像素去掉。在QGIS里用处理工具箱里的裁剪栅格Clip raster by mask layer工具掩膜图层选择边界面文件即可。这样不仅消除了边界外的视觉干扰也让成品图更规范。另一个我常用的进阶操作是把栅格按照行政区统计平均密度然后用多边形密度图的形式展示——把连续性降维成报告里更便于解释的结论。但需要注意这个操作会丢掉空间细节一般只作为补充材料。5.3 输出与打印最终汇报时我通常会借助QGIS的布局管理器Print Layout出图在布局里添加地图项选择当前视图范围或指定范围。添加图例将核密度的颜色梯度图例放进去。添加指北针、比例尺、标题和数据来源说明。导出为PNG或PDF。有一个小提醒如果导出PNG分辨率至少设置300dpi否则在PPT里拉伸会糊。另外图例里默认会显示各种完整数值段可以把颜色条上的数值改成业务语义更强的描述比如高密度区、中密度区、低密度区或者标注具体的驱动因素。6. 实战中反复踩过的坑从参数到解释的边界6.1 坐标系错误带来的蝴蝶形结果我在一次分析路网事故数据时拿到手的是经纬度数据图省事没做投影直接设了一个估计的米制半径跑核密度。结果密度图在经度方向拉得特别长形态像一只压扁的蝴蝶。刚开始我还以为是数据本身的问题排查了很久才发现是坐标系的问题——带宽参数给的数值被当成度来用自然就全错了。这个错误最坑的地方在于它不会报错也不会有红黄警告。你在图层面板的CRS信息里看到的依然显示是WGS84但跑出来的单位却是完全混乱的。所以我的建议是拿到任何点数据第一步就确认CRS确认不是米制单位就直接做投影转换。这个习惯已经刻进我的工作流里了。6.2 重复点与假热点还有一种非常常见的坑数据里大量重复的坐标。我遇到过一批外卖商户的数据同一个商场里几十个商户他们的坐标因为采集原因都指向商场的同一中心点。跑核密度后那个商场就成了一个异常突出的红色尖峰看着像竞争极端的中心实际上是数据重复造成的假象。处理方式前面提过比较有效的方案是先用按位置汇总把重复点聚合或者给每个点加一个小的随机偏移注意不能改变分布趋势也可以直接用权重字段方案。但更保险的做法是在结果解读阶段把假热点区域切出来叠加上矢量点看看是否存在大量重复做好标注而不是直接照着结果做业务决策。6.3 结果解释的边界密度高不等于应该选址这是我想强调的最后一个点也是很多人容易犯的认知错误。核密度分析描述的是现有事件的分布强度它回答的问题只是哪里密度高。至于这个密度背后意味着什么——是竞争激烈、是基础设施完善、还是一块蓝海市场——必须要结合业务背景来判断。比如一个分析外卖门店热力图的场景里高密度区可能意味着两个完全相反的结论如果高密度区代表竞争者扎堆那是一个需要规避的红海但高密度区同时也可能代表这一个片区的外卖需求确实旺盛基础设施成熟那么新店挤进去也能分到一杯羹。最近的一次帮朋友做选址时我最终给的建议就没有选择密度最高的商业中心而是选在了两个热点中间一个中等密度、但周边住宅覆盖良好的位置。那个位置恰好是邻居密度中等、需求韧性较好的过渡带。这说明了同一个密度结果叠加不同的业务假设可以得出完全不同的决策。核密度分析不会替你回答该怎么办它只把空间分布呈现给你。关键决策还是要结合道路网络、消费人群画像、租金水平等其他维度才能站得住脚。6.4 性能与批处理技巧当点数量非常大十几万甚至上百万时QGIS原生工具的核密度计算速度会明显下降。我的经验是两个办法方法一在探索阶段先把点图层按照空间随机抽稀到20%-30%快速调好参数再用全量数据出最终图。方法二使用QGIS的图形化建模器Graphical Model Builder把投影转换、核密度、裁剪、样式调整串成一个模型以后数据更新了直接一键重跑不用每次手动重复点鼠标。我第一次做这个流程时参数反复改了七八次每次都要重复投影、跑密度、裁剪、调色、导出。把这些步骤录成一个模型之后后续换一批数据只要重新运行几分钟就出完整成果了。这点在项目交付阶段尤其省时间。最后再分享一个操作习惯任何核密度分析项目我都会同时保存一份参数说明文档把用的坐标系、带宽值、像元大小、核函数类型、数据来源记录下来。这不仅是溯源需要也是下次数据更新后保持同口径重跑的前提——否则换了个人、换了台电脑参数对不上结果就没法比较了。这个文档写完通常项目都还没结束等回头复盘时就发现它比那次分析本身还有用。
返回列表