查看原文
其他

上市公司与金融机构网点距离数据 & 使用 R 语言计算上市公司附近金融机构网点的数量

RStata RStata 2023-10-24

之前给大家分享过上市公司和金融机构的数据:

  1. 上市公司基本资料(包含办公地址和注册地址的经纬度数据)
  2. 更新|金融机构网点信息、经纬度和所处省市区县分布数据(含已退出的金融机构网点)
上市公司注册地址分布
金融许可证持有机构地理分布

不少论文中也使用了上市公司附近金融机构网点数量的数据,例如 5km、10km、20km 范围内金融网点的数量。这些数据都是从上市公司与金融机构网点的距离计算得到的,所以今天就给大家分享一份上市公司与金融机构网点距离的数据。

4000 多家上市公司和 25 万家金融机构网点构成了超过 11 亿个距离对,但是并不是所有的距离都是有用的,所以我从中筛选了距离小于 200km,不过尽管如此,依然有超过 4800 万个观测值。为了方便大家使用,我分下面几种形式分享给大家:

  1. 上市公司与金融机构网点的距离(200km内,单位:km).rds (3.42GB,使用 R 语言的 readr::read_rds() 读取);
  2. 分上市公司xlsx:上市公司与金融机构网点的距离(200km范围内,单位:km)(文件夹,每个上市公司一个文件);
  3. 分文件xlsx:上市公司与金融机构网点的距离(200km范围内,单位:km)(文件夹,每 100 万个观测值一个文件)。

另外数据中的 yhid 表示银行编号、gsid 表示上市公司变量,可以通过这个编号找到对应机构的信息:

  1. 金融机构网点数据(2021年12月6日).xlsx
  2. 上市公司数据(2021年8月28日).xlsx

不过需要注意,并不能直接对这个数据进行汇总统计每个上市公司附近金融机构网点的数量或者每个金融机构网点附近上市公司的数量,因为有些年份某些公司可能还没上市或者某些金融机构还没拿到金融许可证。在汇总前要删除这些不符合要求的观测值。下面两个例子可以帮助大家理解这个操作:

计算平安银行 2010 年、5km 范围内的金融网点数量

首先读取金融机构和上市公司的数据进行简单的处理:

library(tidyverse)
library(lubridate)
readxl::read_xlsx("金融机构网点数据(2021年12月6日).xlsx") %>% 
  select(yhid, 发证日期, 退出日期, 经度, 纬度, 机构名称) %>% 
  mutate(发证日期 = ymd(发证日期),
             退出日期 = ymd(退出日期)) %>% 
  mutate(退出日期 = if_else(is.na(退出日期), ymd("2100-01-01"), 退出日期)) -> yhdf
yhdf

readxl::read_xlsx("上市公司数据(2021年8月28日).xlsx") -> gsdf
  
gsdf %>% 
  select(gsid, 公司中文简称, 首次上市日期, 退市日期, 注册地址经度, 注册地址纬度) %>% 
  mutate(退市日期 = ymd(退市日期),
             首次上市日期 = ymd(首次上市日期)) %>% 
  mutate(退市日期 = if_else(is.na(退市日期), ymd("2100-01-01"), 退市日期)) -> gsdf

从距离数据中筛选出来距离小于 5km 且 2010 年 1 月 1 日前获得了金融许可证并且没有退出的:

readxl::read_xlsx("分上市公司xlsx:上市公司与金融机构网点的距离(200km范围内,单位:km)/000001.xlsx") %>% 
  left_join(gsdf) %>% 
  left_join(yhdf) %>% 
  dplyr::filter(距离 <= 5) %>% 
  dplyr::filter(发证日期 < ymd("2010-01-01") & 退出日期 >= ymd("2010-01-01")) -> mydf

绘图展示这些进入机构网点的分布:

mydf %>% 
  slice(1) %>% 
  select(公司中文简称, contains("注册地址")) %>% 
  st_as_sf(coords = c("注册地址经度""注册地址纬度"), crs = 4326) -> mypos

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

library(rstatatools)
library(leaflet)
library(leafem)
leaflet() %>%
  geoqmap(attribution = "微信公众号 RStata") %>% 
  addScaleBar() %>% 
  leafem::addLogo(img = "https://mdniceczx.oss-cn-beijing.aliyuncs.com/image_20201220175301.png", width = 60, height = 60) -> mymap
makeIcon(
  iconUrl = "company.png",
  iconWidth = 80, iconHeight = 80
) -> companyIcon
makeIcon(
  iconUrl = "bank.png",
  iconWidth = 20, iconHeight = 20
) -> bankIcon

mymap %>% 
  addMarkers(data = mypos, label = ~公司中文简称, icon = companyIcon) %>% 
  addMarkers(data = yhpos, label = ~机构名称, icon = bankIcon) %>% 
  addCircles(data = mypos, radius = 5000, fillColor = "red"
             color = "red", fillOpacity = 0.05)

计算摩根大通银行(中国)有限公司深圳分行2010年、10km 范围内的上市公司数量

这个我们需要从 上市公司与金融机构网点的距离(200km内,单位:km).rds 文件出发:

read_rds("上市公司与金融机构网点的距离(200km内,单位:km).rds") %>% 
  dplyr::filter(dist <= 10) %>% 
  dplyr::filter(yhid == 49) %>% 
  left_join(gsdf) %>% 
  left_join(yhdf) -> mydf2

mydf2 %>% 
  dplyr::filter(首次上市日期 < ymd("2010-01-01") & 退市日期 >= ymd("2010-01-01")) -> mydf2

mydf2

绘图展示:

# 绘图展示
mydf2 %>% 
  slice(1) %>% 
  select(机构名称, "经度""纬度") %>% 
  st_as_sf(coords = c("经度""纬度"), crs = 4326) -> mypos2

mydf2 %>% 
  st_as_sf(coords = c("注册地址经度""注册地址纬度"), crs = 4326) -> gspos2

makeIcon(
  iconUrl = "company.png",
  iconWidth = 20, iconHeight = 20
) -> companyIcon2
makeIcon(
  iconUrl = "bank.png",
  iconWidth = 80, iconHeight = 80
) -> bankIcon2

mymap %>% 
  addMarkers(data = mypos2, label = ~机构名称, icon = bankIcon2) %>% 
  addMarkers(data = gspos2, label = ~公司中文简称, icon = companyIcon2) %>% 
  addCircles(data = mypos2, radius = 10000, fillColor = "red"
             color = "red", fillOpacity = 0.05)

获取数据

最后汇总下本次分享的数据:

  1. 上市公司与金融机构网点的距离(200km内,单位:km).rds (3.42GB,使用 R 语言的 readr::read_rds() 读取);
  2. 分上市公司xlsx:上市公司与金融机构网点的距离(200km范围内,单位:km)(文件夹,每个上市公司一个文件);
  3. 分文件xlsx:上市公司与金融机构网点的距离(200km范围内,单位:km)(文件夹,每 100 万个观测值一个文件)。
  4. 金融机构网点数据(2021年12月6日).xlsx
  5. 上市公司数据(2021年8月28日).xlsx

是不是感觉很硬核!欢迎购买 RStata 会员获取全部课程和以会员价获取数据资料(10元/份)详情可阅读这篇推文:推荐一个学习 R 语言、Stata、计量经济学与投入产出的好地方!

详情可点击阅读原文进入 RStata 学院了解(从首页的会员卡专区即可查看和购买会员卡)。

更多关于 RStata 培训班的信息可添加微信号 r_stata 咨询:


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存