旧版本|上市公司与金融机构网点距离数据

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

由于金融网点数据前两天更新了,所以这份数据也得更新下。

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

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

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

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

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

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

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

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

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

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

library(tidyverse)
library(lubridate)
readxl::read_xlsx("金融机构网点数据(2022年4月5日).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 == 92070) %>%
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.79GB,使用 R 语言的 readr::read_rds() 读取);
  2. 分上市公司xlsx:上市公司与金融机构网点的距离(200km范围内,单位:km)(文件夹,每个上市公司一个文件);
  3. 分文件xlsx:上市公司与金融机构网点的距离(200km范围内,单位:km)(文件夹,每 100 万个观测值一个文件)。
  4. 金融机构网点数据(2022年4月5日).xlsx
  5. 上市公司数据(2021年8月28日).xlsx

点击这里跳转到 RStata 短书平台获取附件:旧版本|上市公司与金融机构网点距离数据

评论