大数跨境
0
0

我在你身旁,而你却不知我多少!

我在你身旁,而你却不知我多少! Stata and Python数据分析
2018-02-14
0
导读:情人节快乐!

有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~笔芯

爬虫俱乐部的github主站正式上线了!偷偷告诉你,我们的网站地址是:https://stata-club.github.io,真爱们可以通过该网站访问过去的推文哟~


好消息

爬虫俱乐部即将推出研究助理供需平台,如果您需要招聘研究助理(Research Assistant or Research Associate),可以将您的需求通过我们的公众号发布;如果您想成为一个RA,可以将您的简历发给我们,进入我们的研究助理数据库。帮我们写优质的推文可以提升您被知名教授雇用的胜算呀!

诸君安!相信每个人都和笔者一样都想成为有钱人,过着奢侈而又糜烂(阔怕)的生活,俗是俗了点,但起码有经济基础,那如何成为有钱人呢?天时地利人和缺一不可,天时可遇不可求,人和全看个人造化,那笔者和读者老爷们讲一讲地利吧!想赚钱,起码得看哪有钱?笔者立马想到了两个字——“银行”,作为钱的大本营,银行从来不会让我们失望。那“你”周围有多少个银行呢?笔者这就和你一探其中奥秘。

笔者在这里以上市公司为例,算一下方圆五公里有多少家银行。笔者手上有两份数据,一个是上市公司的注册地址经纬度,还有安徽省内银行的位置。

1.上市公司注册地址经纬度下载地址:https://github.com/Stata-Club/Sharing-Center-of-Stata-Club/blob/master/article/%E6%B3%A8%E5%86%8C%E5%9C%B0%E5%9D%80%E7%BB%8F%E7%BA%AC%E5%BA%A6.dta?raw=true;

2.银行地址:https://github.com/Stata-Club/Sharing-Center-of-Stata-Club/blob/master/article/%E9%93%B6%E8%A1%8C%E5%9C%B0%E5%9D%80.dta?raw=true

数据预处理



首先我们打开第二个数据“银行地址.dta”。

我们发现数据中有240家银行地址,并且还有地址所对应的经纬度,这些银行都在安徽省。

然后我们打开第一个数据“注册地址经纬度.dta”。

我们发现这里有3243家上市公司的注册地址经纬度。但是我们发现上市公司的注册地址在各个省都有,而我们只有安徽省内银行数据,所以我们需要保留注册地址中包含安徽的。

程序如下:

use "E:\推文\距离\注册地址经纬度.dta", clear

keep if ustrregexm(注册地址,"安徽")

save 注册地址.dta,replace

运行结果如下:

从运行结果中我们可以看出,删除了3145家上市公司,剩下了98家注册地址在安徽的上市公司。

经纬度计算距离



经过简单的数据预处理后,我们进行今天的重头戏——经纬度计算距离。

Mata的运算速度一直让笔者魂牵梦萦,每当写程序的时候,脑海里总是冒出一个想法——用mata,用mata,还是用mata。有请我们的运算小能手和我们一起来算距离,感受飞一般的感觉。

程序如下:

clear all

use "E:\推文\距离\银行地址.dta", clear

mata

banklong = st_data(., "Banklong")  :* (pi()/180)  //:*矩阵运算,这里的意思是矩阵每个元素乘以π/180。

banklat = st_data(., "Banklat") :* (pi()/180)     //将银行经纬度读入mata环境,并转换为弧度(公式需要)

end

运行结果如下:

这样银行地址的数据就进入到我们的mata中了,并且把银行经纬度转换为了弧度。这里用到了st_data,如果有不懂的小伙伴,请看往期推文《听说你想知道st_data()函数的用法》和《函数st_data()和函数st_view()的区别》。

接着我们需要把上市公司注册地址的经纬度导入到mata环境中,然后转化为弧度,根据公式(经纬度算空间距离公式比较复杂,由于篇幅问题,笔者在这里就不再细说了,详情请戳http://www.360doc.com/content/13/0410/17/11500595_277406769.shtml)计算出上市公司注册地址和银行的距离。最后用距离和5公里做比较,统计所有距离小于五公里的银行个数。这样我们就得到了上市公司的注册地址方圆五公里内的银行数。

程序如下:

use "E:\推文\距离\注册地址.dta", clear

mata

firmlong = st_data(., ("Firmlong")) :* (pi()/180)

firmlat = st_data(., ("Firmlat")) :* (pi()/180)   //将注册地址经纬度读入mata环境,并转换为弧度

distance = acos(sin(firmlat)*sin(banklat') + (cos(firmlat)*cos(banklat') :* (cos(firmlong)*cos(banklong') + sin(firmlong)*sin(banklong')))) :* 6378.2  //经纬度计算距离公式

A = distance :<= 5  //A为矩阵,如果distance对应位置的元素小于等于5km,则A对应位置元素取值为1,否则为0

B = rowsum(A)  //计算矩阵A的行总和,即距离小于5千米的银行个数。

st_store(., st_addvar("float","number"),B)  //函数st_addvar在stata内存增加了一个新的浮点型变量number,函数st_store将B矩阵所有的值赋给变量number

end

运行结果如下:

从结果我们可以看出,第98行,股票代码为603768的上市公司方圆五公里内有14个银行。其中还有如何实现数据在stata和mata之间交互,如果有不懂的同学可以查看往期推文《如何在Mata中进行网页分析》。

注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!

以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

文字编辑/王凯丽

技术总编/刘贝贝


往期推文推荐:

1.高校学术大神:你的导师上榜了吗?

2.中国高校财经、管理与综合类期刊灌水排行榜

3.命令sum2docx输出统计量表到docx文件

4.reg2docx报告你的实证结果吧!

5.爬虫俱乐部又出新命令了——wordconvert转换你的word文件

6.putdocx+wordconvert—将实证结果输出到Word.docx)文档

7.Stata 15Markdown——没有做不到,只有想不到!

8.矩阵和宏的故事

9.shelloutopen anything

10.Putpdf--神奇的转换工具



关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。



【声明】内容源于网络
0
0
Stata and Python数据分析
爬虫俱乐部,新的启航
内容 1337
粉丝 0
Stata and Python数据分析 爬虫俱乐部,新的启航
总阅读577
粉丝0
内容1.3k