一个使用python和TUShare进行股票分析的例子
(2021.1)這篇文章寫(xiě)成的時(shí)間較早,使用的讀取數(shù)據(jù)的接口有更新,具體內(nèi)容請(qǐng)查看:https://tushare.pro/register?reg=365021。
?
?
(原內(nèi)容:)
《利用Python進(jìn)行數(shù)據(jù)分析(Python For Data Analysis中文版)》P286 中間有一個(gè)例子,使用標(biāo)普500指數(shù)(SPX)和幾支股票的收盤(pán)價(jià),計(jì)算一個(gè)日收益率與SPX年度相關(guān)系數(shù)的DataFrame。
因?yàn)閾?dān)心讀取這些數(shù)據(jù)會(huì)存在障礙,其實(shí)我也沒(méi)有真正去試,就萌生了用中國(guó)股市數(shù)據(jù)替代后再進(jìn)行計(jì)算的想法。
在網(wǎng)上找了一些資料,發(fā)現(xiàn)使用TUShare讀取股票數(shù)據(jù)較為方便,按https://tushare.pro/和http://tushare.org/index.html上的步驟,安裝了tushare。
下面介紹與這個(gè)例子相關(guān)的一些內(nèi)容。
一、讀取股票數(shù)據(jù)
import tushare as ts# 讀取上證指數(shù) df = ts.get_hist_data('sh000001') print(df)# 另一種讀法 df = ts.get_k_data('sh') print(df)# 當(dāng)然可以指定讀取的時(shí)間段,如讀取2019年1月的數(shù)據(jù) # 注意日期的寫(xiě)法,如寫(xiě)成'2019-1-1'會(huì)得到不正確的結(jié)果 df = ts.get_k_data('sh000001', '2019-01-01', '2019-01-31') print(df)二、模仿書(shū)中的例子,構(gòu)造close_px
import tushare as ts import pandas as pd from pandas import DataFrame# 股票集 代碼:名稱 ticks = {'sh601857': 'ZGSY', # 中國(guó)石油'sh601398': 'GSYH', # 工商銀行'sh600519': 'GZMT', # 貴州茅臺(tái)'sh000001': '上證'}close_px = DataFrame() # 先建立一個(gè)空對(duì)象for key, value in ticks.items():df = ts.get_k_data(key, '2003-01-01', '2011-12-31') # 逐個(gè)讀出股票數(shù)據(jù)# 構(gòu)造一個(gè)中間對(duì)象,只使用日期和收盤(pán)價(jià)# 注意在這里需要把字符串表示的日期轉(zhuǎn)換成日期對(duì)象df1 = DataFrame({'date':pd.to_datetime(df['date']),value: df['close']})df1.set_index('date', inplace=True) # 把日期列設(shè)為索引close_px = close_px.join(df1, how='outer') # 把整理好的數(shù)據(jù)合并到close_px中print(close_px) # 構(gòu)造后的成品,中間有一部分缺失數(shù)據(jù),可以是因?yàn)?003年還沒(méi)上市吧三、完整的代碼
import tushare as ts import pandas as pd from pandas import DataFrame# 股票集 代碼:名稱 ticks = {'sh601857': 'ZGSY', # 中國(guó)石油'sh601398': 'GSYH', # 工商銀行'sh600519': 'GZMT', # 貴州茅臺(tái)'sh000001': '上證'}close_px = DataFrame() # 先建立一個(gè)空對(duì)象for key, value in ticks.items():df = ts.get_k_data(key, '2003-01-01', '2011-12-31') # 逐個(gè)讀出股票數(shù)據(jù)# 構(gòu)造一個(gè)中間對(duì)象,只使用日期和收盤(pán)價(jià)# 注意在這里需要把字符串表示的日期轉(zhuǎn)換成日期對(duì)象df1 = DataFrame({'date':pd.to_datetime(df['date']),value: df['close']})df1.set_index('date', inplace=True) # 把日期列設(shè)為索引close_px = close_px.join(df1, how='outer') # 把整理好的數(shù)據(jù)合并到close_px中print(close_px) # 構(gòu)造后的成品,中間有一部分缺失數(shù)據(jù),可以是因?yàn)?003年還沒(méi)上市吧# 以下的代碼是照書(shū)上抄的,當(dāng)然根據(jù)股票名稱做了相應(yīng)的改動(dòng) rets = close_px.pct_change().dropna() spx_corr = lambda x: x.corrwith(x['上證']) by_year = rets.groupby(lambda x: x.year)print("\n各支股票與上證指數(shù)的相關(guān)系數(shù)") print(by_year.apply(spx_corr))print("\n中國(guó)石油 與 貴州茅臺(tái) 的相關(guān)系數(shù):") print(by_year.apply(lambda g: g['ZGSY'].corr(g['GZMT'])))# 輸出的內(nèi)容與書(shū)上稍有區(qū)別,可能是中石油上市時(shí)間較晚的原因吧運(yùn)行結(jié)果:
==== RESTART: example03.py ====ZGSY GSYH GZMT 上證 date 2003-01-02 NaN NaN 4.319 1320.63 2003-01-03 NaN NaN 4.312 1319.87 2003-01-06 NaN NaN 4.343 1334.68 2003-01-07 NaN NaN 4.303 1332.06 2003-01-08 NaN NaN 4.420 1372.07 ... ... ... ... ... 2011-12-26 8.235 2.881 138.340 2190.11 2011-12-27 8.210 2.881 135.410 2166.21 2011-12-28 8.286 2.895 136.269 2170.01 2011-12-29 8.303 2.902 137.688 2173.56 2011-12-30 8.261 2.930 138.468 2199.42[2185 rows x 4 columns]各支股票與上證指數(shù)的相關(guān)系數(shù)ZGSY GSYH GZMT 上證 2007 0.800647 0.789706 0.434432 1.0 2008 0.855625 0.839435 0.639594 1.0 2009 0.843779 0.808002 0.530355 1.0 2010 0.777748 0.608758 0.351867 1.0 2011 0.700398 0.613596 0.415294 1.0中國(guó)石油 與 貴州茅臺(tái) 的相關(guān)系數(shù): 2007 0.355767 2008 0.488143 2009 0.385639 2010 0.138757 2011 0.258366 dtype: float64初學(xué)乍到,歡迎指正。
總結(jié)
以上是生活随笔為你收集整理的一个使用python和TUShare进行股票分析的例子的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 基带信号调制
- 下一篇: 模拟信号,数字信号,基带信号,宽带信号,