20 October 2018

本文介绍如何使用 tushare 包来获取利率数据,并通过 matplotlib 绘制利率走势图。

%matplotlib notebook
import numpy as np
import pandas as pd
import tushare as ts
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.ticker as mtick


def filter_dr(dr, dtype):
    """
    从利率的 dataframe 中获取指定类型的利率
    @dr: 利率数据
    @dtype: 利率类型,例如:'定期存款整存整取(一年)'
    """

    # 过滤出指定类型的利率数据
    result = dr.loc[ dr['deposit_type'] == dtype ]
    # 过滤无效数据
    result = result.loc[ result['rate'] != '--' ]
    # 丢弃类型数据,只保留时间和利率值
    result = result.drop(['deposit_type'], axis=1)
    
    # 时间格式
    result.date = pd.to_datetime(result.date)
    result.rate = pd.to_numeric(result.rate, errors='coerce')
    
    # result.sort_values('date', inplace=True)
    # result.set_index(['date'], inplace = True) 
    return result


def plot_dr(dr, title):
    """
    绘制利率图
    @dr : 利率数据
    @title : 图的标题
    """

    # drtypes = pd.unique(dr['deposit_type'])
    drtypes = ['定期存款整存整取(一年)', '定期存款整存整取(三年)', '定期存款整存整取(五年)']

    fig = plt.figure(figsize=(10,6))
    ax = fig.add_subplot(1,1,1)
    
    for drtype in drtypes:
        result = filter_dr(dr, drtype)
        ax.plot(result['date'], result['rate'], label=drtype)

    fmt='%.2f%%'
    ax.yaxis.set_major_formatter(mtick.FormatStrFormatter(fmt))
    ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
    ymin, ymax = ax.get_ylim()
    ax.set_yticks(np.round(np.linspace(ymin, ymax, 20), 2))
    plt.xticks(rotation=60)
    plt.xlabel('日期')
    plt.ylabel('利率(%)')
    plt.title(title)
    plt.subplots_adjust(bottom=0.2, right=0.9, left=0.1)
    plt.legend()
    plt.show()

# 使用 tushare 获取利率数据
deposit_rate = ts.get_deposit_rate()

# 画利率走势图
plot_dr(deposit_rate, '利率走势图')

# 查看一年期利率数据
filter_dr(deposit_rate, '定期存款整存整取(一年)')

date rate
6 2015-10-24 1.50
20 2015-08-26 1.75
34 2015-06-28 2.00
48 2015-05-11 2.25
62 2015-03-01 2.50
76 2014-11-22 2.75
90 2012-07-06 3.00
104 2012-06-08 3.25
118 2011-07-07 3.50
132 2011-04-06 3.25
146 2011-02-09 3.00
160 2010-12-26 2.75
174 2010-10-20 2.50
188 2008-12-23 2.25
202 2008-11-27 2.52
216 2008-10-30 3.60
230 2008-10-09 3.87
244 2007-12-21 4.14
258 2007-09-15 3.87
272 2007-08-22 3.60
286 2007-07-21 3.33
300 2007-05-19 3.06
314 2007-03-18 2.79
328 2006-08-19 2.52
342 2004-10-29 2.25
356 2002-02-21 1.98
370 1999-06-10 2.25
384 1998-12-07 3.78
398 1998-07-01 4.77
412 1998-03-25 5.22
426 1997-10-23 5.67
440 1996-08-23 7.47
454 1996-05-01 9.18
468 1993-07-11 10.98
482 1993-05-15 9.18
496 1991-04-21 7.56
510 1990-08-21 8.64
524 1990-04-15 10.08
538 1989-02-01 11.34

其他参考