在之前的推文中我们提到过一个
数据处理
的神器:
post
命令,详情可见推文
《
免费的股价同步性,一片片从邮局寄来
》
,今天爬虫君就以如何获取
中国上市公司上一个交易日的收盘价
这个案例
来说明如何使用post命令输出数据。
post命令是一个整理数据的法宝。我们可以把post输出数据的过程理解为定义邮件,寄邮件和收邮件。
(1)
postfile
:定义寄邮件的邮局名,然后定义邮件中包含哪些变量,每个变量的存储格式,最后定义接收地址。
(2
)
post
:寄邮件,每次寄邮件都会按照刚刚定义的邮件内容进行邮寄,每寄出一封邮件,外部数据就会增加一行。
(3)
postclose
:关闭邮局。如果不使用postclose,则无法打开外部数据。
简单了解了post的相关命令之后,让我们来举个例子看一下吧~
clear
capture postclose mypost
//
避免因相同的post邮局系统没有关闭而出现错误。
postfile mypost str20 city str12 time temperature using E:/爬虫.dta, replace
在这里定义寄邮件的邮局是
mypost
,邮件的内容包含三个字段分别是长度为20的字符型变量
city
,里面装的是城市名;长度为12的字符型变量
time
, 里面装的是时间;数值型变量
temperature
,里面装的是温度。接收邮件的地址是
E:/爬虫.dta
,
replace
表示的是如果文件已存在直接覆盖已存在的文件。
post mypost ("武汉") ("8:46") (12)
post mypost ("香港") ("18:46") (33)
先寄第一封邮件,邮件的内容是:武汉、 8:46 、12,邮寄成功后
爬虫.dta
中的数据会增加一行。再寄第二封邮件,邮件的内容是香港 、18:46 、33 ,邮寄成功后
爬虫.dta
中的数据会再增加一行。注意如果输入的是字符型必须要用英文状态下的“ ”,所有的括号都是在英文状态下的,并且每个括号之间都必须有空格,否则stata会将其辨认为函数。
如果括号之间没有空格,stata就会报错哦!如下图:
postclose mypost
use E:/爬虫.dta, clear
最后输出结果如下:
以万科和长江电力为例,这两个公司的股票代码是000002和600900
cntrade 2
//
获得万科的股票历史交易数据
我们获取的数据是按时间的先后顺序排列的,要获取上一个交易日的收盘价信息,只需要保留最后一行:
keep in -1
接下来,我们来看一看要邮寄的信息:stkcd(股票代码)、date(日期)、clsprc(收盘价)。这样我们就可以在数据整理之前先定义邮件,设定好邮件接收地址,即E:/mypost.dta。程序如下:
clear all
cap mkdir E:/收盘价
cd E:/收盘价
capture postclose mypost
postfile mypost stkcd date clsprc using E:/mypost.dta, replace
foreach stk in 2 600900{
//使用foreach对两家公司的股票代码做循环
cntrade `stk'
keep in -1
post mypost (`stk') (date[1]) (clsprc[1])
//将我们循环得到的万科和长江电力的数据按照定义的格式邮寄到我们设定好的地址
}
postclose mypost
//股票收盘价数据寄出后,我们关闭邮局即可
use E:/mypost.dta, clear
format date %dCY-N-D
输出的结果如下:
这样就得到了万科和长江电力两家公司在上一个交易日的收盘价,是不是很easy。这样前期所有的准备工作就做好了,我们来上大菜!
首先获取中国所有上市公司的股票代码,使用这些股票代码来做循环:
cnstock all
为了运行方便,随机选取十只股票:
sample 10, count
levelsof stkcd
//得到股票代码返回值
return list
//查看返回值
股票代码被保存在名为levels的返回值中。
接下来,对十只股票代码进行循环:
foreach stk in`r(levels)'{
cntrade `stk'
}
完整的程序如下:
clear all
cap mkdir E:/收盘价
cd E:/收盘价
capture postclose mypost
postfile mypost stkcd date clsprc using E:/mypost.dta, replace
cnstock all
sample 10, count
levelsof stkcd
foreach stk in`r(levels)'{
cntrade `stk'
keep in -1
post mypost (`stk') (date[1]) (clsprc[1])
}
postclose mypost
use E:/mypost.dta, clear
format date %dCY-N-D
这样我们的最终程序就完成了,屏幕上清晰的输出了我们想要的结果啦!
以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。
另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!
应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~