一个使用python和TUShare进行股票分析的例子
生活随笔
收集整理的這篇文章主要介紹了
一个使用python和TUShare进行股票分析的例子
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(2021.1)這篇文章寫成的時間較早,使用的讀取數據的接口有更新,具體內容請查看:https://tushare.pro/register?reg=365021。
?
?
(原內容:)
《利用Python進行數據分析(Python For Data Analysis中文版)》P286 中間有一個例子,使用標普500指數(SPX)和幾支股票的收盤價,計算一個日收益率與SPX年度相關系數的DataFrame。
因為擔心讀取這些數據會存在障礙,其實我也沒有真正去試,就萌生了用中國股市數據替代后再進行計算的想法。
在網上找了一些資料,發現使用TUShare讀取股票數據較為方便,按https://tushare.pro/和http://tushare.org/index.html上的步驟,安裝了tushare。
下面介紹與這個例子相關的一些內容。
一、讀取股票數據
import tushare as ts# 讀取上證指數 df = ts.get_hist_data('sh000001') print(df)# 另一種讀法 df = ts.get_k_data('sh') print(df)# 當然可以指定讀取的時間段,如讀取2019年1月的數據 # 注意日期的寫法,如寫成'2019-1-1'會得到不正確的結果 df = ts.get_k_data('sh000001', '2019-01-01', '2019-01-31') print(df)二、模仿書中的例子,構造close_px
import tushare as ts import pandas as pd from 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, '2003-01-01', '2011-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) # 構造后的成品,中間有一部分缺失數據,可以是因為2003年還沒上市吧三、完整的代碼
import tushare as ts import pandas as pd from 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, '2003-01-01', '2011-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) # 構造后的成品,中間有一部分缺失數據,可以是因為2003年還沒上市吧# 以下的代碼是照書上抄的,當然根據股票名稱做了相應的改動 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 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]各支股票與上證指數的相關系數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中國石油 與 貴州茅臺 的相關系數: 2007 0.355767 2008 0.488143 2009 0.385639 2010 0.138757 2011 0.258366 dtype: float64初學乍到,歡迎指正。
總結
以上是生活随笔為你收集整理的一个使用python和TUShare进行股票分析的例子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基带信号调制
- 下一篇: 模拟信号,数字信号,基带信号,宽带信号,