对于炒股的同学来说,必须会看懂数据才能避免入坑,今天小千就来教大家如何去使用Python分析股票数据,学到就是赚到。(小千提醒,股市有风险,请谨慎投资)
这次的美股例子就选择了美国显卡制造商英伟达,其股票代码是NVDA,熟悉英伟达的人都知道他们的CEO老黄(Jensen Huang),老黄有两样东西很出名,一是那件能穿4个季度的皮衣,二是精湛的显卡刀法。英伟达在老黄带领下飞速发展,其股价也是一直飙升,所以选择这个股票也是在近几年美股中具有代表性的。
首先还是导入各种库。
这里有一个不太常见的库是yfinance,这是从Yahoo网站获取数据的一个库,其使用非常简单,不需要相关api,同时也是免费的,而市场上其他不少库都要api,很多还是收费的,同时还有很多限制,所以我们选用了yfinance作为数据来源。yfinance直接用pip安装即可,笔者用的是anaconda,但用了conda安装会失败,最好还是用pip安装。接下来是获取数据。
yfinance下载的数据直接是pandas的dataframe格式,这里我们只要输入股票代码以及起止时间就可以了,后面的progress是进度条选项,最好关闭,否则下载好之后结果中会有一个进度条(影响也不大)。这里我们下载英伟达过去5年的股票数据,从2015年1月1日到2019年12月31日。这里有一个问题要注意,就是yfinance的数据获取时间是提前1天的,比如设置起始时间start='2015-01-02',但最终得到的股票数据时间是从2015年1月1日开始的, 同样截止时间end='2020-01-01'也就意味着数据的截止时间是2019年12月31日。下载之后的数据如下图所示。
然后是数据处理。
上面这些步骤内容较多,在这里详细说明一下。从下载得到的数据中,我们选取Adj Close这一列,其全称是adjusted close,意思是调整收盘价,这就是我们要用到的数据,将其改名为adj_close,然后用adj_close计算会计收益率(也称简单收益率),即simple returns,将其命名为s_r,方法是用后一天数据除以前一天数据,再减一,当然这里用dataframe的pct_change方法也可以,得到的结果是一样的。从前面图2中我们可以看到得到的数据的时间是以天为单位的,但这些日期并不连续,中间有部分间断,这是因为股票市场在周末等节假日不开盘,而这里我们为了利用cpi来计算会计收益率,要设计一个连续时间范围,所以这里生成了一个名为df_dates的变量,其时间范围是连续的,从2015年1月1日到2019年12月31日,让其和df合并,得到的数据如下图所示。这里面NaN(not a number)都是节假日不开盘的日期。
因为要计算实际收益率,其中使用的cpi(onsumer price index,消费者物价指数)是以月为单位的,所以我们也要把df转换成以月为单位,为了避免在每月最后一天是非开盘日,所以首先用了fillna方法,方式是'ffill',即按照前一日数据来填充,然后用asfreq('M')方法来得出每月最后一日的数据。很多人会问,这个每月最后一日的数据有什么用,因为我们用到的cpi数据都是按月份来公布的,每月只有一个cpi数据,所以我们计算会计收益率时也要按照月份来算,而每月会计收益率就是用这个月的最后一个交易日的调整收盘价除以上个月的最后一个交易日的调整收盘价,然后再减一,和前面每日会计收益率的计算方法一样。然后用月份会计收益率和cpi来计算实际收益率。而我们这次所用到的cpi数据,其时间范围从2015年1月至2019年12月,总共5年,这个数据可以从很多网站下载,直接到网上搜索就行了。
读取cpi数据之后通过cpi数据计算通货膨胀率,即inflation rate,我们把这一列命名为inf_rate,方法和会计收益率一样,接着再用通货膨胀率计算实际收益率(Real Rate of Return),方法是(1+会计收益率)/(1+通货膨胀率)-1,我们将其命名为r_r。最后得到的df数据如下图所示。
最后就是数据可视化。
这里我们只要4列数据,即除了cpi之外的其他4列数据。将其置于4个子图中,绘图直接用dataframe的plot方法即可,在这里我们选用了ggplot的绘图主题。得到的结果如下图所示。
从这里我们也可以看到用pandas分析美股数据非常方便,但是只掌握pandas的使用方法还是不够的,我们还要具备相关的金融基础知识,尤其是计量经济学的相关基础,因此在分析股票数据时最好还要有一定的经济学基础。所以在我们平时的业务工作当中,除了必要的编程技能以外,掌握相关的理论知识也是很重要的。
学习Python,可以参考千锋Python培训班推出的Python开发学习路线,结合千锋Python培训机构名师精心录制的全套Python视频教程,可以让你对学习Python需要掌握的知识有个清晰的了解,并快速入门Python开发。千锋Python培训机构视频教程分为三个大块:Python基础视频教程、Python高级视频教程、Python高手晋级视频教程。视频讲解通俗易懂,入门Python开发仅用此套视频足矣。想要获取免费Python学习路线和学习资料可以添加我们的Python技术交流qq群:790693323 加群找群管理领取即可,Python相关技术问题也可以加群解决,等你来哦~~~~