作者:万莉 (北京航空航天大学)
Stata 连享会: 知乎 | 简书 | 码云 连享会 最新专题 直播
引言
在绘制地图时,大家可能会推荐 ArcGIS 等专业软件。然而,对于习惯使用 Stata 的用户而言,若数据管理、数据分析、绘图等各方面都能在 Stata 实现,那就太棒了!Stata 的绘图功能日益强大,能满足大多数可视化需求。现在,Stata 能通过外部命令 spmap
绘制出各式各样的地图,如下图所示:
本文将详细介绍如何使用 spmap
命令绘制各种常用的地图。
1. 命令简介
外部命令 spmap
(Pisati, 2007) 的前身为 tmap
(Pisati, 2004)。Stata 15 版本的官方命令 grmap
改编自 spmap
。相较 spmap
, grmap
改动不大,但只用于空间数据 (spset data)。
由于篇幅有限,本推文只介绍 spmap
。由于其命令的选项 (options) 较复杂,我们先熟悉绘制地图的一般步骤;再进一步了解其语法结构。
1.1 绘制步骤
参考 「Stata 官网提供的 FAQ」,绘制地图的一般步骤如下:
第一步:下载三个外部命令:spmap | shp2dta | mif2dta
*-Step 1: Obtain and install the spmap, shp2dta, and mif2dta commands
// 画地图的外部命令
. ssc install spmap, replace
// 将外部的 dbf 文件和 shp 文件转化为 dta 文件
. ssc install shp2dta, replace
// 将外部的 mif 文件和 mid 文件转化为 dta 文件
. ssc install mif2dta, replace
* 获得帮助文件
help spmap
help shp2dta
help mif2dta
第二步:下载描绘地图的矢量数据文件
绘制地图时,一般需要两份数据:标签数据 (比如 ID 变量) 和地理坐标数据。对于后者,则有两种常用的矢量数据存储格式: ESRI shapefile (简称 shapefile)或 MapInfo Interchange Format。具体说明如下:
- ESRI shapefile 是美国环境系统研究所公司 (ESRI) 开发的一种空间数据开放格式,用于存储地理要素的位置、形状和属性。Shapefile 通常有一个 .zip 压缩文件,包含多个文件,其中必须包括以下三个基本文件:
- 主文件 (*.shp): 存储几何要素的的空间信息,也就是 XY 坐标。
- 索引文件 (*.shx): 存储有关 *.shp 存储的索引信息。它记录了在 *.shp 中,空间数据是如何存储的,XY 坐标的输入点在哪里,有多少 XY 坐标对等信息。
- 表文件 (*.dbf): 存储地理数据的属性信息的 dBase 表。
用 Stata 绘制地图时,我们只需要 shape (*.shp) 和 dBase (*.dbf) 两个文件。 shp2dta 命令能帮助我们分别将这两个文件转成 Stata 专属的 .dta 格式的数据。
- MapInfo Interchange Format 是美国公司 MapInfo 开发的通用数据交换格式。这种格式是 ASCⅡ 码,可以编辑,易于生成,且可以工作在 MapInfo 支持的所有平台上。它将 MapInfo 数据保存于以下两个文件:
- *.mif 文件: 存储图形数据,可理解为 XY 坐标。
- *.mid 文件: 存储文本(属性)数据。
用 Stata 绘制地图时, mif2dta
命令能帮助我们分别将 *.mif 和 *.mid 文件转成 Stata 专属的 .dta 格式的数据。
Stata 范例:
Shapefiles 包含多种类型(比如,Polygon, Point, Polyine。)在绘制地图底图时,推荐使用 polygon shapefile。 一般地,ESRI shapefile 比 MapInfo Interchange Format 更易获得。我们可以在搜索引擎上获得 shapefiles。
本例子中,我们使用美国地图 shapefile 数据。获得 shapefile 文件步骤如下: - 在 谷歌 或 雅虎 上搜 "United States shapefile" - 在搜索结果中找到 https://www. weather.gov/gis/USState s - 下载 s_11au16.zip (注:文件名会随数据的更新而改变。) - 解压文件,我们只需两个文件: s_11au16.shp 和 s_11au16.dbf
更详细的操作介绍见下图:
第三步:将地图的矢量数据文件转成 Stata 格式数据文件
利用命令 shp2dta
或 mif2dta
将地图的矢量数据文件转成 Stata .dta 格式的数据。 检查 .dbf (.mid) 文件经转换后对应的 .dta 数据。该数据为标签数据,包含 ID 变量(命名为 id),不同 id 对应不同区域划分。我们应该了解地图矢量数据的提供者是如何划分区域的。比如,在一份数据中, id=1 对应 Alaska,id=2 对应 Alabama;而在另一份数据中,id=1 对应 Albania,id=2 对应 Argentina。
*-Step 3: Translate the files
* note:将数据放在当前工作路径
shp2dta using s_11au16, database(usdb) ///
coordinates(uscoord) genid(id)
关于代码的一些说明: -database(usdb)
将 database file 转换成 usdb.dta; -coordinates(uscoord)
将 coordinate file 转换成 uscoord.dta; -genid(id)
将 usdb.