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获取央视节目单的实现代码
Jul 25 Python
Python中列表、字典、元组数据结构的简单学习笔记
Mar 20 Python
Python 编码处理-str与Unicode的区别
Sep 06 Python
python3实现抓取网页资源的 N 种方法
May 02 Python
python中实现将多个print输出合成一个数组
Apr 19 Python
python networkx 根据图的权重画图实现
Jul 10 Python
Python统计分析模块statistics用法示例
Sep 06 Python
打包PyQt5应用时的注意事项
Feb 14 Python
Python3 assert断言实现原理解析
Mar 02 Python
使用darknet框架的imagenet数据分类预训练操作
Jul 07 Python
Python异常处理机制结构实例解析
Jul 23 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
Feb 20 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 preg_filter执行一个正则表达式搜索和替换
2012/02/27 PHP
php学习之function的用法
2012/07/14 PHP
php使用fputcsv()函数csv文件读写数据的方法
2015/01/06 PHP
Laravel5中contracts详解
2015/03/02 PHP
PHP记录页面停留时间的方法
2016/03/30 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/01/13 Javascript
JavaScript 给汉字排序实例代码
2008/06/28 Javascript
Moment.js 不容错过的超棒Javascript日期处理类库
2012/04/15 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
JQuery中DOM事件绑定用法详解
2015/06/13 Javascript
AngularJs动态加载模块和依赖注入详解
2016/01/11 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
2017/09/04 Javascript
详解webpack-dev-server的简单使用
2018/04/02 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
node中的session的具体使用
2018/09/14 Javascript
Node.js Windows Binary二进制文件安装方法
2019/05/16 Javascript
JS函数基本定义与用法示例
2020/01/15 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2008/09/06 Python
pygame学习笔记(4):声音控制
2015/04/15 Python
详解Django通用视图中的函数包装
2015/07/21 Python
简析Python的闭包和装饰器
2016/02/26 Python
Python3连接MySQL(pymysql)模拟转账实现代码
2016/05/24 Python
Python解决八皇后问题示例
2018/04/22 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
python实现的自动发送消息功能详解
2019/08/15 Python
djano一对一、多对多、分页实例代码
2019/08/16 Python
Python matplotlib以日期为x轴作图代码实例
2019/11/22 Python
使用python matploblib库绘制准确率,损失率折线图
2020/06/16 Python
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
印尼值得信赖的在线交易网站:Bukalapak
2019/03/11 全球购物
Capitol Lighting的1800lighting.com:住宅和商业照明
2019/04/10 全球购物
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
宣传口号大全
2014/06/16 职场文书
干部作风建设个人剖析材料
2014/10/11 职场文书