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和shell实现的校验IP地址合法性脚本分享
Oct 23 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
Jun 19 Python
对Python的多进程锁的使用方法详解
Feb 18 Python
Python实现求两个数组交集的方法示例
Feb 23 Python
python爬虫 爬取58同城上所有城市的租房信息详解
Jul 30 Python
Django项目使用ckeditor详解(不使用admin)
Dec 17 Python
python MultipartEncoder传输zip文件实例
Apr 07 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
Apr 08 Python
Python基于pandas爬取网页表格数据
May 11 Python
Pycharm激活方法及详细教程(详细且实用)
May 12 Python
pytorch中index_select()的用法详解
Jan 06 Python
python 逆向爬虫正确调用 JAR 加密逻辑
Jan 12 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 获取全局变量的代码
2011/04/21 PHP
PHP管理内存函数 memory_get_usage()使用介绍
2012/09/23 PHP
PHP加密解密函数详解
2015/10/28 PHP
thinkphp实现图片上传功能
2016/01/13 PHP
php简单复制文件的方法
2016/05/09 PHP
学习面向对象之面向对象的术语
2010/11/30 Javascript
js constructor的实际作用分析
2011/11/15 Javascript
jQuery.getScript加载同域JS的代码
2012/02/13 Javascript
使用Math.floor与Math.random取随机整数的方法详解
2013/05/07 Javascript
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
JavaScript动态添加style节点的方法
2015/06/09 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
js 判断所选时间(或者当前时间)是否在某一时间段的实现代码
2015/09/05 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
2016/01/05 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
BootStrapValidator初使用教程详解
2017/02/10 Javascript
javascript 正则表达式分组、断言详解
2017/04/20 Javascript
微信小程序实现给循环列表添加点击样式实例
2017/04/26 Javascript
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
深入学习JavaScript中的bom
2019/05/27 Javascript
原生js+css实现tab切换功能
2020/09/17 Javascript
Python基于time模块求程序运行时间的方法
2017/09/18 Python
感知器基础原理及python实现过程详解
2019/09/30 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
使用opencv将视频帧转成图片输出
2019/12/10 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
Django中ORM找出内容不为空的数据实例
2020/05/20 Python
解析Python 偏函数用法全方位实现
2020/06/26 Python
python定时截屏实现
2020/11/02 Python
你的自行车健身专家:FaFit24
2016/11/16 全球购物
个人合伙协议书范本
2014/10/14 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
Python FuzzyWuzzy实现模糊匹配
2022/04/28 Python