TuShare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。
按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'])))
# 输出的内容与书上稍有区别,可能是中石油上市时间较晚的原因吧