数据地图系列6|Stata数据地图(下)
今天要跟大家分享的是数据地图系列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群里。(阅读原文进入获取)。