之前写过一个获取历史贷款利率,并且把近30年以来的贷款利润用折线图画了出来,除了贷款利率,市场也会关注存款利率, 存款利率越高,人们越有动力讲钱存放在银行获取利息,因为银行机会是没有风险的,相反,如果存款利益太低,甚至低于通货膨胀率,那人们肯定选择把钱取出来消费或者是进行投资。所以存款利率,对于证券市场尤其时债券市场是非常重要的数据。
和之前一样,获取历史存款利率数据并且画成折线图。数据来自一个python开源接口baostock。需要在python35以上的环境下运行。
import baostock as bs
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as matfont
def get_deposit_rate():
"""get the deposit history data from baostock, need login at first"""
# 登陆系统
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:'+lg.error_code)
print('login respond error_msg:'+lg.error_msg)
# 获取存款利率
rs = bs.query_deposit_rate_data(start_date="1970-01-01", end_date="2018-08-01")
print('query_deposit_rate_data respond error_code:'+rs.error_code)
print('query_deposit_rate_data respond error_msg:'+rs.error_msg)
# 打印结果集
data_list = []
while (rs.error_code == '0') & rs.next():
# 获取一条记录,将记录合并在一起
data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)
# 结果集输出到csv文件
result.to_csv("D:/deposit_rate.csv", encoding="gbk", index=False)
print(result)
# 登出系统
bs.logout()
return result
def plot_pic_4_deposit_rate():
""" 画出存款利率变化图 """
deposit_rate_data = get_deposit_rate()
deposit_rate_data.dropna(axis = 0, how= 'any')
fig, ax = plt.subplots()
period = len(deposit_rate_data)
x1 = np.array(range(period))
demandDepositRate = deposit_rate_data['demandDepositRate']
fixedDepositRate1Year = deposit_rate_data['fixedDepositRate1Year']
fixedDepositRate3Year = deposit_rate_data['fixedDepositRate3Year']
fixedDepositRate5Year = deposit_rate_data['fixedDepositRate5Year']
datestrlist = deposit_rate_data['pubDate']
print(len(datestrlist),len(fixedDepositRate1Year),len(fixedDepositRate3Year),len(fixedDepositRate5Year))
for i in range(period):
if i > 0 and not demandDepositRate[i]:
demandDepositRate[i] = float(demandDepositRate[i - 1] )
else:
demandDepositRate[i] = float(demandDepositRate[i] )
if i > 0 and not fixedDepositRate1Year[i]:
fixedDepositRate1Year[i] = fixedDepositRate1Year[i - 1]
else:
fixedDepositRate1Year[i] = float(fixedDepositRate1Year[i] )
if i > 0 and not fixedDepositRate3Year[i]:
fixedDepositRate3Year[i] = fixedDepositRate3Year[i - 1]
else:
fixedDepositRate3Year[i] = float(fixedDepositRate3Year[i] )
if i > 0 and not fixedDepositRate5Year[i]:
fixedDepositRate5Year[i] = fixedDepositRate5Year[i - 1]
else:
fixedDepositRate5Year[i] = float(fixedDepositRate5Year[i] )
for datestr,demandrage,rate1year,rate3yea,rate5year in zip(datestrlist,demandDepositRate,fixedDepositRate1Year,fixedDepositRate3Year,fixedDepositRate5Year):
print(datestr,demandrage,rate1year,rate3yea,rate5year)
freedepositRate = np.array(demandDepositRate)
# print (pe[-50:])
# print(datestrlist[-50:])
print (freedepositRate.min(0))
print(freedepositRate.max(0))
datelable = []
for i_days in range(len(datestrlist)):
tradingdate = datestrlist[i_days]
date = int(tradingdate[8:])
# print date
# if date %10 == 0:
if date % 1 == 0:
datelable.append(tradingdate)
else:
datelable.append("")
fig, ax = plt.subplots()
plt.title(u"存款利率历史走势",fontproperties=myfont)
# plt.title(u"盘中涨幅超过",fontproperties=myfont)
plt.xlabel(u"date",fontproperties=myfont)
plt.ylabel(u"DepositRate",fontproperties=myfont)
plt.xticks(x1, datelable, rotation=30)
ax.plot(x1, demandDepositRate, label=r"demandDepositRate")
ax.plot(x1, fixedDepositRate1Year, label=r"fixedDepositRate 1Year")
ax.plot(x1,fixedDepositRate3Year,label=r"fixedDepositRate 3Year")
ax.plot(x1,fixedDepositRate5Year,label=r"fixedDepositRate 5Year")
#显示在右上角
ax.legend(loc=1)
# ax.plot(x1,closeprice,'y')
plt.show()
if __name__ == '__main__':
plot_pic_4_deposit_rate()
画出的图像如下: