1998~2014年城市边界附近的工企污染数据

之前给大家分享过三份省市区县边界附近的工企数据:

×

×

×

关于这些数据是如何处理的,可以学习这个课程:

×

这些数据展示了相邻省市区县边界附近的工企业及其与边界的最短距离,很适合建立地理断点回归模型。

位于两个相邻省份(城市、区县)的工企经营环境大致相同,但是由于处于不同的省份(城市、区县)境内,又可能受到不同的政策环境影响,因此以相邻省份(城市、区县)的共同边界为界,可以构造很好的地理断点回归模型。

最近有小伙伴表示自己想根据工企污染匹配结果构造地理断点回归模型,所以我又根据工企污染匹配结果处理了一份城市边界附近的工企业污染数据。

首先我们找到了中国所有的相邻城市对(基于 2019 年中国城市级行政区划),一共是 972 组:

附件中的 2019年中国相邻市对.xlsx 文件。

readxl::read_xlsx("2019年中国相邻市对.xlsx")

#> # A tibble: 973 × 2
#> 市代码 相邻市
#> <dbl> <dbl>
#> 1 120000 110000
#> 2 130600 110000
#> 3 130700 110000
#> 4 130800 110000
#> 5 131000 110000
#> 6 130200 120000
#> 7 130800 120000
#> 8 130900 120000
#> 9 131000 120000
#> 10 130500 130100
#> # … with 963 more rows

之前我们分享过 1998~2014 年中国工企污染匹配结果数据,可以从这里下载:https://rstata.duanshu.com/#/brief/course/bb9b96fa8a0e40c2b2bf7b2eb040f673 。通过提取每个相邻城市对的工企污染数据并计算每个工企距离共同边界的距离就可以得到这个数据包了,例如 330400 和 320500 的:

图中的散点表示工企,散点越小表示距离共同边界越近。

为了方便大家使用,我们将每个城市对的数据分别存放:

这样大家可以方便的选择自己需要的城市对。

一共 972 个文件夹(部分相邻城市对没有工企被删除了),每个文件夹包含如下内容:

  • 工企污染距离共同边界距离数据.dta
  • 工企污染距离共同边界距离数据.xlsx
  • 绘图代码.R
  • 图表(文件夹)
  • line-shp(文件夹)
  • shp(文件夹)

其中 工企污染距离共同边界距离数据.dta 是供 Stata 读取的,里面包含了这两个城市的工企污染数据及其距离共同边界的距离(里面有 gqid 变量,可以和从 https://rstata.duanshu.com/#/brief/course/183f77fb6a5d46b7ba06f30bd0ea0147 下载的 高德地图结果合成面板 数据进行匹配得到含全部变量的工企数据)。

数据中的距离单位是 km。

工企污染距离共同边界距离数据.xlsx 是供 Excel 打开的文件,内容和上面的一样。

绘图代码.R 文件是用来绘图的,不过绘图前需要把 song.otf 文件移到工作目录下:

library(tidyverse)
library(sf)
# 设置字体
# 首先把 song.otf 文件移到工作目录下,然后运行下面的代码:
library(showtext)
showtext_auto(enable = TRUE)
font_add("songti",
regular = "song.otf",
bold = "song.otf",
italic = "song.otf",
bolditalic = "song.otf")

# 读取工企距离数据
readxl::read_xlsx("工企距离共同边界距离数据.xlsx") %>%
st_as_sf(coords = c("经度", "纬度"), crs = 4326) -> maingq

# 读取两个区市的数据
read_sf("shp/130300-130200.shp") -> citypair

# 读取共同边界数据
read_sf("line-shp/130300-130200commonline.shp") -> commonline

# 绘图
citypair %>%
slice(1) -> maincity
citypair %>%
slice(2) -> touchcity
for (y in 1998:2014) {
ggplot() +
geom_sf(data = maincity, aes(fill = 市), alpha = 0.3) +
geom_sf(data = touchcity, aes(fill = 市), alpha = 0.5) +
geom_sf(data = commonline, color = "#709ae1", size = 2) +
geom_sf(data = subset(maingq, 年份 == y),
aes(size = 距离相邻市对共同边界的最小距离,
color = 市), alpha = 0.9, stroke = T) +
scale_fill_manual(values = c("#ff847c", "#99b898"), name = "") +
scale_size_continuous(range = c(0.01, 7),
name = "距离相邻市对共同边界
的最小距离(km)") +
scale_color_manual(values = c("#ff847c", "#99b898")) +
guides(color = "none") +
theme_modern_rc(base_family = "songti",
subtitle_family = "songti",
caption_family = "songti") +
labs(title = paste0(maincity$市, "——", touchcity$市,
"相邻市对工企污染 RD 模型(", y, "年)"),
subtitle = "数据计算&绘图:微信公众号 RStata",
caption = "注:散点大小表示工企距离两个共同市界的最小距离,图中的蓝色粗线表示两个市的共同市界") -> p
ggsave(plot = p, filename = paste0("图表/", y, ".pdf"), width = 10, height = 10)
}

图表 文件夹里面存放了绘图结果:

另外考虑到很多小伙伴可能不会 R 语言,所以我还把绘图数据保存成了 shp 格式的,使用类似下面的绘图语句就可以绘制了:

* 生成 Stata 图表
clear all
cd "/Users/ac/Desktop/城市边界附近的工企污染数据/Stata绘图代码/330500-330400/"
use "工企污染距离共同边界距离数据.dta", clear
encode 市, gen(county)
save 工企污染距离共同边界距离数据.dta, replace

* shp 转换成 dta
local name = "330500-330400"
shp2dta using "shp/`name'.shp", database(`name'_db) coordinates(`name'_coord) genid(ID) gencentroids(centroid) replace
shp2dta using "line-shp/`name'commonline.shp", database(`name'commonline_db) coordinates(`name'commonline_coord) genid(ID) replace

use `name'_db, clear
encode 市, gen(group)

cap mkdir "Stata图表"
forval y = 1998/2014 {
grmap group using `name'_coord, id(ID) ///
clmethod(custom) clbreaks(0 1 2) ///
fcolor("255 132 124%30" "153 184 152%30") ///
line(data(`name'commonline_coord) ///
color("112 154 225") size(*3)) ///
point(data(工企污染距离共同边界距离数据.dta) x(经度) y(纬度) ///
prop(距离相邻市对共同边界的最小距离) by(county) ///
select(keep if 年份 == `y') ///
fcolor("255 132 124%80" "153 184 152%80") size(*0.3)) ///
label(data(`name'_db) x(x_centroid) y(y_centroid) label(市)) ///
leg(off) ti("`=市[1]'——`=市[2]'相邻市对工企污染 RD 模型(`y'年)") ///
subti("数据计算&绘图:微信公众号 RStata") ///
caption("注:散点大小表示工企距离两个共同市界的最小距离,图中的蓝色粗线表示两个市的共同市界", size(*0.6)) ///
graphr(margin(medium))
gr export "Stata图表/`y'.pdf", replace
}

希望这份数据包能够帮助大家发论文~

建议

为了建立更好的模型,给大家提供如下建议:

  1. 剔除跨省的相邻城市对(不同省份的企业经营环境可能会有其他的不同因素);
  2. 仅仅把共同市界附近的工企纳入到模型中(例如剔除掉距离大于 50km 的,这样也可以减少同一家工企在模型中被多次使用);
  3. 剔除掉含工企过少的相邻城市对(例如小于 5 个的),过少的样本缺少代表性。

点击这里跳转到 RStata 短书平台获取附件:1998~2014年城市边界附近的工企污染数据

评论