旧版本|1990~2022 年上市公司注册地址与办公地址周边一定范围的 CO2 排放量面板数据

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

研究通常使用例如样本所在城市的人口、GDP 作为该样本本身变量的一些代理变量,最近有小伙伴想要使用上市公司周边一定区域的 CO2 排放量作为其自身 CO2 排放量的代理变量,由于计算量比较大,于是我就帮忙处理了下。

借助地理计算,我们可以构建上市公司周围半径一定距离的范围,然后以此来裁剪「1970~2022 年中国各省市区县、乡镇 CO2 排放量面板数据 & 栅格数据(EDGAR v8.0)」中的栅格数据得到该范围内的 CO2 排放总量。

1970~2022 年中国各省市区县、乡镇 CO2 排放量面板数据 & 栅格数据(EDGAR v8.0):https://rstata.duanshu.com/#/course/49fd227237794c27b4f563f4420da1ad

上市公司办公地址和注册地址的经纬度数据可以使用之前分享的:

2000~2022 年上市公司的办公地址和注册地址(含经纬度、省市区县及搬迁距离):https://rstata.duanshu.com/#/course/3a50d0aa7a274b3b9ae1b543bec92fab

数据概览

为便于大家使用,我计算了 1990~2022 年上市公司周边 1km、2km、3km、4km、5km、10km、15km、20km、25km、30km 范围内的 CO2 排放总量,最终得到了附件中的:

  • 1990~2022年上市公司注册地址与办公地址周边一定范围的CO2排放量面板数据.dta

经过计算之后一共得到了 123.1 万条结果,包含如下变量:

  • 股票代码
  • 年份
  • 地址类型
  • 距离范围_km
  • CO2排放量_吨
  • 股票简称

以平安银行(深发展)为例,其历年周边的 CO2 排放量如下图所示:

计算方法

计算方法类似下面这个课程,感兴趣的小伙伴可以学习:

使用 R 语言计算工企周边一定范围内的平均 PM2.5 浓度:https://rstata.duanshu.com/#/course/016330182fb64ecd9fab8ada0d816130

首先分别生成了上市公司办公地址和注册地址周边 1~30km 的缓冲区,例如上市公司办公地址 5km 的缓冲区是这样生成的:

library(tidyverse)
library(sf)
haven::read_dta("2000~2022年上市公司注册地址与办公地址(含经纬度及其所处的省市区县).dta") %>%
filter(年份 == 2022) %>%
select(gqid, contains("度")) -> df1

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

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

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

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

library(terra)
rast("cntif/2022.tif") -> rst

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

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

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

为了便于大家理解这个计算过程,我绘制了一幅这样的图:

方格子就是栅格数据,圆圈是上市公司周围 5km 范围的缓冲区。例如某个缓冲区和四个格子交叉,那么就是根据交叉部分的比例计算其范围内的碳排放总量。

点击这里跳转到 RStata 短书平台获取附件:旧版本|1990~2022 年上市公司注册地址与办公地址周边一定范围的 CO2 排放量面板数据

评论