Excel + Matplotlib 初试牛刀


(bxyzz) #1

晚上心血来潮想做一些关于汇率的东西,一时间没有思路,就先实现了下汇率的可视化。前几天 Tushare 更新,瞅了一眼发现有一个“ChinaDataExchangeRate –汇率”接口,兴冲冲去通联数据点了试用,结果死活用不起来,感觉最近Tushare问题频发,经常出些差错,但一时半会也没有什么好代替品,只能作罢。

不死心地在 Google 和 Stark Overflow 上继续找,要么是收费接口,要么是需要爬虫,好不容易找到了 Open Exchange Rates ,结果 Human Test 里的验证码怎么都出不来,又只好放弃。最后没有办法,上了Wind,导出了 1994-08-31 到 2016-11-08 的“人民币汇率(日)”,手动查看数据之后做了简单清洗,最后用 Matplotlib 做了可视化输出。

准备工作

Wind可以直接“提取数据”后“数据导出”,把导出的 Excel 文件拖到桌面上,直接先:

cd /Users/wonderful/Desktop 

我记得以前看书的时候也碰到过这个坑,其实是不用先 cd 的,回头翻下书再过来填坑。

读取数据

用 pandas 的特定方式来读取数据:

import pandas as pd
import matplotlib.pyplot as plt
path = '/Users/wonderful/Desktop/'
filename = '人民币汇率(日)'
a = pd.read_excel(filename + '.xlsx')

简单审查数据

先看一下数据长什么样:

>>> a.index
RangeIndex(start=0, stop=5462, step=1)
>>> a.columns
Index([u'指标名称', u'中间价:美元兑人民币'], dtype='object')
>>> a.head()
                  指标名称 中间价:美元兑人民币
0                   频率          日
1  1994-08-31 00:00:00     8.5616
2  1994-09-01 00:00:00     8.5591
3  1994-09-02 00:00:00     8.5565
4  1994-09-05 00:00:00      8.554
>>> a.tail()
                     指标名称 中间价:美元兑人民币
5457  2016-11-07 00:00:00     6.7725
5458  2016-11-08 00:00:00     6.7817
5459  2016-11-09 00:00:00     6.7832
5460                  NaN        NaN
5461          数据来源:Wind资讯        NaN

首先是 columns 我想用英文来写,其次数据的第一行是我所不需要的;数据的最后几行也不需要;index 是序号而不是时间,大体上就这么几个问题。

确定清洗方案

columns 替换掉;删去不需要的几行数据;用数据第一列的时间来替换掉 index,最后别忘了把第一列的时间删除 :

b = a[1: 5459]	                        # 删去不需要的几行数据
b.columns = ['date', 'exchange rate']	# 将 ```columns``` 替换掉
b.index = b['date']		        # 用数据第一列的时间来替换掉 index
del b['date']	                        # 把第一列的时间删除
b                     

可视化输出

这里就不多做文章了,因为只是想做一个可视化玩一玩而已,图表大小、坐标轴、网格线、图示、线的粗细、颜色等等等等就没有多做花头了:

b.plot()
plt.show()

![](data:image/svg+xml;utf8,<svg%20xmlns=‘http://www.w3.org/2000/svg’%20width=‘800’%20height='600’>)

最后和 Wind 的原图比较一下:

![](data:image/svg+xml;utf8,<svg%20xmlns=‘http://www.w3.org/2000/svg’%20width=‘2560’%20height='1600’>)

完整代码

cd /Users/wonderful/Desktop
# 忘记当时怎么解决的了,p174
import pandas as pd
import matplotlib.pyplot as plt
path = '/Users/wonderful/Desktop/'
filename = '人民币汇率(日)'
a = pd.read_excel(filename + '.xlsx')
a.index
a.columns
a.head()
a.tial()
a
b = a[1: 5459]	# 删去不需要的几行数据
b.columns = ['date', 'exchange rate']	# 将 ```columns``` 替换掉
b.index = b['date']		# 用数据第一列的时间来替换掉 ```index```
del b['date']	# 把第一列的时间删除
b
b.plot()
plt.show()

收工!