首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

运用Python分析票交所的每日价格——初识pandas库

上一篇文章中,我们自动抓取了票交所在收益率曲线板块,公布的每日价格。具体文件如下图:

如果就让这些文件躺在文件夹了,不做点什么,似乎对不起之前敲的代码。

今天我们就来使用pandas库,对这些数据进行一番处理。

首先,我们打开一个2018-12-05的Excel表格,查看原始数据的格式。

从票交所官网下载的数据十分整齐,分列记录了日期,关键期限,利率和收益率。如此漂亮的数据省去了最繁琐的数据清洗工作。现在我们要做的就是把这15个Excel表格的数据整合到一起,以便于分析。

本次程序我们使用的库如下:

importpandasaspd

fromdatetimeimportdate, timedelta

importmatplotlib.pyplotasplt

importnumpyasnp

首先我们需要读取数据,用while循换依次读取数据,并将其加入到一个列表(Rate_list)中。由于原始数据的列名为中文[‘日期’, ‘关键期限’, ‘利率’, ‘收益率’],现将其改变成[‘day’, ‘keydate’, ‘R’, ‘Y’],便于后续操作。用于读取的程序如下:

Rate_list = []

columns_names = ['day','keydate','R','Y']

#确定起始日期

start_day = date(2018,12,5)

#初始化目标日期

target_day = start_day

#确定截止日期

end_day = date(2018,12,26)

#循环读取全部目标文件

whiletarget_day

try:

#定义目标文件的路径

path ='G:/BillRate/%s.xls'% target_day.strftime('%Y-%m-%d')

#读取目标文件,同时自定义columns(列名)

BillRate = pd.read_excel(path,names=columns_names)

#将读取的数据加入到Rate_list

Rate_list.append(BillRate)

#跳过节假日

exceptFileNotFoundErrorase:

pass

#前进一天

target_day += timedelta(days=1)

将Rate_list中的数据进行合并,代码如下:

#合并原始数据

Rate_data_original = pd.concat(Rate_list,ignore_index=True)

Rate_data_original中的数据格式如下:

将day列和keydate列设为行索引,代码如下:

#在原始数据上,将'day'列和‘keydate'列设置为新的索引

Rate_data1 = Rate_data_original.set_index(['day','keydate'])

得到的数据结构如下图:

再将day列设为列索引:

#将数据中'day'列转换成列索引

Rate_data2 = Rate_data1.unstack('day')

#获取keydate列的初始排序

index_original = Rate_data_original['keydate'].loc[:13].values

#恢复index至初始排序

Rate_data3 = Rate_data2.reindex(index_original)

得到的数据结构如下:

至此整个数据规整完毕,最终的数据结构如上图,每行数据表示相应期限的票据在2018-12-05至2018-12-25期间,每日的利率和收益率,其中R项下为利率,Y项下为收益率。下面就可以对数据进行分析了。

由于在票据交易过程中,相较于收益率,利率的使用更为普遍,所以我们只取出利率(R)项下的数据进行分析:

Rate_data_R = Rate_data3['R']

数据结构如图:

计算各个期限票据的最高价格,最低价格,平均价格以及标准差:

#计算各期的最大数

rate_max = Rate_data_R.max(axis=1)

#计算各期的最小数

rate_min = Rate_data_R.min(axis=1)

#各期限的平均数

rate_mean = Rate_data_R.mean(axis=1)

#各期限的标准差

rate_std = Rate_data_R.std(axis=1)

得出的结果如下图:

下面我们需要进行可视化操作了,选取四个典型期限的数据,使用matplotlib库进行绘图:

#选取典型期限进行视图化

df = Rate_data_R.loc[['1Y','6M','3M','1M']]

#调整索引位置将'day'调整为index,keydate调整为columns

df = df.stack().unstack('keydate')

df.plot()

#设置y轴刻度

plt.yticks(np.arange(2.8,3.8,0.1))

plt.show()

输出的结果如下:

从上图可以看出票据价格的走势仍然呈现一个U型,临近年底规模效应越发明显。

本次我们简单的使用了pandas库里的模块进行数据分析,本次只爬取了20天的数据,在数据量较少的情况下优势不是那么明显,等到明年末,如果处理一年的数据,那通过手工操作基本无法实现,只能借助程序,代码的有用性就体现在这里。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181228G08WLO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券