白话空间统计二十一:密度分析(一)
密度分析这个概念其实很早就想写了,也有无数同学都问过我,虾神你能不能讲讲那些漂亮的热度图是怎么做的啊?比如下面这种:
如果说,这是互联网地图里面,最让人喜闻乐见的一种空间分析模式(或者是看热闹的同学就认为是一种漂亮的可视化方式也行),让以百度热力地图为代表的这种可视化方式,成为了即缓冲查询和路径分析之后,最为广大人民群众所熟知的一种空间分析方式。
那么既然大家这么关心,所以我觉得花一段不短的时间,来把密度分析这个东西从头到尾讲一遍。继续虾神一贯的方式,我们仅仅是作为科普和入门。更深入的东西,需要大家自己去研究和学习。
嗯,开始之前,还是用GIS专业术语给大家说一句:上面那个东东,不叫热点分析,叫做热度图……具体的内容请去看虾神公众号里面白话空间统计十九:热点分析。
首先,我们来简单看看密度这个概念——中学物理说得很清楚了,单位体积内的质量就叫做密度:而且最重要的一点,密度不是绝对数值,而是一个相对值。
比如物理上面的密度,都是以水为基准单位的,如果说水的密度为1((在常温常压下,单位g/cm3),那么铁的密度是7.8,这个7.8就是指与水相比较得出来的。同等体积的铁是同等体积的水的质量的7.8倍。
OK,物理上的对比非常容易,那么是不是空间上也是一样呢?实际上很多分析里面,都直接套用了物理上的一些思维,比如:人口密度,普遍的计算方法就是以平方公里为单位,来进行计算,得出的结果一般都是下面这样的示意图:
这种对比方式,可以较为明显识别世界上各个区域的人口密度情况,这种密度就是最容易做的一种密度了,直接划分网格,然后把每个网格包含多少个点(人)计数进去就可以了。
但是实际上,空间的密度的计算可能要更加复杂一点。
比如,针对上面的密度图形,提出一个问题,中国和印度,那个国家的人口密度更大?这种问题一提出来,肯定各种被喷,话说你的条件太不严谨了等等等的。。。中国东部很多地方的密度比印度还要高,但是中国还有大片西部没人的地方……这怎么比较啊。
所以不论是计算总体密度还是计算网格密度的方式,都还是在某些方面有限制……特别是用于比较的时候。
下面我们来看看古往今来,一些关于点密度计算的方式。
最简单的一种,就是借用了一维统计分析中的技术,看看下面这个例子。
如果我们有5个事件,把他们画到直线上,正好是在7、8、9、12、13,因为总的数量是20,所以总体的密度就应该是应该是5/20 = 0.25个点每单位长度。
而如果我们就整个事件分成两段,每段10个长度,那么一部分的密度就变成了0.33个点每单位,而第二段就变成了0.2个点每单位了……
再继续分成4段——第一段和最后一段,密度就变成了0,而第二段的密度是0.6,第三段的密度变成了0.4。
这种细分总体段的方法,在空间分析里面,是空间尺度的一种,不同的空间尺度下,可能得出不同的结果。所以如果将所有的点分配到线的整个长度上,是没有唯一答案的。
比如对中国人口密度的描述,总分一段肯定就是:14亿人/960万平方公里,但是如果按东西部分两段,得出的密度又不一样了……按省、按市就变化得更厉害了。
从这里可以看出一些个重要概念:
最计算的时候,采用的线段的长度,对密度值有着重要的影响,而因为这个长度是任意的,所以我们要想办法来去除对于这种线段长度的依赖性。这种关于空间尺度的论述,汗牛充栋了,大家有兴趣自己去阅读相关论文。
那么去除线段依赖性的方法有哪些呢?最简单的就是去切分线段,把线分割成若干段。但是切开始之后,我们会发现在分割处,我们的密度值会突然发现间断——这种情况在很多时候我们并不希望。回到最上面那张百度热力地图,它的可视化效果在内行人的眼中,观察到的最大的一个优点,就是非常平滑的过度;而如果出现了断崖式的变化的话,效果就差很远了,比如下面这种:
这样效果无疑就差很远了。
而且因为点数据的分布,还有可能出现密度为0的区域,如果密度为0,那么计算出来的密度可能有部分出现了空缺的情况,像这样:当然,这种情况是肯定有出现。
最后,我们可能会尽可能的细化——以至于进行了太多的细分,就有可能变成了二值化的区域:每个部分仅包含1或者0……这样又回到了我们最初始的状态,如下:且分成若干网格之后,每个网格要么是1(红色),要么没值是0(灰色)……
所以,挑选合适的空间尺度,在密度计算里面是最最重要的事情之一,如果没有合适的尺度,密度计算的结果会让你抓狂,而至于如何来处理,我们下次继续说。