Python金融数据分析(原书第2版)
上QQ阅读APP看书,第一时间看更新

1.3 绘制时间序列图

分析时间序列数据的一种简单而有效的方法就是将时间序列数据可视化在一个图表上,这样我们就可以从中推断出某些假设。本节将指导你从Quandl下载股价数据集,并将这些数据绘制在价格和成交量图表上。我们还将绘制烛台图,比起直线图表,这将给我们更多的信息。

1.3.1 从Quandl检索数据集

将数据从Quandl导入到Python中的过程非常简单,假如我们对泛欧交易所的荷兰银行集团感兴趣,只需要在Jupyter Notebook单元格中输入以下代码(这个数据集在Quandl上的代码为EURONEXT/ABN):

019-02

005-02将Quandl的API密钥存储在常量变量中是一个很好的习惯,如果API密钥发生改变,只需要在这一个地方修改它!

导入quandl包后,我们将Quandl的API密钥存储在常量变量QUANDL_API_KEY中,本章的其余部分还要继续使用这个变量。这个常量值用于设置Quandl模块的API密钥,并且只需要对quandl包的每个导入执行一次。最后一行调用quandl.get()指令,将ABN数据集从Quandl直接下载到df变量中。(注意:EURONEXT是数据提供者Euronext Stock Exchange的缩写。)

默认情况下,Quandl会将数据集导入到pandas模块的DataFrame中。我们可以用如下代码来检查DataFrame的头和尾:

020-01

005-02默认情况下,head()tail()命令分别显示的是DataFrame的前5行和最后5行,你可以把它传递的参数设置成一个具体的数字来定义要显示的行数。例如,head(100)将显示DataFrame中的前100行。

如果你没有为get()命令设置任何附加参数,那么它将会检索整个时间序列数据集,即从你进行操作时的前一个工作日一直到2015年11月。

要可视化这个DataFrame,我们可以通过plot()命令绘制一个图

020-02

运行结果如图1-2所示。

021-01

图 1-2

pandasplot()命令将返回一个Axis对象,此对象的字符串表示将与plot()命令一起显示在界面上。为了消除这个信息,我们在最后一条语句的末尾添加一个分号“;”。或者,我们也可以在单元格底部添加一条pass语句。除此之外,我们还可以将绘图函数分配给一个变量,这样也能消除这个输出。

005-01默认情况下,pandasplot()命令用matplotlib库来显示图像,如果系统报错的话,请检查你是否安装了这个库,并且%matplotlib inline命令至少被调用过一次。

005-02你可以自定义图表的外观,有关DataFrame中plot命令的更多信息,可在以下网页上找到:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.plot.html

1.3.2 绘制收盘价与成交量的关系图

当没有参数提供给plot()命令时,它会用DataFrame的所有列在同一图表上绘制折线图,我们无法从这个杂乱无章的图像中得到什么有用的信息。为了有效地从这些数据中提取信息,我们可以绘制一只股票的收盘价与成交量的关系图。

在单元格中输入以下命令:

021-02

上述命令会将我们感兴趣的数据分别存储到closing_pricesvolumes这两个变量中,我们可以继续使用head()tail()命令查看由此产生的pandas数据类型的头部和底部:

022-01

如果你想知道某个特定变量的类型,可以使用type()命令。比如,type(volumes)命令的运行结果是pandas.core.series.Series,这样我们就知道volumes是属于pandas序列数据类型的。

从2018年一直追溯到2015年都有数据可查,这样就可以绘制收盘价与成交量的关系图:

022-02

运行结果如图1-3所示。

023-01

图 1-3

在第一行中,subplot2grid命令的第一个参数(4,4)将整个图划分为一个4x4的网格,第二个参数(0,0)表明绘图将锚定在图形的左上角。rowspan=3指示绘图将占据网格上4个可用行中的3行,即实际高度为图形的75%;colspan=4指示绘图将占用网格的所有4列,即使用其所有可用宽度。这个命令会返回一个matplotlib axis对象,我们将使用该对象绘制图形的上部。

在第二行中,使用plot()命令绘制上图表,x轴为日期值,y轴上的数值为收盘价格。在接下来的两行中,我们指定了当前图像的标题以及放置在左上角的时间序列数据的图例。

接下来,我们重复上述操作,在下部呈现每日交易量,这个图表锚定在下方1行4列的网格空间中。

005-02legend()命令中,loc这个关键字接受一个整数值作为图例的位置代码,“2”的含义是图表的左上角。有关位置代码表的信息,详见matplotlib的图解文档,https://matplotlib.org/api/legend_api.html? highlight=legend#module-matplotlib.legend.

为了让图像更清楚,我们调用set_size_inches()命令将图形设置为9英寸[1]宽6英寸高,从而形成了一个矩形图形(前面的gcf()命令表示获取当前的尺寸)。最后,我们调用带有hspace参数的subplots_adjust()命令,在上部和下部的两个子图之间添加少量的空缺。

005-02subplots_adjust()命令用来对各个子图的布局进行优化,它可以接受的参数有:leftrightbottomtopwspacehspace。更多信息请参见matplotlib文档,https://matplotlib.org/api/_as_gen/matplotlib.pyplot.subplots_adjust.html

1.3.3 绘制烛台图

烛台图是另一种流行的财务图表,它显示的信息比单一的价格图更多。烛台是每一个特定时间点的波动,其中包含四种重要的信息:开盘价、最高价、最低价和收盘价。

我们现在不再推荐使用以前的matplotlib.finance模块,用另一个由提取的代码组成的mpl_finance包来取代它,你可以在命令行窗口输入以下代码来获取这个包:

024-01

为了更加方便地可视化烛台图,我们将使用ABN数据集的一个子集。在下面的例子中,我们在Quandl上检索2018年7月份的每日价格作为数据集,并绘制如下的烛台图:

024-02

烛台图如图1-4所示。

025-01

图 1-4

005-02你可以在quandl.get()命令中定义start_dateend_date的值,从而指定数据集的时间范围。

从Quandl检索的价格会放在一个名为df_dataset的变量中,由于matplotlib的绘图函数需要自己的格式,我们用mdates.date2num命令转换包含日期和时间在内的索引值,并将它们放在名为Date的新列中。

烛台的日期、开盘价、最高价、最低价和收盘价等数据将被提取为一个DataFrame列存储在df_ohlc变量中。plt.subplots()函数会创建一个8英寸宽和4英寸高的图形,其中沿着x轴的标签将被转换为我们可读的格式。

调用candlestick_ohlc()命令来进行烛台图的绘制(烛台宽度为0.8或全天宽度的80%),收盘价高于开盘价的上涨用绿色(书中为浅灰色)表示,而收盘价低于开盘价的下跌则用红色(书中为深灰色)表示。最后,用plt.show()命令来显示烛台图。


[1]1英寸=0.0254米。——编辑注