制作热区图

热区图(Heatmap)最适合用来呈现高密度的点资料。它可用于识别点资料中的高度密集区域,在丛集分析或热点分析的操作中也非常有用。

内容说明

我们会使用 2011 年在英国萨里郡(Surrey)的犯罪地点资料,找出郡内犯罪的热点区域。

你还会学到这些

  • 如何为高密度的点资料进行热点分析或丛集分析。

取得资料

data.police.uk 以 CSV 档格式,提供街头犯罪与其结果,以及街头拦检的资料。

Surrey Police 下载资料并解压后,就可得到 CSV 档。

为了方便起见,你也可以直接用下面的连结下载:

2015-08-surrey-street.csv

资料来源 [POLICEUK]

操作流程

1. 首先,要把 CSV 档汇入 QGIS 中 (细节请参考 汇入工作表或 CSV 档). 选择 图层:menuselection:Layer –> Add Delimited Text Layer.

../_images/126.png
  1. 找到并开启 2015-08-surrey-street.csv (如果你是从他们网站直接下载的话,档名可能会有些许不同). 档案格式选择:guilabel:CSV (comma separated values) 后. 可以看到 LongitudeLatitude 栏位自动带入到 X 和 Y 座标了。勾选 使用空间索引,可以加快在此图层上操作的速度,最后按下 OK.
../_images/217.png
  1. 载入时可能会看到一些错误,在本教学中可以先忽略它们。按下 :guilabel:`Close`即可。
../_images/310.png
  1. 资料被读到 QGIS 后,你会看到一个警告框写着:guilabel:CRS was undefined: defaulting to CRS EPSG:4326 - WGS84. 这是因为 CSV 载入程序的设定是如果你的座标是经纬度,那么预设会用 EPSG:4326 来处理投影。在其他状况下,会有一个视窗跳出来问你资料所使用的座标系统。因为我们的资料是以 EPSG:4326 投影,所以尽管忽略此警告没关系。(译按:随着 QGIS 版本不同,也有可能会要求你输入座标系统,这时选 EPSG:4326 即可。)

注解

如果要改变自动指定的 CRS,可以到:menuselection:Vector –> Data Management Tols –> Define Current Projection...

../_images/47.png
  1. 稍微放大检视资料,可以发现资料相当密集,很难快速判断哪个区块的点密度最高。这种情形下,就是热区图派上用场的时候。
../_images/57.png

6. 如果你是要制作纯粹用来视觉化或是列印出来的热区图,QGIS 有个内建的图例样式就叫做 Heatmap. 先来试试看这个吧。 在 2015-08-surrey-street 图层上按右键,选择:guilabel:Properties

../_images/66.png

7. 在 Properties 视窗中切换到 Style 的分页. 样式类别设定成 Heatmap 。 你会看到有许多种不同的色阶可以选, 这里我们来选个 Oranges 色阶。其他参数保持不变,按下 OK 即可。

../_images/76.png

8. 如此一来就可以看到资料的热区图,换句话说就是犯罪密集度高的地方比较 heat 在刚才的参数页面中有非常多的选项, 可以调整到最适合某笔资料的情况。如果你只是要弄一个视觉化或列印版本的热区图,那么就已经完成了! 不过,我们在这边还要再看看另一种更强大的热区图制作方法,它可以让你使用热区图的输出资料进行后续分析。

../_images/86.png

9.启用核心附加元件 Heatmap。 可参考 使用附加元件 进行操作。 启用后,选择:menuselection:Raster –> Heatmap –> Heatmap

../_images/96.png

10. 在 Heatmap Plugin 附加元件 的视窗中,输出影像 栏位填上 crime_heatmap 当作输出档名, Output raster. 半径 栏位填上 1000 这里的 Radius. 是指对每个像素而言, 要使用多大的圆来计算有多少点涵盖在内把 Advanced 选项打开,这样我们就能进一步设定输出热区图的尺寸。 在 Rows`栏位中输入``2000`,你会看到 Columns 栏位会自动更新。 按下:guilabel:OK 后 就会开始制作热区图。

../_images/106.png
  1. 程序跑完后,会有一个叫做``crime_heatmap`` 的图层出现在画布上。现在可以把 2015-08-surrey-street 图层取消勾选了。
../_images/1110.png
  1. 让我们来把这它弄得更像热区图,就像是早些时候的版本那样。在热区图图层上按右键选择 Properties
../_images/127.png

13. 在 Style 分页中,绘 Render type 选择 Singleband pseudocolor 。 然后在 Load min/max values 栏位下方的:guilabel:Accuracy ,勾选 Estimate (faster) 接着按下:guilabel:Load.程序会找出热区图的像素最小值和最大值,以供我们制作适当的色阶。接下来在:guilabel:Generate new color map`栏位中,选择:guilabel:`YlOrRd (黄-橘-红) 当作色阶,接着按下 Classify,最后按:guilabel:OK

../_images/136.png

14. 现在就可以看到这个图层变得比较像是热区图的感觉了。 你可以使用 Identify 工具, 在热区图上的任一区点一下,就可以在结果视窗里面看到这个像素的值。 这个值代表图层中有多少点落在这个像素周围指定的区域内 (我们的例子是方圆 1000 公尺)。

../_images/146.png

15. 这张热区图可以储存下来供未来使用,在许多时候,我们要找的是那些地方有相当高的点密度(也就是热点,Hotspot),接下来我们就来看要怎么操作。 选择 Raster ‣ Raster Calculator

../_images/156.png

16. 第一步是要决定一个门槛值,值比这个门槛还高的像素,会被当作位于高浓度区域。 对于此笔资料,我们先来试试看 10 吧。在 Raster calculator 视窗中, 把输出图层命名为 crime_hotspots_vector. 然后按两下在:guilabel:Raster bands`栏位中的``crime_heatmap@1` 它就会被加入到下方的:guilabel:Raster calculator expression`当中。依照如下所示完成表示式,然后勾选 :guilabel:`Add result to project 最后按下 OK

"crime_heatmap@1" > 10
../_images/166.png
  1. 接着 crime_hotspots 这个新图层就会被加到 QGIS 中。 这个图层的像素值不是 0 就是 1,他们分别表示像素值小于等于 10``或大于 ``10。 下一步选择 Raster ‣ Conversion ‣ Polygonize (Raster to Vector)
../_images/175.png
  1. 把输出档命名为 crime_hotspots_vector. 勾选 Field name 以及:guilabel:Load into canvas when finished.最后按 :guilabel:`OK`(译注:栏位名称 请填上 DN。)
../_images/186.png
  1. 转换完成后,QGIS 就会载入 crime_hotspots_vector 。这是我们在前一步骤所制作的热点分布图的向量化表示法。目前此图层包含了 0 与 1 的集合,所以我们还要把 0 的集合滤掉之后,剩下 1 的集合才是热点的分布区。在图层上按右键,选择:guilabel:Open Attribute Table
../_images/194.png
  1. 在:guilabel:`Attribute table`视窗中按下 :guilabel:`Select feature using an expression`的按钮。
../_images/202.png
  1. 输入如图所示的表达式,按下:guilabel:Select. 然后click on Close
"DN" = 0
../_images/218.png
  1. 在属性视窗中,可以看到符合条件的图征被选取了。按下工具列的 Toggle editing mode 然后再按下the Delete selected features (DEL) 按钮。
../_images/222.png
  1. 把选取的图征删除后,按下:guilabel:Save Edits 钮,然后再按下:guilabel:`Toggle editing mode`钮把此图层再次设定为唯读。现在可以关闭属性表视窗了。
../_images/232.png
  1. 在 QGIS 主视窗中,取消 crime_hotspots 图层的勾选。 我们的最终图层 ``crime_hotspots_vector``现已包含从热区图中撷取出来的热点。至此为止,我们已从原始资料中使用精巧的方法收集了热点,或许你可以从中发现什么洞见,或是为这些资料做进一步的处理分析。
../_images/242.png