分享

白话空间统计:密度分析(合集)

 今天George 2017-09-01

密度分析(一)

*本文由虾神提供,在此中图地信代表广大GISer感谢虾神的辛勤付出! 

密度分析这个概念其实很早就想写了,也有无数同学都问过我,虾神你能不能讲讲那些漂亮的热度图是怎么做的啊?(更多内容可关注虾神博客)比如下面这种:


如果说,这是互联网地图里面,最让人喜闻乐见的一种空间分析模式(或者是看热闹的同学就认为是一种漂亮的可视化方式也行),让以百度热力地图为代表的这种可视化方式,成为了即缓冲查询和路径分析之后,最为广大人民群众所熟知的一种空间分析方式。

那么既然大家这么关心,所以我觉得花一段不短的时间,来把密度分析这个东西从头到尾讲一遍。继续虾神一贯的方式,我们仅仅是作为科普和入门。更深入的东西,需要大家自己去研究和学习。

嗯,开始之前,还是用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(灰色)……

所以,挑选合适的空间尺度,在密度计算里面是最最重要的事情之一,如果没有合适的尺度,密度计算的结果会让你抓狂,而至于如何来处理,我们下面继续说。

密度分析(二)

上面我们讲了不管怎么去分你的尺度,都有可能产生断崖式的变化,那么有没有一种方法,让我们能够尽量避免断崖式的变化呢?最简单的就是滑动平均了:把原始数据集中的每个点当作连续的分布于一个范围内的值,然后把重叠的部分累加起来;并且鉴于全部的值加起来,要等于原始值。如下:我们把每个点以均匀对称的方式,让它在5个单位上平滑。

5个原始点的分配,每个点滑动平均5个单位,也就是每个单位的密度就是0.2,把它们有重合的地方累加起来,最后总得值也是等于5的。下面的直方图可以很明显的显示了这种方式的分布效果,但是带来的问题,依然是在不同区域的边界产生了跳跃:密度值从一个值到另外一个值仍然有突然变化的可能。当然,这种方式,密度始终围绕着原始值进行均匀散布,但是在值的变化过程中还还缺了一个中间值来进行表示。

解决这个问题的办法,最常用的就是通过选择一个定义明确、光滑和无界的函数来解决,也就是所谓的核(Kernel):这个核可不是威猛无比的那个nuclear……而是所谓的“核心”的核。

通常,我们用正态分布函数,把每个原始点的值绘制为正态分布曲线,就像下图的蓝色曲线部分,然后把所有的曲线下方的区域累加在一起,就得到了上面那条红色的曲线……如果想把该曲线的面积调回到1,就把这个曲线除以5就好了(绿色的线——实际上,这种调整是一种分布的规范化方式,用以有别于正态分布)。采用这种方式来进行表述的时候,通常我们把这个东东称为概率密度,当把他们扩展到二维平面上的时候,得到曲面就称为概率密度曲面而不是密度曲面了。


上面这张图就是所谓的单变量正态核平滑和累积密度图。

下面给出绘制这张图形的R语言源代码:大家有兴趣可以自己绘制一下,也可以调整一下效果看看

aa1 <-curve(dnorm(x, 7, 1), from = 0, to 20,xlim=c(0,20),ylim=c(0,1.0),col='blue',lwd=2,lty=1)

aa2 <-curve(dnorm(x, 8, 1), from = 0, to = 20,add=T,col='blue',lwd=2,lty=2)

aa3 <-curve(dnorm(x, 9, 1), from = 0, to = 20,add=T,col='blue',lwd=2,lty=3)

aa4 <-curve(dnorm(x, 12, 1), from = 0, to = 20,add=T,col='blue',lwd=2,lty=4)

aa5 <-curve(dnorm(x, 14, 1), from = 01, to = 20,add=T,col='blue',lwd=2,lty=5)

axis(side=1,at=c(1:20))

y = aa1$y aa2$y aa3$y aa4$y aa5$y

y2 = y /5

lines(aa1$x,y,lwd=3,lty=1,col='red')

lines(aa1$x,y2,lwd=3,lty=1,col='green')

legend('topright', 

       legend = c('N(7,1)','N(8,1)','N(9,1)','N(12,1)','N(14,1)','sum','Normal'), 

       col=c('blue','blue','blue','blue','blue','red','green'),

       lwd=c(2,2,2,2,2,3,3),

       lty=c(1,2,3,4,5,1,1))

待续未完,下面我们讲讲在二维平面上绘制核平面——讲完之后,基础部分完结,我们再进入软件部分。

密度分析(三)

上面我们看到的都是一维(单变量平滑)的问题,实际上对于做地理信息的同学来说,这种在一个数轴上展开的各种曲线完全就不符合我们的认知或者审美观嘛……别急,今天开始,我们就把这种抽象的数轴曲线,变成大家喜闻乐见的二维密度图了。就像下面这个:

这是中国近一周的地震数据(2016年4月20日-2016年4月24日,数据来源:国家地震科学数据中心,网址:http://data./datashare/globeEarthquake_csn.html)     
使用R语言的ggplot2包进行的核密度分析
其实扩展到二维,无非是在一维的基础上,加上每个点的旋转函数。在二维平面上进行核密度计算,就是将核函数凡在研究区域的每一个点上面,并且计算一个精细绘制的格网上由那个点所贡献出来的值的曲面。格网分辨率一般不会影响所得到的曲面的形式。但是在分析的过程中,我们会去考虑有关实际空间上的一些实体对这种密度的影响,最后可以计算出一个负责的曲面来。而且通过可视化,还可以变成三维的曲面:比如这个区域进行三维可视化,结果如下:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多