查看原文
其他

数据地图系列6|Stata数据地图(下)

2016-06-18 小魔方 数据小魔方

今天要跟大家分享的是数据地图系列6——Stata数据地图(下)


接着前一篇的节凑,这一篇会给大家介绍比较全面的Stata热力地图代码实现。


版本仍然是基于StataSE12.0。


首先需要下载软件外部命令:spmap   #这一条命令是数据地图的专用命令。


ssc install spmap   #下载并安装spmap命令。


下载数据地图经纬度数据文件:就是昨天用到的那个


http://fmwww.bc.edu/RePEc/bocode/c/china_map.zip 


接下来是作图步骤:


1、锁定数据地图数据文件目录:  


cd d:\chinamap\  #锁定数据文件目录


2、打开中国地图数据文件(标签版)


use china_label,clear




通过浏览数据文件信息我们发现,有些代码(省份)竟然出现重复值,这个其实也不奇怪,因为我国有些省份(特别是东南沿海)有好多海岛,这些海岛彼此并不相连,因而才会出现这种情况,给我们之后的数据组织带来诸多不便,不过没关系,这些问题小魔方都已经解决了。


我们先通过随机数函数生成一列正态随机数,作为我们要填充颜色的数据指标。


3、gen x=uniform() #生成一组正太随机数


4、设置变量数据格式


format x %9.3g    #设置新变量X的整数与小数部分长度。


5、绘制地图


spmap x using "china_map.dta",  id(id)    #基本图形:配色默认黑灰色




在不指定填充颜色的情况下,软件会使用默认的一组灰色填充不同省份。


spmap x using "china_map.dta",  id(id) fcolor(Reds)  




#这句语法会使用一组不同色调的红色填充整个地图


关于填充颜色的问题,我曾经尝试了将近一个小时,挑了几套还不错的配色,这里把配色列表分享给大家。


Reds,Reds2,Greens, Greens2,Blues,Blues2,Oranges (自动分配深浅的颜色)  



以上颜色替换fcolor()内的内容,就可以实现同色系填充,而且自动分配颜色深浅,效果很棒。


以下是用Greens\Blues\Granges颜色填充的效果。


spmap x using "china_map.dta",  id(id) fcolor(Greens)



spmap x using "china_map.dta",  id(id) fcolor(Blues)



spmap x using "china_map.dta",  id(id) fcolor(Oranges)




当然上面是使用系统生成数据所做的,我们实际需要,肯定是要用自己的业务数据去做。


怎么把自己的数据与作图数据文件合并呢……


由于使用语法合并比较繁琐,容易出错,这里小魔方使用了一种比较迂回的方式,不过这样数据修改起来比较方便。


首先打开China_label数据文件后,将其数据全部复制——黏贴到新建的excel工作薄中,取名data_map。


同时将data_map中的B列(省份名称列)单独复制一份,粘贴在新建的数据指标工作薄中。(注意是新建工作薄(单独的excel文件)不是新建工作表)。




在data_map表的最右侧添加一个变量scale,使用vlookup函数从数据指标工作表表中将数据引用到data_map文件的scale列中。(相同省份(编号)数据相同)。


=VLOOKUP(B2,[指标数据.xlsx]Sheet1!$A$2:$B$35,2,FALSE)


为什么要这么大费周章呢,因为data_map表中有很多省份名称是重复的(原因已经介绍过了)。如果是在data_map表中直接输入业务数据,对于那些重复的省份,你需要重复输入很多次。


那为啥要把指标数据单独新建文件,然后使用vlookup函数引用。而不是直接在data_map工作薄中直接输入指标数据,然后引用到scale列中呢……


因为一会儿我要把data_map表另存为.CSV格式(excel数据导入Stata太复杂了),如果把指标数据也存放在data_map表中,最后的.csv文件导入会带有很多无效数据,影响数据组织。


完成之后,将data_map数据表另存为——.CSV格式。



下面就开始导入我们自己的业务数据:


cd d:\chinamap\   #锁定目录

insheet using data_map.csv,clear   //读入全部变量

format x %9.3g    #设置格式

spmap scale using "china_map.dta",  id(id) fcolor(Reds)  #作图




下次如果有新的业务指标数据的时候,可以直接复制到指标数据文件中,使用vlookup函数引用到data_map的scale变量里。


除了数据组织的过程之外,其他的过程都是跟之前的一样的。当然,如果你觉得我在excel中使用的数据组织技巧太复杂的话,也可以将指标数据直接复制到stata的China_label变量栏里,不过这样很容易出现乱码,而且还需要手动设置格式。


以上的作图语法,如果你把参数和路径都修改的跟你数据文件名、路径完全对应的话,完全没有必要一步一步的跑代码。全部复制黏贴回车,一下子地图就秒出了。你也可以把这段代码保存为命令格式(.do)以待今后使用。


当然这些技巧并非是我要讲解的重点,我只负责数据地图作图技巧,不负责软件使用和代码基础哈~


本案例没有源文件哦,不过我可以把代码文件和数据地图的数据文件给大家共享一下,在魔方学院的qq群里。(阅读原文进入获取)。



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存