查看原文
其他

cntrade的隐藏功能:获取每年年末上市公司数量

爬虫俱乐部 Stata and Python数据分析 2023-10-24

本文作者:周一鸣  中南财经政法大学金融学院 

本文编辑:郭泽源

技术总编:方一卓


Stata and Python 数据分析

     由李春涛教授团队成员司海涛薛原编写的《Stata正则表达式及其在财务数据中的应用》终于和大家见面啦!爬虫俱乐部特此为大家准备了100本,即日起购买爬虫俱乐部课程,可赠送本书一本,先到先得!


购书链接:

爬虫俱乐部Stata基础课程Stata进阶课程Python课程可在小鹅通平台查看,欢迎大家多多支持订阅!如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~

 


01引言

提起爬虫俱乐部的明星命令cntrade,想必读者们早已经耳熟能详了,我们可以使用cntrade获取上市公司的股票交易信息,通过这些交易信息可以进行多种金融指标的计算与金融市场的研究分析。而本文要介绍的是一个cntrade的隐藏功能——获取年末上市公司数量。通常情况下,当我们想知道每年年末上市公司数量时需要一个个的查找并汇总,这是一个非常麻烦收集过程,这时候cntrade命令就能让stata帮忙爬取股票信息,再通过时间进行分组、筛选,从而让计算机自动帮忙计算每年年末上市公司数量。


02cnstock和cntrade命令的用法






















    在介绍cntrade隐藏功能之前,我们先为新读者回顾一下相关命令:1.cnstock    cnstock命令可以用来直接获取A股股票代码。该命令为外部命令,使用之前需要进行下载,使用方法如下:
cnstock exchange, [options] // options里面可以填写path(foldername),即保存的路径,exchange里面可以填写要输出的股票类型,即是A股,还是港股,还是沪深A股等等




2.cntrade    cntrade命令可以获取你所关注的股票的详细交易信息,包括股票代码,股票名称,交易时间,最高价格,最低价格,开盘价,收盘价,交易数量,周转率,市场容量,累计市场容量,人民币交易总额等等。该命令为外部命令,使用之前需要进行下载,使用方法如下:
 cntrade codelist , [options] //codelist是填写股票的代码,options里面可以填写  path(foldername),stock或是index












03cntrade使用的简单案例

利用cntrade获取平安银行和凌云B股的所有信息,代码如下:

clear allcntrade 000001 900957

此时可以在默认的路径下看到名字为000001.dta和900957.dta的两个文件:

而打开文件就可以看到股票自上市以来的信息,例如点开900957.dta这个文件,可以得到凌云B股自2000年起至今的所有相关信息:

       但如果cntrade后填写的股票代码不存在时,则会打断后续股票信息的获取,例如:

clear allcntrade 000001 601023 900957, path(/Users/zhouyiming/Desktop/个别股信息)

stata的result窗口会显示报错:

此时在指定的路径下只能看到000001.dta这一个文件。

要想保证不被打断,可以使用capture命令,将代码改成:

clear alllocal var 000001 601023 900957foreach i of local var{ capture cntrade `i'}

在默认的路径下就可以看到名字为000001.dta和900957.dta的两个文件了。


04cntrade获取年末上市公司数量的案例


具体步骤如下:

首先,利用cnstock进行上市公司股票代码的提取,代码如下:

clearcnstock all, path(/Users/zhouyiming/Desktop/cnstock)

这样,所有上市公司的名称与代码就保存在了指定路径下的dta文件中。结果如下,可看到目前为止所有上市公司名称以及对应的股票代码,总计共5330个:

然后,利用cntrade爬取所有A股上市公司股票的详细信息,包括日期,股票名称,开盘价,最高交易价,最低交易价,收盘价等等,代码如下:

clearset more offcap mk /Users/zhouyiming/Desktop/cnstockuse "/Users/zhouyiming/Desktop/cnstock/cnstock.dta"levelsof stkcd, local(levels)foreach c of local levels { capture cntrade `c'}

其中由于有的上市公司股票没有信息资料,若直接采用cntrade命令,会该股票信息显示无法提取,会显示如下信息:

因此这里采用了capture命令。

结果可爬取和下图类似的共计5188个文档,每个文档对应一个股票代码的所有数据信息:

接下来,对这些文档进行合并,毕竟一个个点开看太过麻烦,同时也不利于后续的筛选:

clearcd "/Users/zhouyiming/Desktop/上市公司股票信息"local files: dir "." file "*.dta"foreach file in `files'{ append using `file', force}compress

由于点开时发现时间那一列的数据把年月日放在了一起,而我们后续需要对年份进行筛选,因此作了如下操作将年月日分开并保存了文件:

format date %tdgen year=year(date)gen month=month(date)gen day=day(date)save "股票信息(总).dta",replace

最后,我们去除了同一年里同一个股票重复值并根据年份进行分类计数,从而得到每年年末上市公司数量,代码如下:

duplicates drop year stknme, forcebysort year: egen amount =count(stknme) keep year amountduplicates dropsave "年末上市公司数量.dta",replace

最后得到的结果为:

这样,我们就获取了1990-2022年每年年末上市公司的数量啦!如果想获得其他有关股票的信息,就赶紧用cntrade命令去试试吧~

END
重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:

最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。






对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!

往期推文推荐     Python交互式数据可视化——酷炫的Altair库 hk系列命令(3)—— hktrade hk系列命令(2)—— hkar hk系列命令(1)—— hkstock 超好用的字符串方法 基于Python的假设检验实现 Stata与MySQL交互--基础操作     Jupyter Notebook中的魔术命令《Stata正则表达式》由中国金融出版社出版发行    匿名函数lambda到底怎么用? Stata绘图系列—NBER Working paper仿图 Camelot:从PDF中提取表格数据 Stata之计算财务指标——融资约束 列表生成式|让你的代码更简洁 Stata绘图系列——玩转绘图通用选项之坐标轴 玩转地图的好帮手--pyecharts 爬虫俱乐部又又又输送了一位研究助理!!!【数据分析】一文教你玩转DataFrame 震惊,爬虫俱乐部竟是这样运营答疑群的?!【数据分析-入门】一看就会!Numpy的创建、索引、切片与更新

     关于我们 

   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



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

投稿邮箱:statatraining@163.com投稿要求:1)必须原创,禁止抄袭;2)必须准确,详细,有例子,有截图;注意事项:1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。



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

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