旧版本|1998~2021年上市公司周边 PM2.5 浓度面板数据(华盛顿大学圣路易斯分校来源)

新版本在这里:https://rstata.duanshu.com/#/brief/course/ba91ac81596c49798eb44d474f22837e

前几天给大家分享了工企周边 1~5km 范围内的 PM2.5 浓度数据:

×

很多小伙伴提出是不是可以使用类似的方法计算上市公司周边的 PM2.5 浓度数据。

之前给大家分享过不少关于 PM2.5 的数据:

×

×

×

×

×

×

关于这些数据是如何处理的,感兴趣的小伙伴可以参考这个课程:

×

×

我这次先选择了第 5 份,华盛顿大学圣路易斯分校来源的 PM2.5 数据。

这份数据里面的栅格数据是分辨率 0.01˚x0.01˚ 的,大概是 1 km,下图展示了 2021 年的 PM2.5 浓度分布:

使用上市公司的注册地址和办公司是的经纬度坐标分别构建 1km~5km、10km、15km、20km 的缓冲区就可以裁剪栅格数据计算各个公司历年周边的平均 PM2.5 浓度变化了。

上市公司数据我使用的是之前分享的这个:「上市公司工商注册信息数据」(https://rstata.duanshu.com/#/brief/course/5a5f139ad5ed43e899aca084fe7a54c0),其中经纬度是使用高德地图地理编码接口进行解析的。

首先分别生成了上市公司地址周边 1km、2km、3km、4km、5km、10km、15km、20km 的缓冲区,例如地址 5km 的缓冲区是这样生成的:

library(tidyverse)
library(sf)
haven::read_dta("上市公司经纬度.dta") %>%
select(gsid, contains("度")) -> df1

df1 %>%
st_as_sf(coords = c("经度", "纬度"), crs = 4326) -> df2

df2 %>%
st_buffer(dist = units::set_units(5, km)) -> df2_5km

这样会得到一个以每个公司为中心、半径为 5km 的圆形区域。

然后读取碳排放量栅格数据,例如 2021 年的:

library(terra)
rast("yeartif/cn2021.tif") -> rst

然后使用上面的缓冲区数据和栅格数据进行地理计算就可以得到每个缓冲区内的碳排放总量了!例如 5km 的:

terra::extract(rst, vect(df2_5km), fun = "sum", na.rm = T, exact = T) %>%
as_tibble()

按照这个思路循环各个年份的即可(不过运算量非常大,建议大家不要尝试,非常耗时)。

处理之后再整理即可得到分享给大家的 1998~2021年上市公司周边平均PM2.5浓度 数据了,数据中的浓度单位是“微克/立方米”:

例如平安银行周边一定区域内年平均 PM2.5 浓度变化如下:

不同距离计算的结果差异不大,大家可以根据自己的需要选择使用。

点击这里跳转到 RStata 短书平台获取附件:旧版本|1998~2021年上市公司周边 PM2.5 浓度面板数据(华盛顿大学圣路易斯分校来源)

评论