Python实现时间序列可视化的方法


Posted in Python onAugust 06, 2019

Python实现时间序列可视化的方法

时间序列数据在数据科学领域无处不在,在量化金融领域也十分常见,可以用于分析价格趋势,预测价格,探索价格行为等。

学会对时间序列数据进行可视化,能够帮助我们更加直观地探索时间序列数据,寻找其潜在的规律。

本文会利用Python中的matplotlib【1】库,并配合实例进行讲解。matplotlib库是一个用于创建出版质量图表的桌面绘图包(2D绘图库),是Python中最基本的可视化工具。

【工具】Python 3

【数据】Tushare

【注】示例注重的是方法的讲解,请大家灵活掌握。

1.单个时间序列

首先,我们从tushare.pro获取指数日线行情数据,并查看数据类型。

import tushare as ts 
import pandas as pd 
pd.set_option('expand_frame_repr', False) # 显示所有列 
ts.set_token('your token') 
pro = ts.pro_api() 
df = pro.index_daily(ts_code='399300.SZ')[['trade_date', 'close']] 
df.sort_values('trade_date', inplace=True)  
df.reset_index(inplace=True, drop=True) 
print(df.head()) 
 trade_date  close 
0  20050104 982.794 
1  20050105 992.564 
2  20050106 983.174 
3  20050107 983.958 
4  20050110 993.879 
print(df.dtypes) 
trade_date   object 
close     float64 
dtype: object

交易时间列'trade_date' 不是时间类型,而且也不是索引,需要先进行转化。

df['trade_date'] = pd.to_datetime(df['trade_date']) 
df.set_index('trade_date', inplace=True) 
print(df.head()) 
       close 
trade_date      
2005-01-04 982.794 
2005-01-05 992.564 
2005-01-06 983.174 
2005-01-07 983.958 
2005-01-10 993.879

接下来,就可以开始画图了,我们需要导入matplotlib.pyplot【2】,然后通过设置set_xlabel()set_xlabel()为x轴和y轴添加标签。

import matplotlib.pyplot as plt 
ax = df.plot(color='') 
ax.set_xlabel('trade_date') 
ax.set_ylabel('399300.SZ close') 
plt.show()

Python实现时间序列可视化的方法

matplotlib库中有很多内置图表样式可以选择,通过打印plt.style.available查看具体都有哪些选项,应用的时候直接调用plt.style.use('fivethirtyeight')即可。

print(plt.style.available) 
['bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark-palette', 'seaborn-dark', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'seaborn', 'Solarize_Light2', 'tableau-colorblind10', '_classic_test'] 
 plt.style.use('fivethirtyeight') 
ax1 = df.plot() 
ax1.set_title('FiveThirtyEight Style') 
plt.show()

Python实现时间序列可视化的方法

2.设置更多细节

上面画出的是一个很简单的折线图,其实可以在plot()里面通过设置不同参数的值,为图添加更多细节,使其更美观、清晰。

figsize(width, height)设置图的大小,linewidth设置线的宽度,fontsize设置字体大小。然后,调用set_title()方法设置标题。

ax = df.plot(color='blue', figsize=(8, 3), linewidth=2, fontsize=6) 
ax.set_title('399300.SZ close from 2005-01-04 to 2019-07-04', fontsize=8) 
plt.show()

Python实现时间序列可视化的方法

如果想要看某一个子时间段内的折线变化情况,可以直接截取该时间段再作图即可,如df['2018-01-01': '2019-01-01']

dfdf_subset_1 = df['2018-01-01':'2019-01-01'] 
ax = df_subset_1.plot(color='blue', fontsize=10)

plt.show()

Python实现时间序列可视化的方法

如果想要突出图中的某一日期或者观察值,可以调用.axvline()和.axhline()方法添加垂直和水平参考线。

ax = df.plot(color='blue', fontsize=6) 
ax.axvline('2019-01-01', color='red', linestyle='--') 
ax.axhline(3000, color='green', linestyle='--') 
plt.show()

Python实现时间序列可视化的方法

也可以调用axvspan()的方法为一段时间添加阴影标注,其中alpha参数设置的是阴影的透明度,0代表完全透明,1代表全色。

ax = df.plot(color='blue', fontsize=6) 
ax.axvspan('2018-01-01', '2019-01-01', color='red', alpha=0.3) 
ax.axhspan(2000, 3000, color='green', alpha=0.7) 
plt.show()

Python实现时间序列可视化的方法

3.移动平均时间序列

有时候,我们想要观察某个窗口期的移动平均值的变化趋势,可以通过调用窗口函数rolling来实现。下面实例中显示的是,以250天为窗口期的移动平均线close,以及与移动标准差的关系构建的上下两个通道线upper和lower。

ma = df.rolling(window=250).mean() 
mstd = df.rolling(window=250).std() 
ma['upper'] = ma['close'] + (mstd['close'] * 2) 
ma['lower'] = ma['close'] - (mstd['close'] * 2) 
ax = ma.plot(linewidth=0.8, fontsize=6) 
ax.set_xlabel('trade_date', fontsize=8) 
ax.set_ylabel('399300.SZ close from 2005-01-04 to 2019-07-04', fontsize=8) 
ax.set_title('Rolling mean and variance of 399300.SZ cloe from 2005-01-04 to 2019-07-04', fontsize=10) 
plt.show()

Python实现时间序列可视化的方法

4.多个时间序列

如果想要可视化多个时间序列数据,同样可以直接调用plot()方法。示例中我们从tushare.pro上面选取三只股票的日线行情数据进行分析。

# 获取数据 
code_list = ['000001.SZ', '000002.SZ', '600000.SH'] 
data_list = [] 
for code in code_list: 
  print(code) 
  df = pro.daily(ts_code=code, start_date='20180101', end_date='20190101')[['trade_date', 'close']] 
  df.sort_values('trade_date', inplace=True) 
  df.rename(columns={'close': code}, inplace=True) 
  df.set_index('trade_date', inplace=True) 
  data_list.append(df) 
df = pd.concat(data_list, axis=1) 
print(df.head()) 
000001.SZ 
000002.SZ 
600000.SH 
      000001.SZ 000002.SZ 600000.SH 
trade_date                  
20180102    13.70   32.56   12.72 
20180103    13.33   32.33   12.66 
20180104    13.25   33.12   12.66 
20180105    13.30   34.76   12.69 
20180108    12.96   35.99   12.68 
# 画图 
ax = df.plot(linewidth=2, fontsize=12) 
ax.set_xlabel('trade_date') 
ax.legend(fontsize=15) 
plt.show()

Python实现时间序列可视化的方法

调用.plot.area()方法可以生成时间序列数据的面积图,显示累计的总数。

ax = df.plot.area(fontsize=12) 
ax.set_xlabel('trade_date') 
ax.legend(fontsize=15) 
plt.show()

Python实现时间序列可视化的方法

如果想要在不同子图中单独显示每一个时间序列,可以通过设置参数subplots=True来实现。layout指定要使用的行列数,sharex和sharey用于设置是否共享行和列,colormap='viridis' 为每条线设置不同的颜色。

df.plot(subplots=True, 
     layout=(2, 2), 
     sharex=False, 
     sharey=False, 
     colormap='viridis', 
     fontsize=7, 
     legend=False, 
     linewidth=0.3) 
plt.show()

Python实现时间序列可视化的方法

5.总结

本文主要介绍了如何利用Python中的matplotlib库对时间序列数据进行一些简单的可视化操作,包括可视化单个时间序列并设置图中的细节,可视化移动平均时间序列和多个时间序列。

以上所述是小编给大家介绍的Python实现时间序列可视化的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python编写的最短路径算法
Mar 25 Python
在Heroku云平台上部署Python的Django框架的教程
Apr 20 Python
对pandas的行列名更改与数据选择详解
Nov 12 Python
Python爬虫之UserAgent的使用实例
Feb 21 Python
Python创建字典的八种方式
Feb 27 Python
TensorFlow2.0:张量的合并与分割实例
Jan 19 Python
使用openCV去除文字中乱入的线条实例
Jun 02 Python
Python socket服务常用操作代码实例
Jun 22 Python
Python爬虫爬取糗事百科段子实例分享
Jul 31 Python
基于python的matplotlib制作双Y轴图
Apr 20 Python
Python Django 后台管理之后台模型属性详解
Apr 25 Python
整理Python中常用的conda命令操作
Jun 15 Python
python 模拟银行转账功能过程详解
Aug 06 #Python
Python 3 判断2个字典相同
Aug 06 #Python
django 控制页面跳转的例子
Aug 06 #Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
Aug 06 #Python
django项目简单调取百度翻译接口的方法
Aug 06 #Python
python数据归一化及三种方法详解
Aug 06 #Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
Aug 06 #Python
You might like
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
2013/01/06 PHP
探讨php define()函数及defined()函数使用详解
2013/06/09 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
javascript Select标记中options操作方法集合
2008/10/22 Javascript
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
jQuery实现的多选框多级联动插件
2014/05/02 Javascript
javascript将数字转换整数金额大写的方法
2015/01/27 Javascript
ECMAScript6函数剩余参数(Rest Parameters)
2015/06/12 Javascript
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
2015/09/27 Javascript
jQuery基础知识点总结(必看)
2016/05/31 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
AngularJS  $modal弹出框实例代码
2016/08/24 Javascript
简单理解js的prototype属性及使用
2016/12/07 Javascript
Bootstrap fileinput文件上传组件使用详解
2017/06/06 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
vue-cli扩展多模块打包的示例代码
2018/04/09 Javascript
深入浅析AngularJs模版与v-bind
2018/07/06 Javascript
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
python生成指定长度的随机数密码
2014/01/23 Python
Python使用random和tertools模块解一些经典概率问题
2015/01/28 Python
Python进行数据科学工作的简单入门教程
2015/04/01 Python
python3爬虫之设计签名小程序
2018/06/19 Python
python用fsolve、leastsq对非线性方程组求解
2018/12/15 Python
Python 分发包中添加额外文件的方法
2019/08/16 Python
Django项目基础配置和基本使用过程解析
2019/11/25 Python
np.random.seed() 的使用详解
2020/01/14 Python
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
玖熙女鞋美国官网:Nine West
2016/10/06 全球购物
Skip Hop官网:好莱坞宝宝挚爱品牌
2018/06/17 全球购物
物流业务员岗位职责
2014/02/08 职场文书
《十六年前的回忆》教学反思
2014/02/14 职场文书
21岁生日感言
2014/02/27 职场文书
大专生找工作自荐书
2014/06/10 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
村支部书记群众路线对照检查材料思想汇报
2014/10/08 职场文书
银行员工考核评语
2014/12/31 职场文书