首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个简单的股票数据分析及可视化库

一个简单的股票数据分析及可视化库

作者头像
老齐
发布2020-07-01 14:50:29
1.5K0
发布2020-07-01 14:50:29
举报
文章被收录于专栏:老齐教室老齐教室

在这篇文章中,我将利用stocker模块,演示如何进行数据分析的,你可以从Github仓库中获得这个模块的代码:https://github.com/WillKoehrsen/Data-Analysis/tree/master/stocker。

开始

安装好各种有关的库之后,首先要引入stocker,以下演示都是在Jupyter Notebook中进行的。

!pip install quandl
!pip install fbprophet
!pip install plotly
from stocker import Stocker

然后,就可以加载数据,创建股票数据对象。

microsoft = Stocker('MSFT')

# 输出
# MSFT Stocker Initialized. Data covers 1986-03-13 00:00:00 to 2018-03-27 00:00:00.

现在我们创建了microsoft对象了。Stocker中包含了3000支美国股票的每个交易日的股票数据。

通过microsoft的属性,可以得到历史数据。

stock_history = microsoft.stock
stock_history.head()

# 以下表格是输出

Date

Open

High

Low

Close

Volume

Ex-Dividend

Split Ratio

Adj. Open

Adj. High

Adj. Low

Adj. Close

Adj. Volume

ds

y

Daily Change

0

1986-03-13

25.50

29.25

25.5

28.00

3582600.0

0.0

1.0

0.058941

0.067609

0.058941

0.064720

1.031789e+09

1986-03-13

0.064720

0.005779

1

1986-03-14

28.00

29.50

28.0

29.00

1070000.0

0.0

1.0

0.064720

0.068187

0.064720

0.067031

3.081600e+08

1986-03-14

0.067031

0.002311

2

1986-03-17

29.00

29.75

29.0

29.50

462400.0

0.0

1.0

0.067031

0.068765

0.067031

0.068187

1.331712e+08

1986-03-17

0.068187

0.001156

3

1986-03-18

29.50

29.75

28.5

28.75

235300.0

0.0

1.0

0.068187

0.068765

0.065876

0.066454

6.776640e+07

1986-03-18

0.066454

-0.001734

4

1986-03-19

28.75

29.00

28.0

28.25

166300.0

0.0

1.0

0.066454

0.067031

0.064720

0.065298

4.789440e+07

1986-03-19

0.065298

-0.001156

这也体现了Python语言的特点。另外,通过执行对象的方法,能够实现某些操作,比如可视化图像。

microsoft.plot_stock()

# 输出
Maximum Adj. Close = 96.77 on 2018-03-12 00:00:00.
Minimum Adj. Close = 0.06 on 1986-03-24 00:00:00.
Current Adj. Close = 89.47 on 2018-03-27 00:00:00.

默认是绘制收盘价的图示。这是最基本的操作,当然,也可以设置一些参数,比如开始日期、结束日期等。

microsoft.plot_stock(start_date = '2000-01-03',  end_date = '2018-01-16',  stats = ['Daily Change', 'Adj. Volume'],  plot_type='pct')

# 输出
Maximum Daily Change = 2.08 on 2008-10-13 00:00:00.
Minimum Daily Change = -3.34 on 2017-12-04 00:00:00.
Current Daily Change = -5.47 on 2018-03-27 00:00:00.

Maximum Adj. Volume = 591052200.00 on 2006-04-28 00:00:00.
Minimum Adj. Volume = 7425503.00 on 2017-11-24 00:00:00.
Current Adj. Volume = 53704562.00 on 2018-03-27 00:00:00.

注意y轴,是相对平均值的变化的百分比。这是很有必要的,因为如果采用价格绝对值,更多时候变化可能不大。

在股票投资方面,有的人搞长线,有的人搞短线,那么,如果长期持有微软的股票,会怎么样呢?有一个方法,可以显示出来。

microsoft.buy_and_hold(start_date='1986-03-13', end_date='2018-01-16', nshares=100)

# 输出
SFT Total buy and hold profit from 1986-03-13 to 2018-01-16 for 100 shares = $8829.11

从1986年开始,如果长期持有100份微软股票,是不是收益满满呢?

创建模型

股票数据时一种时间序列数据,可以通过一些模型对它进行分析。我们知道微软股票的长期趋势是稳定的增长,但也可能有每年或每天的模型,例如每周二的增长,这对投资会非常有利。分析时间序列数据,最常用的是Prophet库,它是由Facebook开发的。Stocker也使用Prophet来建模,下面用一个简单的方法来创建模型。

model, model_data = microsoft.create_prophet_model()

上图用一条曲线,将原有图像平滑了,这就是一个新的模型。Prophet能够计算不确定性,这是建模的一个重要部分。对于波动性比较大的真实数据,是无法进行预测的。要通过以往的数据,创建模型,预测未来,就不得不将数据平滑化。注意,上面使用的方法返回了两个对象,一个模型和一些数据,然后可以绘制绘制时间序列中的某些部分。

model.plot_components(model_data)
plt.show()

通过图示中的trend,可以看到过去三年里的总体趋势是的增长。在yearly的年度图示中,9月和10月两月触底,11月和1月达到峰值。随着时间尺度的减小,数据的噪声也越来越大。在一个典型的月中,有价值的信号多于噪音。如果要查看以周为单位模型,可以通过更改Stocker的weekly seasonalit参数,将它添加到Prophet模型中。

print(microsoft.weekly_seasonality)
microsoft.weekly_seasonality = True
print(microsoft.weekly_seasonality)

# 输出
False
True

weekly_seasonality的默认值是False,如果要在模型中包含每周的分析,就要将其修改为True。再次调用create_prophet_model,就可以得到下图所示效果。

拐点

对于时间序列的数据而言,拐点是我们关注的重点。在Stocker模块中,有非常简单地查看观点的方法。

microsoft.changepoint_date_analysis()

# 输出
Changepoints sorted by slope rate of change (2nd derivative):

          Date  Adj. Close     delta
410 2016-09-08   55.811396 -1.378093
338 2016-05-26   50.113453  1.116720
217 2015-12-02   52.572008 -0.882359
458 2016-11-15   57.589819  0.603127
48  2015-04-02   37.612590  0.442776

股价的拐点往往和某些时间关联起来,通过上面的操作,找到了拐点出现的日期,可以用搜索引擎搜一下,那一天有什么大事件。Prophet尚未能挑出所有拐点,目前只在前80%的数据中显示了拐点,但是已经足够了。

Stoker提供了一些搜索比较的功能,比如,比较微软的利润搜搜量和股价关系。

microsoft.changepoint_date_analysis(search = 'Microsoft profit')

# 输出
Top Related Queries: 

                  query  value
0  microsoft non profit    100
1      microsoft office     60
2          apple profit     40
3         microsoft 365     40
4                 apple     35

 Rising Related Queries: 

           query  value
0    apple stock    170
1  microsoft 365    130
2   apple profit     50

即使找到了相关性,但也不要认为这是因果关系。我们不知道利润或者某些时间导致了股价变化,还是反之。

下面再看看微软Office的搜索量会不会与股价相关?

microsoft.changepoint_date_analysis(search = 'Microsoft Office')

# 输出
Top Related Queries: 

                       query  value
0  microsoft office download    100
1      microsoft office 2010     90
2                office 2010     85
3      microsoft office 2013     75
4                office 2013     70

 Rising Related Queries: 

                            query  value
0       microsoft office 2016 key  80300
1                     office 2016  73200
2  download microsoft office 2016  72150
3       microsoft office 2016 mac  69350
4           microsoft office 2016  67650

这张图显示,微软股价上升的同时,Office的搜搜量下降。是不是因为这个原因股价上涨了呢?哈哈。告诉微软吧。

预测

分析股票数据,最终的目的是期望能找到一个规律,从而预测未来股票价格趋势——虽然不一定准。

model, future = microsoft.create_prophet_model(days=180)

# 输出

Predicted Price on 2018-07-21 = $102.40

Stoker是一个非常简单好用的工具,是一个开源工具。以上做个简要介绍,希望能够对读者有用。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老齐教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开始
  • 创建模型
  • 拐点
  • 预测
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档