股票历史数据时是非常重要的一种时间序列数据,它在数据科学中占据重要的作用。那么现在开始学习时间数据序列的处理,为以后的股票预测分析做准备。当然数据分析离不开数据的,因此本文首要的问题是如何获取股票数据用于机器学习分析? 自从雅虎公布了股票数据的api后,获取股票数据显得非常简单高效,本文作者已经找到了一个非常方便的获取股票数据的python包yfinance.为了方便以后的说明,本文以微软公司的股票数据为例,股票名称为MSFT,下面进行说明,步骤如下:

  • 安装yfinance包
  • yfianance的基本使用教程

    • 1. 安装yfinance包

      包直接使用pip安装即可,当然yfinance使用了在数据分析中广泛应用的包,pandas,numpy,为了从雅虎api获取数据,requests也必不可少,那么直接使用下面的代码一键安装所需的包吧。

      #!env bash
      pip install numpy
      pip install pandas
      pip install requests
      pip install yfinance
      
      

如果已经是conda环境的话,也可以使用下面的代码安装

#! env bash
conda install -c ranaroussi yfinance

安装好后使用import确认是否成功

import  yfinance

不报错就说明安装成功了

2. yfianance的基本使用教程

为了理解yfianance的数据构成,大家可以去yfianance官方github查看代码,本文为了更好的理解,把代码分析注释简化为分成几个部分

  • Ticker() 模块
  • 单个公司股票数据下载
  • 多公司股票数据下载

2.1 Ticker() 模块

该部分为股票的meta数据,包含股票基本信息,股东啊等等,直接在下面的代码中看注释信息好了。

# 获取股票基本信息,包括地址,电话领域等等信息
msft.info
# 股票股价的历史信息,以一天间隔为例
hist = msft.history(interval="1d",period="max")
hist
"""
	Open	High	Low	Close	Volume	Dividends	Stock Splits
Date							
1986-03-13	0.06	0.07	0.06	0.06	1031788800	0.0	0.0
1986-03-14	0.06	0.07	0.06	0.06	308160000	0.0	0.0
1986-03-17	0.06	0.07	0.06	0.07	133171200	0.0	0.0
1986-03-18	0.07	0.07	0.06	0.06	67766400	0.0	0.0
1986-03-19	0.06	0.06	0.06	0.06	47894400	0.0	0.0
...	...	...	...	...	...	...	...
2020-05-04	174.49	179.00	173.80	178.84	30372900	0.0	0.0
2020-05-05	180.62	183.65	179.90	180.76	36839200	0.0	0.0
2020-05-06	182.08	184.20	181.63	182.54	32139300	0.0	0.0
2020-05-07	184.17	184.55	182.58	183.60	28316000	0.0	0.0
2020-05-08	184.98	185.00	183.36	184.68	30877800	0.0	0.0
"""
##可以看到获取到的股票信息都是最新的
# 股票分红,拆分等信息
msft.actions
"""
	Dividends	Stock Splits
Date		
1987-09-21	0.00	2.0
1990-04-16	0.00	2.0
1991-06-27	0.00	1.5
1992-06-15	0.00	1.5
1994-05-23	0.00	2.0
...	...	...
2019-02-20	0.46	0.0
2019-05-15	0.46	0.0
2019-08-14	0.46	0.0
2019-11-20	0.51	0.0
2020-02-19	0.51	0.0
"""
# 只看分红信息
msft.dividends
"""
Date
2003-02-19    0.08
2003-10-15    0.16
2004-08-23    0.08
2004-11-15    3.08
2005-02-15    0.08
              ... 
2019-02-20    0.46
2019-05-15    0.46
2019-08-14    0.46
2019-11-20    0.51
2020-02-19    0.51
"""
# 不同股东占比
msft.major_holders
"""

0	1
0	1.42%	% of Shares Held by All Insider
1	74.09%	% of Shares Held by Institutions
2	75.16%	% of Float Held by Institutions
3	4630	Number of Institutions Holding Shares
"""
# 机构占比
msft.institutional_holders
"""
Holder	Shares	Date Reported	% Out	Value
0	Vanguard Group, Inc. (The)	623667281	2019-12-30	0.0822	98352330213
1	Blackrock Inc.	517578906	2020-03-30	0.0683	81627369265
2	State Street Corporation	315672520	2019-12-30	0.0416	49781556404
3	FMR, LLC	239124143	2019-12-30	0.0315	37709877351
4	Capital World Investors	180557630	2019-12-30	0.0238	28473938251
5	Price (T.Rowe) Associates Inc	175036277	2019-12-30	0.0231	27603220882
6	Geode Capital Management, LLC	113401519	2019-12-30	0.0150	17883419546
7	Capital International Investors	99996798	2019-12-30	0.0132	15769495044
8	Northern Trust Corporation	93192050	2019-12-30	0.0123	14696386285
9	Capital Research Global Investors	92776236	2019-12-30	0.0122	14630812417
"""
# 基本上重要信息就这些了
# 其他的好像都不重要

2.2 单个公司股票数据下载

了解了股票基本信息构成后,接下来就是具体操作单个股票获得用于分析的dataframe了。

#! env python
#就是股票信息就好了呗,下面代码下载2000年以来的微软股票信息

import yfinance as yf
msft  = yf.download("MSFT", start="2000-01-01")
"""
[*********************100%***********************]  1 of 1 completed
msft
	Open	High	Low	Close	Adj Close	Volume
Date						
1999-12-31	58.750000	58.875000	58.125000	58.375000	37.453701	12517600
2000-01-03	58.687500	59.312500	56.000000	58.281250	37.393559	53228400
2000-01-04	56.781250	58.562500	56.125000	56.312500	36.130390	54119000
2000-01-05	55.562500	58.187500	54.687500	56.906250	36.511333	64059600
2000-01-06	56.093750	56.937500	54.187500	55.000000	35.288280	54976600
...	...	...	...	...	...	...
2020-05-04	174.490005	179.000000	173.800003	178.839996	178.839996	30372900
2020-05-05	180.619995	183.649994	179.899994	180.759995	180.759995	36839200
2020-05-06	182.080002	184.199997	181.630005	182.539993	182.539993	32139300
2020-05-07	184.169998	184.550003	182.580002	183.600006	183.600006	28316000
2020-05-08	184.979996	185.000000	183.360001	184.679993	184.679993	30877800
"""

2.3 多公司股票数据下载

同时包也允许同时下载多种股票的信息下载,这里使用苹果公司,直接上代码:

data = yf.download(tickers = "MSFT AAPL",start="2019-01-01",group_by = 'ticker')
data
"""
	MSFT	AAPL
Open	High	Low	Close	Adj Close	Volume	Open	High	Low	Close	Adj Close	Volume
Date												
2018-12-31	101.290001	102.400002	100.440002	101.570000	99.817421	33173800	158.529999	159.360001	156.479996	157.740005	154.618546	35003500
2019-01-02	99.550003	101.750000	98.940002	101.120003	99.375191	35329300	154.889999	158.850006	154.229996	157.919998	154.794983	37039700
2019-01-03	100.099998	100.190002	97.199997	97.400002	95.719376	42579100	143.979996	145.720001	142.000000	142.190002	139.376251	91312200
2019-01-04	99.720001	102.510002	98.930000	101.930000	100.171211	44060600	144.529999	148.550003	143.800003	148.259995	145.326126	58607100
2019-01-07	101.639999	103.269997	100.980003	102.059998	100.298965	35656100	148.699997	148.830002	145.899994	147.929993	145.002686	54777800
...	...	...	...	...	...	...	...	...	...	...	...	...
2020-05-04	174.490005	179.000000	173.800003	178.839996	178.839996	30372900	289.170013	293.690002	286.320007	293.160004	292.368561	33392000
2020-05-05	180.619995	183.649994	179.899994	180.759995	180.759995	36839200	295.059998	301.000000	294.459991	297.559998	296.756683	36937800
2020-05-06	182.080002	184.199997	181.630005	182.539993	182.539993	32139300	300.459991	303.239990	298.869995	300.630005	299.818390	35583400
2020-05-07	184.169998	184.550003	182.580002	183.600006	183.600006	28316000	303.220001	305.170013	301.970001	303.739990	302.919983	28803800
2020-05-08	184.979996	185.000000	183.360001	184.679993	184.679993	30877800	305.640015	310.350006	304.290009	310.130005	310.130005	33459600
"""

总结

本文介绍了使用yfinance包进行股票数据的信息获取,为后面进行估价预测进行一个预热。该模块是通过雅虎api进行数据获取,因此在国内可能访问速度过慢,建议在国外服务器上运行或者挂代理。