草庐IT

Python绘制时间序列数据的时序图、自相关图和偏自相关图

dongfuguo 2023-09-01 原文

时序图、自相关图和偏相关图是判断时间序列数据是否平稳的重要依据。

本文涉及的扩展库numpy、pandas、statsmodels一般可以使用pip进行在线安装,如果安装失败,可以到http://www.lfd.uci.edu/~gohlke/pythonlibs/下载相应的whl文件进行离线安装。

另外,绘制自相关图的函数plot_acf()和绘制偏自相关图的函数plot_pacf()还有更多参数可以使用,请自行挖掘和探索。

from random import randrange
import numpy as np
import pandas as pd

import matplotlib.pyplot as plt
import matplotlib.font_manager as fm

from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

def generateData(startDate, endDate):
    df = pd.DataFrame([300+i*30+randrange(50) for i in range(31)],\
                      columns=['营业额'],\
                      index=pd.date_range(startDate, endDate, freq='D'))
    return df

# 生成测试数据,模拟某商店营业额
data = generateData('20170601',  '20170701')
print(data)

# 绘制时序图
myfont = fm.FontProperties(fname=r'C:\Windows\Fonts\STKAITI.ttf')
data.plot()
plt.legend(prop=myfont) 
plt.show()
# 绘制自相关图
plot_acf(data).show()
# 绘制偏自相关图
plot_pacf(data).show()

某次运行得到的随机数据为:

                   营业额
2017-06-01   333
2017-06-02   370
2017-06-03   392
2017-06-04   425
2017-06-05   457
2017-06-06   467
2017-06-07   488
2017-06-08   540
2017-06-09   575
2017-06-10   575
2017-06-11   635
2017-06-12   631
2017-06-13   706
2017-06-14   691
2017-06-15   728
2017-06-16   767
2017-06-17   783
2017-06-18   831
2017-06-19   846
2017-06-20   894
2017-06-21   908
2017-06-22   954
2017-06-23   971
2017-06-24  1011
2017-06-25  1051
2017-06-26  1089
2017-06-27  1120
2017-06-28  1118
2017-06-29  1143
2017-06-30  1181
2017-07-01  1240

相应的时序图为:

从时序图来看,有明显的增长趋势,原始数据属于不平稳序列。

相应的自相关图为:

从自相关图来看,呈现三角对称形式,不存在截尾或拖尾,属于单调序列的典型表现形式,原始数据属于不平稳序列。

相应的偏自相关图为:

从偏自相关图形来看,也不存在截尾或拖尾,属于不平稳序列。

对于不平稳序列而言,要获得平稳序列的方法之一就是进行差分运算,请参考“相关阅读”第一条。

----------相关阅读----------

Python使用pandas对数据进行差分运算

Python+pyplot绘制带文本标注的柱状图

Python使用matplotlib填充图形指定区域

Python+numpy实现函数向量化

Python使用numpy计算矩阵特征值、特征向量与逆矩阵

Python使用扩展库numpy计算矩阵加权平均值

Python使用matplotlib绘制三维曲线

Python扩展库scipy.misc中图像转换成pillow图像

详解Python科学计算扩展库numpy中的矩阵运算(1)

Python科学计算扩展库numpy中的广播运算

Python扩展库numpy中的布尔运算

Python获取numpy数组中最大的5个元素(保持原顺序)

Python稀疏矩阵运算库scipy.sparse用法精要

Python科学计算库numpy中的add运算

使用Jupyter Notebook+bokeh绘图入门完整步骤

Python高级数组处理模块numpy用法精要

Python扩展库scipy中值滤波算法的应用

Python绘制带标记和箭头的树结构

Python绘制带有中文标签和图例的图

Python数据可视化案例三:使用Slider组件调整曲线参数

Python数据可视化案例二:动态更新数据

Python数据可视化案例一:自定义曲线频率、颜色与线型

祝所有程序员1024节日快乐

学会提问,你就成功了一大半!

盘点那些让人上火的提问方式(论如何让交流更高效)

----------喜大普奔----------

1、继《Python程序设计基础》(2017年9月第5次印刷)、《Python程序设计(第2版)》(2017年9月第4次印刷)、《Python可以这样学》(2017年7月第3次印刷)系列图书之后,董付国老师新书《Python程序设计开发宝典》已于2017年8月1日在清华大学出版社出版,并于2017年9月进行了第2次印刷。为庆祝新书《Python程序设计开发宝典》全面上架,清华大学出版社联合“赣江图书专营”淘宝店推出特价优惠活动,《Python程序设计开发宝典》原价69元,新书上架期间超低价39.8元,可以复制下面的链接使用浏览器打开查看图书详情和购买:

https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-14464369246.84.46f16db0roWfX4&id=557107249812&rn=339cbc9df2bac424664103917dedfbd2&abbucket=8&tbpm=3

2、董付国老师新作《中学生可以这样学Python》已正式出版,很快就会在各大书城全面上架。

3、董付国老师6本Python系列图书阅读指南

有关Python绘制时间序列数据的时序图、自相关图和偏自相关图的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby-on-rails - Ruby 检查日期时间是否为 iso8601 并保存 - 2

    我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby​​是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查

  3. ruby-on-rails - 将 Ruby 中的日期/时间格式化为 YYYY-MM-DD HH :MM:SS - 2

    这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build

  4. ruby - 查找字符串中的内容类型(数字、日期、时间、字符串等) - 2

    我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s

  5. ruby - 是否有用于序列化和反序列化各种格式的对象层次结构的模式? - 2

    给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最

  6. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  7. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  8. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  9. python - 如何读取 MIDI 文件、更改其乐器并将其写回? - 2

    我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的

  10. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

随机推荐