首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python 获取股票数据 tushare使用

python 获取股票数据 tushare使用

作者头像
多凡
发布于 2019-11-01 01:19:59
发布于 2019-11-01 01:19:59
2.1K00
代码可运行
举报
文章被收录于专栏:sringbootsringboot
运行总次数:0
代码可运行

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_44580977/article/details/101997962

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'''
# 本节 讲解 pandas_datareader和tushare包 common 和pro 获取股票数据

import pandas_datareader.data as web
import datetime
#获取上证指数的2017.1.1日至今的交易数据
df_stockload = web.DataReader("000001.SS", "yahoo", datetime.datetime(2017,1,1), datetime.date.today())

print(df_stockload.head())  # 查看前几行
"""
              High     Low    Open   Close  Volume  Adj Close
Date                                                         
2017-01-03  3136.5  3105.3  3105.3  3135.9  141600     3135.9
2017-01-04  3160.1  3130.1  3133.8  3158.8  167900     3158.8
2017-01-05  3168.5  3154.3  3157.9  3165.4  174700     3165.4
2017-01-06  3172.0  3153.0  3163.8  3154.3  183700     3154.3
2017-01-09  3173.1  3147.7  3148.5  3171.2  171700     3171.2
"""
print(df_stockload.tail())  # 查看末尾几行
"""
              High     Low    Open   Close  Volume  Adj Close
Date                                                         
2019-03-04  3090.8  3006.9  3015.9  3027.6  525600     3027.6
2019-03-05  3055.0  3009.4  3019.9  3054.2  424100     3054.2
2019-03-06  3103.8  3050.1  3060.4  3102.1  555000     3102.1
2019-03-07  3129.9  3075.0  3103.7  3106.4  583800     3106.4
2019-03-08  3075.0  2969.6  3038.3  2969.9  577900     2969.9
"""

print (df_stockload.columns)#查看列索引信息
"""
Index(['High', 'Low', 'Open', 'Close', 'Volume', 'Adj Close'], dtype='object')
"""
print (df_stockload.index)#查看行索引信息
"""
DatetimeIndex(['2017-01-03', '2017-01-04', '2017-01-05', '2017-01-06',
               '2017-01-09', '2017-01-10', '2017-01-11', '2017-01-12',
               '2017-01-13', '2017-01-16',
               ...
               '2019-02-25', '2019-02-26', '2019-02-27', '2019-02-28',
               '2019-03-01', '2019-03-04', '2019-03-05', '2019-03-06',
               '2019-03-07', '2019-03-08'],
              dtype='datetime64[ns]', name='Date', length=530, freq=None)
"""
print(df_stockload.shape)#查看形状
"""
(530, 6)
"""
# 接下来查看各列交易数据描述性的统计信息,如最小值、最大值、均值、标准差等
print (df_stockload.describe())#查看各列数据描述性统计
"""
         High     Low    Open   Close    Volume  Adj Close
count   530.0   530.0   530.0   530.0     530.0      530.0
mean   3079.9  3044.5  3061.5  3064.8  172601.3     3064.8
std     281.0   286.0   283.5   284.1   62788.0      284.1
min    2488.5  2440.9  2446.0  2464.4   88200.0     2464.4
25%    2802.3  2754.8  2776.8  2786.1  134200.0     2786.1
50%    3164.6  3134.3  3148.2  3153.9  159200.0     3153.9
75%    3290.1  3261.5  3274.5  3275.9  193600.0     3275.9
max    3587.0  3534.2  3563.6  3559.5  583800.0     3559.5
"""

# 接下来查看交易数据概览信息,如每列数据的类型、个数、是否存在缺失等等
print(df_stockload.info())#查看缺失及每列数据类型
"""
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 530 entries, 2017-01-03 to 2019-03-08
Data columns (total 6 columns):
High         530 non-null float64
Low          530 non-null float64
Open         530 non-null float64
Close        530 non-null float64
Volume       530 non-null int64
Adj Close    530 non-null float64
dtypes: float64(5), int64(1)
memory usage: 29.0 KB
None
"""
import matplotlib.pyplot as plt

#绘制收盘价
df_stockload.Close.plot(c='b')
plt.legend(['Close','30ave','60ave'],loc='best')
plt.show()

'''


'''
# get_hist_data api讲解

import datetime

import pandas as pd
import tushare as ts
df_sh=ts.get_hist_data('sh',start='2017-01-01',end=datetime.datetime.now().strftime('%Y-%m-%d'))
print(df_sh.info())#查看交易数据概览信息

"""
<class 'pandas.core.frame.DataFrame'>
Index: 530 entries, 2019-03-08 to 2017-01-03
Data columns (total 13 columns):
open            530 non-null float64
high            530 non-null float64
close           530 non-null float64
low             530 non-null float64
volume          530 non-null float64
price_change    530 non-null float64
p_change        530 non-null float64
ma5             530 non-null float64
ma10            530 non-null float64
ma20            530 non-null float64
v_ma5           530 non-null float64
v_ma10          530 non-null float64
v_ma20          530 non-null float64
dtypes: float64(13)
memory usage: 58.0+ KB
None
"""

print(df_sh.axes)# 查看行和列的轴标签

"""
[Index(['2019-03-08', '2019-03-07', '2019-03-06', '2019-03-05', '2019-03-04',
       '2019-03-01', '2019-02-28', '2019-02-27', '2019-02-26', '2019-02-25',
       ...
       '2017-01-16', '2017-01-13', '2017-01-12', '2017-01-11', '2017-01-10',
       '2017-01-09', '2017-01-06', '2017-01-05', '2017-01-04', '2017-01-03'],
      dtype='object', name='date', length=530), Index(['open', 'high', 'close', 'low', 'volume', 'price_change', 'p_change',
       'ma5', 'ma10', 'ma20', 'v_ma5', 'v_ma10', 'v_ma20'],
      dtype='object')]
"""

# 将行字符类型索引转换成 datetime 类型
df_sh.index = pd.to_datetime(df_sh.index)
df_sh.sort_index(inplace=True)
print(df_sh.axes)# 查看行和列的轴标签

"""
[DatetimeIndex(['2017-01-03', '2017-01-04', '2017-01-05', '2017-01-06',
               '2017-01-09', '2017-01-10', '2017-01-11', '2017-01-12',
               '2017-01-13', '2017-01-16',
               ...
               '2019-02-25', '2019-02-26', '2019-02-27', '2019-02-28',
               '2019-03-01', '2019-03-04', '2019-03-05', '2019-03-06',
               '2019-03-07', '2019-03-08'],
              dtype='datetime64[ns]', name='date', length=530, freq=None), Index(['open', 'high', 'close', 'low', 'volume', 'price_change', 'p_change',
       'ma5', 'ma10', 'ma20', 'v_ma5', 'v_ma10', 'v_ma20'],
      dtype='object')]
"""

# 以上可知get_hist_data()接口的优点是除返回基本的开盘价(open)、最高价(high)、收盘价(close)等数据外,还包括涨跌幅、均价等指标数据,但是它的缺点是不能获取股票自上市以来的所有日线数据。
# 于是另一个get_k_data接口登场了,它获取数据的速度更快些,
# 可以返回每一只股票从上市开始到当前交易日的所有日线数据
'''


'''
# get_k_data api  讲解

import datetime
import pandas as pd
import tushare as ts

# get_hist_data 未返回2008年数据
df_sh = ts.get_hist_data('sh', start='2008-01-01', end=datetime.datetime.now().strftime('%Y-%m-%d'))
print(df_sh.head())
"""
              open    high   close   ...       v_ma5   v_ma10   v_ma20
date                                 ...                              
2019-03-08  3038.3  3075.1  2969.9   ...     5.3e+06  4.9e+06  3.7e+06
2019-03-07  3103.7  3129.9  3106.4   ...     4.9e+06  4.7e+06  3.4e+06
2019-03-06  3060.4  3103.8  3102.1   ...     4.4e+06  4.4e+06  3.2e+06
2019-03-05  3019.9  3055.0  3054.2   ...     4.2e+06  4.1e+06  3.0e+06
2019-03-04  3015.9  3090.8  3027.6   ...     4.5e+06  3.9e+06  2.9e+06

[5 rows x 13 columns]
"""
print(df_sh.tail())
"""
              open    high   close   ...       v_ma5   v_ma10   v_ma20
date                                 ...                              
2016-09-13  3025.0  3029.7  3023.5   ...     1.7e+06  1.7e+06  1.7e+06
2016-09-12  3037.5  3040.9  3022.0   ...     1.7e+06  1.7e+06  1.7e+06
2016-09-09  3095.4  3101.8  3078.8   ...     1.6e+06  1.6e+06  1.6e+06
2016-09-08  3089.9  3096.8  3095.9   ...     1.7e+06  1.7e+06  1.7e+06
2016-09-07  3091.3  3105.7  3091.9   ...     1.9e+06  1.9e+06  1.9e+06

[5 rows x 13 columns]
"""

# get_k_data 返回2008年数据
df_sh = ts.get_k_data('sh', start='2008-01-01', end=datetime.datetime.now().strftime('%Y-%m-%d'))
print(df_sh.head())
"""
         date    open   close  ...      low   volume  code
0  2008-01-02  5265.0  5272.8  ...   5201.9  7.7e+07    sh
1  2008-01-03  5269.8  5319.9  ...   5211.1  9.9e+07    sh
2  2008-01-04  5328.4  5361.6  ...   5318.5  8.1e+07    sh
3  2008-01-07  5357.4  5393.3  ...   5332.6  9.2e+07    sh
4  2008-01-08  5414.6  5386.5  ...   5344.6  1.0e+08    sh

[5 rows x 7 columns]
"""
print(df_sh.tail())
"""
            date    open   close  ...      low   volume  code
2715  2019-03-04  3015.9  3027.6  ...   3006.9  5.3e+08    sh
2716  2019-03-05  3019.9  3054.2  ...   3009.4  4.2e+08    sh
2717  2019-03-06  3060.4  3102.1  ...   3050.1  5.6e+08    sh
2718  2019-03-07  3103.7  3106.4  ...   3075.0  5.8e+08    sh
2719  2019-03-08  3038.3  2969.9  ...   2969.6  5.8e+08    sh

[5 rows x 7 columns]
"""

"""
差异化分析发现get_k_data()接口返回的交易数据,
索引为序号而非交易日期,
因此我们需要进行简单的处理使它与get_hist_data()接口返回的交易数据在格式上兼容,
此处使用to_datetime()方法将date列交易日期替换为行索引,
然后使用drop()方法将date列数据删除,
以避免交易日期重复显示,如下所示:
"""

# to_datetime 使得某列数据变成行索引
df_sh.index = pd.to_datetime(df_sh.date)
# 删除掉冗余的date列
df_sh.drop(axis=1, columns='date', inplace=True)
print(df_sh.head())

"""
              open   close    high     low   volume code
date                                                    
2008-01-02  5265.0  5272.8  5295.0  5201.9  7.7e+07   sh
2008-01-03  5269.8  5319.9  5321.5  5211.1  9.9e+07   sh
2008-01-04  5328.4  5361.6  5372.5  5318.5  8.1e+07   sh
2008-01-07  5357.4  5393.3  5403.4  5332.6  9.2e+07   sh
2008-01-08  5414.6  5386.5  5480.1  5344.6  1.0e+08   sh
"""
import matplotlib.pyplot as plt

df_sh.close.plot(c='b')
plt.legend(['close'], loc='best')
plt.show()

'''

'''
# tushare pro 获取数据
# 注册账号要设置  token

import pandas as pd
import tushare as ts
"""
关于pro版本,使用前需要登陆官网注册账号以获取token,
注册地址:tushare.pro/register?re… 。
不过部分接口设置了权限,需要达到一定的积分才能使用,
比如获取指数每日行情index_daily()接口,用户需要累积200积分才有权限可以调取。

daily()接口用于获取常用的股票行情数据,该接口无权限要求,
下面以daily()接口为例展示下tushare pro获取数据的方法,如下所示:
"""

#设置token
token='your token'
pro = ts.pro_api(token)#初始化pro接口
#获取平安银行日行情数据
pa=pro.daily(ts_code='000001.SZ', start_date='20180101',
               end_date='20190101')

print(pa.head())
"""
     ts_code trade_date  open    ...     pct_chg       vol    amount
0  000001.SZ   20181228   9.3    ...         1.1  576604.0  541571.0
1  000001.SZ   20181227   9.4    ...        -0.2  624593.3  586343.8
2  000001.SZ   20181226   9.3    ...        -0.4  421140.6  393215.1
3  000001.SZ   20181225   9.3    ...        -0.8  586615.4  545235.6
4  000001.SZ   20181224   9.4    ...        -0.3  509117.7  477186.9
"""

""""
对比可知,daily()接口的主要输入参数与旧版get_k_data()和get_hist_data()接口大体相同,
包括股票代码、开始日期、结束日期。daily()接口返回的数据格式与get_k_data()接口大体相同,
我们可以使用上文处理get_k_data()接口的方法来调整daily()接口返回的数据格式。

对于将序号形式的索引转换为交易日期形式的索引,
此处介绍另一种方法。DatetimeIndex()也可以将字符类型转化成datetime64类型,
等同于to_datetime()的效果。set_index()将指定的列作为索引,
并且可以配置drop参数可删除该列,以避免重复。如下所示:
""""

pa.trade_date = pd.DatetimeIndex(pa.trade_date)
pa.set_index("trade_date", drop=True, inplace=True)
print(pa.axes)
"""
[DatetimeIndex(['2018-12-28', '2018-12-27', '2018-12-26', '2018-12-25',
               '2018-12-24', '2018-12-21', '2018-12-20', '2018-12-19',
               '2018-12-18', '2018-12-17',
               ...
               '2018-01-15', '2018-01-12', '2018-01-11', '2018-01-10',
               '2018-01-09', '2018-01-08', '2018-01-05', '2018-01-04',
               '2018-01-03', '2018-01-02'],
              dtype='datetime64[ns]', name='trade_date', length=243, freq=None), Index(['ts_code', 'open', 'high', 'low', 'close', 'pre_close', 'change',
       'pct_chg', 'vol', 'amount'],
      dtype='object')]
"""
print(pa.head())
"""
              ts_code  open  high    ...     pct_chg       vol    amount
trade_date                           ...                                
2018-12-28  000001.SZ   9.3   9.5    ...         1.1  576604.0  541571.0
2018-12-27  000001.SZ   9.4   9.5    ...        -0.2  624593.3  586343.8
2018-12-26  000001.SZ   9.3   9.4    ...        -0.4  421140.6  393215.1
2018-12-25  000001.SZ   9.3   9.4    ...        -0.8  586615.4  545235.6
2018-12-24  000001.SZ   9.4   9.4    ...        -0.3  509117.7  477186.9

[5 rows x 10 columns]
"""

'''
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/10/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python Panads获取股票数据及处理
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
多凡
2019/11/01
2.6K0
Pandas DateTime 超强总结
对于 Pandas 来说,可以处理众多的数据类型,其中最有趣和最重要的数据类型之一就是时间序列数据。时间序列数据无处不在,它在各个行业都有很多应用。患者健康指标、股票价格变化、天气记录、经济指标、服务器、网络、传感器和应用程序性能监控都是时间序列数据的应用方向
周萝卜
2022/05/22
6K0
Pandas DateTime 超强总结
AKShare-股票数据-申万三级行业成份
作者寄语 本次更新申万三级行业成份数据。 更新接口 "sw_index_third_cons" # 申万三级行业成份 申万三级行业成份 接口: sw_index_third_cons 目标地址:
数据科学实战
2022/01/12
1.3K0
AKShare-股票数据-申万三级行业成份
最简洁的Python时间序列可视化:数据科学分析价格趋势,预测价格,探索价格
时间序列数据在数据科学领域无处不在,在量化金融领域也十分常见,可以用于分析价格趋势,预测价格,探索价格行为等。
一墨编程学习
2019/07/18
6.4K1
最简洁的Python时间序列可视化:数据科学分析价格趋势,预测价格,探索价格
NumPy 超详细教程(2):数据类型
NumPy 支持比 Python 更多种类的数值类型,下表所列的数据类型都是 NumPy 内置的数据类型,为了区别于 Python 原生的数据类型,bool、int、float、complex、str 等类型名称末尾都加了 _。
丹枫无迹
2019/03/20
2.6K0
Python中的时间序列数据操作总结
时间序列数据是一种在一段时间内收集的数据类型,它通常用于金融、经济学和气象学等领域,经常通过分析来了解随着时间的推移的趋势和模式
deephub
2023/02/01
3.9K0
AkShare-股票数据-复权后数据
修改原有的基于新浪财经的A股历史行情数据接口,增加两个字段分别为:流动股本和换手率;同时增加直接输出前复权或者后复权的数据,方便用于回测。
数据科学实战
2020/05/07
2.1K0
AKShare-股票数据-北交所历史行情
作者寄语 本次更新股票历史行情的数据接口,增加对北交所行情的支持 更新接口 "stock_zh_a_hist" # 历史行情数据-东财 历史行情数据-东财 接口: stock_zh_a_hist
数据科学实战
2022/01/12
1.8K0
AKShare-股票数据-北交所历史行情
AkShare-股票数据-港股美股复权后数据
更新之前的港股和美股接口直接返回复权后的数据,方便策略回测使用,具体的使用方法参见文档。
数据科学实战
2020/05/07
1.9K0
AkShare-股票数据-创新高和新低的股票数量
更新创新高和新低的股票数量接口,统计创20/60/120日新高、创20/60/120日新低的个股的数量和占比(0%~100%),统计时剔除了停牌股。
数据科学实战
2020/07/23
8830
AkShare-股票数据-终止和暂停上市股票
作者寄语 新增终止和暂停上市股票数据接口 更新接口 "stock_info_sh_delist" # 上海证券交易所暂停和终止上市 "stock_info_sz_delist" # 深证证券交易所暂停和终止上市 终止(暂停)上市-深证 接口: stock_info_sz_delist 目标地址: 深证证券交易所 描述: 获取深证证券交易所终止(暂停)上市股票 限量: 单次获取深证证券交易所终止(暂停)上市股票 输入参数 名称 类型 必选 描述 indicator str Y indicator="终止上
数据科学实战
2020/07/23
7550
AKShare-股票数据-股票回购
目标地址: https://data.eastmoney.com/gphg/hglist.html
数据科学实战
2021/12/08
9660
AKShare-股票数据-股票回购
AKShare-股票数据-分析师详情
本次更新股票数据-分析师详情接口。本接口主要提供东方财富的分析师详情数据,可以通过调用 ak.stock_analyst_rank_em() 来获取分析师的 id 数据,后传入本接口中,从而获取到该分析师的 最新跟踪成分股,历史跟踪成分股,历史指数 数据。
数据科学实战
2023/03/09
6790
AKShare-股票数据-分析师详情
Python基于决策树算法预测黄金价格走势
数据说明 Date-日期 Close/Last-收盘价 Volume-成交量 Open-开盘价 High-最高价 Low-最低价
用户11172986
2024/06/20
2330
Python基于决策树算法预测黄金价格走势
AkShare-股票数据-分红配股
作者寄语 新增所有股票的分红历史数据和单个股票的分红配股历史和详情数据接口。 更新接口 "stock_history_dividend" # 历史分红 "stock_history_dividend
数据科学实战
2020/05/20
1.4K0
【数据分析可视化】 股票市场分析实战之数据获取
https://github.com/pydata/pandas-datareader
瑞新
2020/07/07
1K0
【数据分析可视化】 股票市场分析实战之数据获取
Python数据分析之Pandas(三)
: | -----: | ------: | -----: | --------: | | 0 | 1 | 1193 | 5 | 978300760 | | 1 | 1 | 661 | 3 | 978302109 | | 2 | 1 | 914 | 3 | 978301968 | | 3 | 1 | 3408 | 4 | 978300275 | | 4 | 1 | 2355 | 5 | 978824291 |
yuanshuai
2022/08/22
1.5K0
Python数据分析之Pandas(三)
python 实现Web版股票行情界面
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
多凡
2019/11/01
4.1K0
AkShare-股票数据-股票列表
作者寄语 新增返回 A 股所有股票代码和股票简称的接口,可以一次返回相应板块的股票列表。 更新接口 "stock_info_sz_name_code" # 深证证券交易所股票代码和简称 "stock_info_sh_name_code" # 上海证券交易所股票代码和简称 "stock_info_a_code_name" # A 股股票代码和简称 股票列表-A股 接口: stock_info_a_code_name 目标地址: 沪深交易所 描述: 获取沪深 A 股股票代码和简称数据 限量: 单次获取所有
数据科学实战
2020/07/23
4.3K0
python 实训总结Ⅱ
举了一个金融界,炒股,获取数据的爬虫 (今天没仔细听课,这数据爬过什么意思,咱不懂,咱也不敢问!)
Cell
2022/02/25
1.3K0
python 实训总结Ⅱ
相关推荐
python Panads获取股票数据及处理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档