pandas-datareader
pandas-datareader介绍
Pandas库提供了专门从财经网站获取金融数据的API接口,可作为量化交易股票数据获取的另一种途径,该接口在urllib3库基础上实现了以客户端身份访问网站的股票数据。需要注意的是目前模块已经迁徙到pandas-datareader包中,因此导入模块时需要由import pandas.io.data as web更改为import pandas_datareader.data as web。
相关参考网站
官网
github
0.6.0版本操作文档
DataReader方法介绍
查看Pandas的操作文档可以发现,第一个参数为股票代码,苹果公司的代码为"AAPL",国内股市采用的输入方式“股票代码”+“对应股市”,上证股票在股票代码后面加上“.SS”,深圳股票在股票代码后面加上“.SZ”。DataReader可从多个金融网站获取到股票数据,如“Yahoo! Finance” 、“Google Finance”等,这里以Yahoo为例。第三、四个参数为股票数据的起始时间断。返回的数据格式为DataFrame。
start = datetime.datetime(2017,1,1)#获取数据的时间段-起始时间
end = datetime.date.today()#获取数据的时间段-结束时间
stock = web.DataReader("600797.SS", "yahoo", start, end)#获取浙大网新2017年1月1日至今的股票数据
数据分析
1、打印DataFrame数据前5行和尾部倒数5行(浙大网新因重大事件停牌至1月6日开始复牌)
print stock.head(5)
print stock.tail(5)
2、打印DataFrame数据索引和列名,索引为时间序列,列信息为开盘价、最高价、最低价、收盘价、复权收盘价、成交量
print stock.index
print stock.columns
3、打印DataFrame数据形状,index长度为248,columns数为6,即248个交易日,6项股票数据
print stock.shape
4、打印DataFrame数据查看数据是否有缺失,以及每列数据的类型
print stock.info()
5、打印DataFrame数据每组的统计情况,如最小值、最大值、均值、标准差等
print stock.describe()
6、DataFrame数据中增加涨/跌幅列,涨/跌=(当日Close-上一日Close)/上一日Close*100%
(1)添加一列change,存储当日股票价格与前一日收盘价格相比的涨跌数值,即当日Close价格与上一日Close的差值,1月3日这天无上一日数据,因此出现缺失
change = stock.Close.diff()
stock['Change'] = change
print stock.head(5)
(2)对缺失的数据用涨跌值的均值就地替代NaN。
change.fillna(change.mean(),inplace=True)
(3)计算涨跌幅度有两种方法,pct_change()算法的思想即是第二项开始向前做减法后再除以第一项,计算得到涨跌幅序列。
stock['pct_change'] = (stock['Change'] /stock['Close'].shift(1))#
stock['pct_change1'] = stock.Close.pct_change()
7、DataFrame数据中增加跳空缺口数值序列,这里定义的缺口为上涨趋势和下跌趋势中的突破缺口,上涨趋势中今天的最低价高于昨天收盘价为向上跳空,下跌趋势中昨天收盘价高于今天最高价为向下跳空。遍历每个交易日后将符合跳空缺口条件的交易日增加缺口数值。
jump_pd = pd.DataFrame()
for kl_index in np.arange(1, stock.shape[0]):
today = stock.ix[kl_index]
yesday = stock.ix[kl_index-1]
today['preCloae'] = yesday.Close if today['pct_change'] > 0 and (today.Low-today['preCloae']) > 0:today['jump_power'] = (today.Low-today['preCloae'])elif today['pct_change'] < 0 and (today.High-today['preCloae']) < 0:today['jump_power'] = (today.High-today['preCloae'])jump_pd = jump_pd.append(today) stock['jump_power'] = jump_pd['jump_power']print stock.loc["2017-04-26":"2017-06-15"]#默认打印全部列
8、DataFrame数据保留两位小数显示
format = lambda x: '%.2f' % x
stock = stock.applymap(format)
print stock.loc["2017-04-26":"2017-06-15"]#默认打印全部列
股价数据的可视化
Matplotlib是使用Python进行绘图里非常方便的库。这次 plot使用的数据是 Adj Close栏的数据。这是所说的已调整收盘价。
如下仅仅需要两行写就可以简单的将股价作为时间序列数据画出来。
alibaba['Adj Close'].plot(legend=True, figsize=(10,4))
plt.show()
完整示例
import pandas as pd
from pandas import Series, DataFrame
import numpy as np
import matplotlib.pyplot as plt
from pandas_datareader import data, wb
from datetime import datetime
end = datetime.now()
start = datetime(end.year - 1, end.month, end.day)
alibaba = data.DataReader('BABA', 'yahoo', start, end)
alibaba['Adj Close'].plot(legend=True, figsize=(10,4))
plt.show()
更多图表操作可参考:
实例操作:Python提取雅虎财经数据,并做数据分析和可视化
以csv格式存放
import numpy as np
import pandas as pd
import pandas_datareader.data as web
import datetime
df_csvsave = web.DataReader("600018.SS","yahoo",datetime.datetime(2019,1,1),datetime.date.today())
print (df_csvsave)
df_csvsave.to_csv(r'C:\Users\15461\Desktop\table.csv',columns=df_csvsave.columns,index=True)
可能遇到的问题
在《利用Python进行数据分析》一书中,学习到pandas这一章节,利用书中的方法去获取雅虎数据会出现以下问题:
问题一The pandas.io.data module is moved to a separate package (pandas-datareader)
import pandas.io.data as web
Traceback (most recent call last):File "<pyshell#0>", line 1, in <module>import pandas.io.data as webFile "C:\Program Files (x86)\Python36-32\lib\site-packages\pandas\io\data.py", line 2, in <module>"The pandas.io.data module is moved to a separate package "
ImportError: The pandas.io.data module is moved to a separate package (pandas-datareader).After installing the pandas-datareader package (https://github.com/pydata/pandas-datareader),
you can change the import ``from pandas.io import data, wb`` to ``from pandas_datareader import data, wb``.
根据提示,我们很快可以知道,‘pandas.io’这个模块已经变成了‘pandas_datareader’了,cmd命令行中执行以下语句即可解决这个问题:
pip install pandas_datareader
用以下语句可以调用模块
import pandas_datareader.data as web
问题二Yahoo Actions has been immediately deprecated due to large breaks
web.get_data_yahoo('AAPL','1/1/2000','1/1/2010')
Traceback (most recent call last):File "<pyshell#2>", line 1, in <module>web.get_data_yahoo('AAPL','1/1/2000','1/1/2010')File "C:\Program Files (x86)\Python36-32\lib\site-packages\pandas_datareader\data.py", line 63, in get_data_yahooraise ImmediateDeprecationError(DEP_ERROR_MSG.format('Yahoo Actions'))
pandas_datareader.exceptions.ImmediateDeprecationError:
Yahoo Actions has been immediately deprecated due to large breaks in the API without the
introduction of a stable replacement. Pull Requests to re-enable these data connectors are welcome.
See https://github.com/pydata/pandas-datareader/issues
原因 yahoo的数据接口有改动导致不可用。
在网上搜了好久才找到这一方法,这里我们需要引入另外一个模块‘fix_yahoo_finance’,同样使用pip方法进行安装
pip install fix_yahoo_finance
调用方式如下:
import pandas_datareader.data as web
import datetime
import fix_yahoo_finance as yf
yf.pdr_override()
start=datetime.datetime(2006, 10, 1)
end=datetime.datetime(2012, 1, 1)
web.get_data_yahoo('AAPL',start,end)
这样子就可以下载雅虎数据了。
问题三-在键入1/1/2000和1/1/2010后报错
这里提示是时间的格式错误,应改为"%Y-%m-%d"
解决办法:for循环这里这样写
for ticker in ['AAPL','IBM','MSFT','GOOG']:...: all_data[ticker]=web.get_data_yahoo(ticker,'2000-1-1','2010-1-1')
pandas-datareader相关推荐
- 用python读取股票基本信息_python-使用pandas datareader获取股票信息
我正在使用pandas datareader提取给定日期范围内的库存信息.例如: import pandas_datareader.data as web import datetime as dt ...
- pandas plot label_Python+Pandas | 分析比特币与股票市场的关系
- 点击上方"中国统计网"订阅我吧!- 我们通过使用Python和Pandas技术进行分析,我们将能够在本文中回答该问题.首先,我们将使用免费的API检索过去几年的比特币和股票价格 ...
- EduCoder Pandas高效化运算与时间序列处理 第3关:Pandas时间序列的高级应用
文章目录 任务描述 相关知识 时间频率与偏移量 重新取样.迁移和窗口 重新取样 时间迁移 移动时间窗口 编程要求 测试说明 任务描述 根据相关知识完成下列任务: 求上个季度(仅含工作日)的平均值: 求 ...
- python股票交易模型_如何用Python建模GGM模型并对股票估值?
内容首发 乐学偶得(http://lexueoude.com) 公众号: 乐学Fintech 用代码理解分析解决金融问题 首先我们快速了解一下什么是GGM模型. GGM模型又叫做"戈登增长模 ...
- python提高文件读取速度_Python提高了HDF5文件的读取速度
我正在构建一个存储财务数据的数据库(特别是选项链) . 我每天检索每个交易日的数据,即5d /周或250d /年 . 我这样做了300个代码,数据库正在以150Mb /天的速度增长,到目前为止达到了9 ...
- python常用的量化金融库
下面是常用的量化金融常用的库,以及与量化金融有关的支持库,有些需要科学上网才能打开. 文章目录 python基本的数值库和数据结构 金融工具和定价 指标 交易和回溯测试 风险分析 因素分析 时间序列( ...
- 把backtrader改造成金融强化学习回测引擎
原创文章第119篇,专注"个人成长与财富自由.世界运作的逻辑, AI量化投资". 继续强化学习应用于金融投资. 我们的AI量化平台,针对传统规则量化策略,进行了"积木式& ...
- 使用 Python 对股票数据分析预测
使用 Python 对股票数据分析预测 文章目录 使用 Python 对股票数据分析预测 目录索引 模块安装 股票数据获取 雅虎财经 Quandl 模块 Pandas Datareader 模块 数据 ...
- 打造一个投资组合管理的金融强化学习环境
原创文章第120篇,专注"个人成长与财富自由.世界运作的逻辑, AI量化投资". 今天继续金融强化学习环境. 网上的金融学习环境不少,但都太过于"业余",或者离 ...
- 用python做股票智能投顾模型_如何用Python建模GGM模型并对股票估值?
内容首发 乐学偶得(http://lexueoude.com) 公众号: 乐学Fintech 用代码理解分析解决金融问题 首先我们快速了解一下什么是GGM模型. GGM模型又叫做"戈登增长模 ...
最新文章
- PIL图像处理:旋转图像
- Linux文件系统与日志
- 模式(一)javascript设计模式
- 《Python Cookbook 3rd》笔记(4.5):反向迭代
- dos, echo写文件不追加回车的方法
- python是什么东西
- 极客学院腾讯 TAPD·极客开放日 [敏捷开发畅想与实战]
- python课程价格-python辅导价格是多少?主要流程是什么?
- jQuery 学习-DOM篇(六):jQuery 替换 DOM 元素
- java 常量 类型_Java的常量及数据类型
- MD5 + salt 的加密算法
- win7文件夹加密软件_神盾文件夹加密软件免费下载_电脑文件夹加密软件下载【文件管理】...
- photoshop 插件_Photoshop的柔光
- 对计算机网络的基础认识
- 印度互联网创业大热:会出现“下一个苹果”?
- 好用≠滥用,人脸识别的公共应用边界在哪里?
- 【第一个Vue上手小项目Day4】史上最简单的Element-table表格+Pagination 分页(前后端结合)
- 使用echarts画日历热力图
- 3种Flink State Backed| 你该用哪个?
- 年后第一场面试,被阿里P8测试专家虐惨了....
热门文章
- 2018年3月29日笔记
- Android UI学习 - Linear Layout, RelativeLayout
- 努力学习 HTML5 (2)—— 元素的增和删
- JDBC+Servlet+JSP整合开发之30-JDBC、Servlet、JSP的MVC
- Linux磁盘扇区和内存页,技术|检查linux中硬盘损坏的扇区和区块
- 为什么傅里叶变换可以代替自注意力机制
- 智能交通系统无人机派罚单,人脸成为下一个人牌号,人工智能下谁敢犯规
- 图像转文字(分类识别等),文字转图片,实际需要的过程
- AutoMl 的pytorch类似代码
- matplotlib显示中文钥匙