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创建日历实例
Aug 21 Python
浅析Python中的多重继承
Apr 28 Python
python模块之time模块(实例讲解)
Sep 13 Python
Python编程实现的简单神经网络算法示例
Jan 26 Python
python远程连接服务器MySQL数据库
Jul 02 Python
对python Tkinter Text的用法详解
Oct 11 Python
关于python字符串方法分类详解
Aug 20 Python
python基于K-means聚类算法的图像分割
Oct 30 Python
Python将二维列表list的数据输出(TXT,Excel)
Apr 23 Python
高考考python编程是真的吗
Jul 20 Python
python 生成器需注意的小问题
Sep 29 Python
python中Pexpect的工作流程实例讲解
Mar 02 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
《魔兽争霸3:重制版》更新 多项视觉效果调整
2020/05/04 魔兽争霸
PHP配置文件中最常用四个ini函数
2007/03/19 PHP
php中实现精确设置session过期时间的方法
2014/07/17 PHP
PHPstorm启用自动换行的方法详解(IDE)
2020/09/17 PHP
Textarea与懒惰渲染实现代码
2012/01/04 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
2012/03/29 Javascript
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
jquery live()调用不存在的解决方法
2014/02/26 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
2015/03/26 Javascript
基于jquery实现的树形菜单效果代码
2015/09/06 Javascript
学习JavaScript设计模式(链式调用)
2015/11/26 Javascript
js精准的倒计时函数分享
2016/06/29 Javascript
window.open打开窗口被拦截的快速解决方法
2016/08/04 Javascript
实例浅析js的this
2016/12/11 Javascript
重新理解JavaScript的六种继承方式
2017/03/24 Javascript
Vuex 快速入门(简单易懂)
2018/09/20 Javascript
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
轻量级富文本编辑器wangEditor结合vue使用方法示例
2018/10/10 Javascript
vue-router实现编程式导航的代码实例
2019/01/19 Javascript
简介二分查找算法与相关的Python实现示例
2015/08/26 Python
Python 正则表达式实现计算器功能
2017/04/29 Python
Django 内置权限扩展案例详解
2019/03/04 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
Python word文本自动化操作实现方法解析
2020/11/05 Python
html5如何在Canvas中实现自定义路径动画示例
2017/09/18 HTML / CSS
台湾母婴用品购物网站:Infant婴之房
2018/06/15 全球购物
装修设计师求职信
2014/02/26 职场文书
八一建军节感言
2014/02/28 职场文书
烹饪自我鉴定
2014/03/01 职场文书
开学典礼决心书
2014/03/11 职场文书
教师节领导致辞
2015/07/29 职场文书
教师外出学习心得体会
2016/01/18 职场文书
2016年优秀共青团员事迹材料
2016/02/25 职场文书
公司年会主持词范文!
2019/05/07 职场文书
小学语文教师竞聘演讲稿范文
2019/08/09 职场文书
你知道哪几种MYSQL的连接查询
2021/06/03 MySQL