600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 一个使用python和TUShare进行股票分析的例子

一个使用python和TUShare进行股票分析的例子

时间:2019-11-05 21:49:55

相关推荐

一个使用python和TUShare进行股票分析的例子

(.1)这篇文章写成的时间较早,使用的读取数据的接口有更新,具体内容请查看:https://tushare.pro/register?reg=365021。

(原内容:)

《利用Python进行数据分析(Python For Data Analysis中文版)》P286 中间有一个例子,使用标普500指数(SPX)和几支股票的收盘价,计算一个日收益率与SPX年度相关系数的DataFrame。

因为担心读取这些数据会存在障碍,其实我也没有真正去试,就萌生了用中国股市数据替代后再进行计算的想法。

在网上找了一些资料,发现使用TUShare读取股票数据较为方便,按https://tushare.pro/和/index.html上的步骤,安装了tushare。

下面介绍与这个例子相关的一些内容。

一、读取股票数据

import tushare as ts# 读取上证指数df = ts.get_hist_data('sh000001')print(df)# 另一种读法df = ts.get_k_data('sh')print(df)# 当然可以指定读取的时间段,如读取1月的数据# 注意日期的写法,如写成'-1-1'会得到不正确的结果df = ts.get_k_data('sh000001', '-01-01', '-01-31')print(df)

二、模仿书中的例子,构造close_px

import tushare as tsimport pandas as pdfrom pandas import DataFrame# 股票集 代码:名称ticks = {'sh601857': 'ZGSY', # 中国石油'sh601398': 'GSYH', # 工商银行'sh600519': 'GZMT', # 贵州茅台'sh000001': '上证'}close_px = DataFrame() # 先建立一个空对象for key, value in ticks.items():df = ts.get_k_data(key, '-01-01', '-12-31') # 逐个读出股票数据# 构造一个中间对象,只使用日期和收盘价# 注意在这里需要把字符串表示的日期转换成日期对象df1 = DataFrame({'date':pd.to_datetime(df['date']),value: df['close']})df1.set_index('date', inplace=True) # 把日期列设为索引close_px = close_px.join(df1, how='outer') # 把整理好的数据合并到close_px中print(close_px) # 构造后的成品,中间有一部分缺失数据,可以是因为还没上市吧

三、完整的代码

import tushare as tsimport pandas as pdfrom pandas import DataFrame# 股票集 代码:名称ticks = {'sh601857': 'ZGSY', # 中国石油'sh601398': 'GSYH', # 工商银行'sh600519': 'GZMT', # 贵州茅台'sh000001': '上证'}close_px = DataFrame() # 先建立一个空对象for key, value in ticks.items():df = ts.get_k_data(key, '-01-01', '-12-31') # 逐个读出股票数据# 构造一个中间对象,只使用日期和收盘价# 注意在这里需要把字符串表示的日期转换成日期对象df1 = DataFrame({'date':pd.to_datetime(df['date']),value: df['close']})df1.set_index('date', inplace=True) # 把日期列设为索引close_px = close_px.join(df1, how='outer') # 把整理好的数据合并到close_px中print(close_px) # 构造后的成品,中间有一部分缺失数据,可以是因为还没上市吧# 以下的代码是照书上抄的,当然根据股票名称做了相应的改动rets = close_px.pct_change().dropna()spx_corr = lambda x: x.corrwith(x['上证'])by_year = rets.groupby(lambda x: x.year)print("\n各支股票与上证指数的相关系数")print(by_year.apply(spx_corr))print("\n中国石油 与 贵州茅台 的相关系数:")print(by_year.apply(lambda g: g['ZGSY'].corr(g['GZMT'])))# 输出的内容与书上稍有区别,可能是中石油上市时间较晚的原因吧

运行结果:

==== RESTART: example03.py ====ZGSY GSYHGZMT 上证date -01-02 NaN NaN 4.319 1320.63-01-03 NaN NaN 4.312 1319.87-01-06 NaN NaN 4.343 1334.68-01-07 NaN NaN 4.303 1332.06-01-08 NaN NaN 4.420 1372.07... ... .........-12-26 8.235 2.881 138.340 2190.11-12-27 8.210 2.881 135.410 2166.21-12-28 8.286 2.895 136.269 2170.01-12-29 8.303 2.902 137.688 2173.56-12-30 8.261 2.930 138.468 2199.42[2185 rows x 4 columns]各支股票与上证指数的相关系数ZGSYGSYHGZMT 上证 0.800647 0.789706 0.434432 1.0 0.855625 0.839435 0.639594 1.0 0.843779 0.808002 0.530355 1.0 0.777748 0.608758 0.351867 1.0 0.700398 0.613596 0.415294 1.0中国石油 与 贵州茅台 的相关系数: 0.355767 0.488143 0.385639 0.138757 0.258366dtype: float64

初学乍到,欢迎指正。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。