上市公司与金融机构网点距离数据 & 使用 R 语言计算上市公司附近金融机构网点的数量
之前给大家分享过上市公司和金融机构的数据:
不少论文中也使用了上市公司附近金融机构网点数量的数据,例如 5km、10km、20km 范围内金融网点的数量。这些数据都是从上市公司与金融机构网点的距离计算得到的,所以今天就给大家分享一份上市公司与金融机构网点距离的数据。
4000 多家上市公司和 25 万家金融机构网点构成了超过 11 亿个距离对,但是并不是所有的距离都是有用的,所以我从中筛选了距离小于 200km,不过尽管如此,依然有超过 4800 万个观测值。为了方便大家使用,我分下面几种形式分享给大家:
上市公司与金融机构网点的距离(200km内,单位:km).rds (3.42GB,使用 R 语言的 readr::read_rds() 读取); 分上市公司xlsx:上市公司与金融机构网点的距离(200km范围内,单位:km)(文件夹,每个上市公司一个文件); 分文件xlsx:上市公司与金融机构网点的距离(200km范围内,单位:km)(文件夹,每 100 万个观测值一个文件)。
另外数据中的 yhid 表示银行编号、gsid 表示上市公司变量,可以通过这个编号找到对应机构的信息:
金融机构网点数据(2021年12月6日).xlsx 上市公司数据(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)
获取数据
最后汇总下本次分享的数据:
上市公司与金融机构网点的距离(200km内,单位:km).rds (3.42GB,使用 R 语言的 readr::read_rds() 读取); 分上市公司xlsx:上市公司与金融机构网点的距离(200km范围内,单位:km)(文件夹,每个上市公司一个文件); 分文件xlsx:上市公司与金融机构网点的距离(200km范围内,单位:km)(文件夹,每 100 万个观测值一个文件)。 金融机构网点数据(2021年12月6日).xlsx 上市公司数据(2021年8月28日).xlsx
是不是感觉很硬核!欢迎购买 RStata 会员获取全部课程和以会员价获取数据资料(10元/份)详情可阅读这篇推文:推荐一个学习 R 语言、Stata、计量经济学与投入产出的好地方!
详情可点击阅读原文进入 RStata 学院了解(从首页的会员卡专区即可查看和购买会员卡)。
更多关于 RStata 培训班的信息可添加微信号 r_stata 咨询: