python数据分析——时间序列

时间序列

  • 前言
  • 一、Datetime 模块
    • 常用函数和数据结构的详细解释
    • datetime模块
    • 示例一
    • 示例二
  • 二、时间运算
    • 示例一
    • 示例二
    • 示例三
  • 三、时间序列分析
    • 自回归(Autoregressive model/AR)模型
      • 示例
    • 滑动平均(moving average model/MA)模型
      • 示例
    • 自回归滑动平均(Autoregressive moving average model/ARMA) 模型
      • 示例


前言

时间序列是按照时间顺序排列的一系列随时间变化而变化的数据点或观测值。时间序列可以是离散的,例如每月的销售数据,也可以是连续的,例如气温和股票价格等。时间序列常用于预测和分析未来的趋势,例如经济增长、股票走势、天气变化等。

时间序列分析是数据分析中的重要部分,它涉及到对随时间变化的数据进行研究,以揭示其内在规律、趋势和周期性变化。Python作为一种强大的编程语言,拥有众多的数据处理和可视化库,如pandasnumpymatplotlibseaborn等,这些库在处理时间序列数据时表现出色。

首先,我们需要明确什么是时间序列数据。时间序列数据是按照时间顺序排列的一系列数据点,这些数据点可以是任何类型的测量值,如股票价格、气温、销售额等。时间序列分析的目标是通过这些数据点来理解和预测未来的趋势和模式。

在Python中,pandas库是处理时间序列数据的首选工具。pandas提供了DataFrame数据结构,可以轻松地导入、清洗、转换和分析时间序列数据。例如,我们可以使用pandasread_csv函数导入CSV格式的时间序列数据,然后使用to_datetime函数将日期列转换为pandasDateTimeIndex格式,这样可以更方便地进行时间序列分析。

一旦数据被导入并准备好,我们就可以使用pandas提供的各种函数来进行时间序列分析。例如,我们可以使用rolling函数来计算移动平均或移动标准差,以平滑数据并消除短期噪声。我们还可以使用diff函数来计算数据的差分,以揭示数据的趋势和周期性变化。

除了基本的统计分析,时间序列分析还包括更高级的技术,如ARIMA模型、指数平滑和傅里叶分析等。这些技术可以帮助我们更深入地理解数据的内在规律,并用于预测未来的趋势。在Python中,我们可以使用statsmodels库来实现这些高级技术。

最后,可视化是时间序列分析的重要组成部分。通过绘制时间序列图、自相关图、部分自相关图等图表,我们可以直观地了解数据的趋势、周期性和季节性变化。在Python中,matplotlibseaborn库提供了丰富的绘图功能,可以帮助我们创建高质量的可视化图表。


一、Datetime 模块

Python标准库中包含了datetime模块,该模块提供了非常强大的功能来处理日期和时间。在Pandas中,时间序列数据可以通过多种方式表示,包括Python的原生datetime对象、字符串、整数等。

Datetime模块提供了将这些不同的时间表示方式转换为Pandas中的Datetime类型的函数,以及一系列常用的时间序列操作函数。

常用函数和数据结构的详细解释

以下是Datetime模块的一些常用函数和数据结构的详细解释:

  1. to_datetime函数:将字符串或整数等转换为Pandas中的Datetime类型。它能够自动推断日期的格式,并将其转换为Pandas中的Datetime类型。例如,可以通过调用to_datetime函数将字符串"2021-01-01"转换为Datetime对象。

  2. DatetimeIndex类:表示由Datetime类型组成的时间序列索引。它可以用于创建一个Datetime类型的索引,用于对时间序列数据进行索引和切片操作。

  3. Timestamp类:表示一个具体的时间点。它是Datetime模块中最常用的数据结构之一,可以用于表示一个具体的日期和时间。例如,可以用Timestamp类表示"2021-01-01 12:00:00"这个特定的时间点。

  4. DateOffset类:表示一个时间偏移量,用于对时间进行增减操作。它可以与Datetime类型的对象进行加减运算,用于计算相对于一个特定时间点的偏移量。例如,可以通过将一个DateOffset对象加到一个Datetime对象上,得到一个新的Datetime对象。

  5. Period类:表示一个时间段。它是Datetime模块中用于表示时间段的数据结构之一,可以表示一个时间段的开始和结束时间。例如,可以用Period类表示"2021-01-01"到"2021-01-31"这个时间段。

除了以上介绍的函数和数据结构之外,Datetime模块还提供了一系列的时间序列操作函数,包括日期的加减运算、日期的比较判断、日期的格式化输出等。通过使用这些函数,可以方便地进行时间序列数据的处理和分析。

datetime模块

Python的datetime模块是Python标准库中用于处理日期和时间的模块。它提供了一系列的函数和数据结构,用于操作日期和时间。

datetime模块中的主要类和函数包括:

  1. datetime类:表示一个具体的日期和时间。这个类提供了许多方法来操作日期和时间,如获取年、月、日、时、分、秒等。

  2. date类:表示一个日期。这个类只包含年、月、日,不包含时间信息。

  3. time类:表示一个时间。这个类只包含时、分、秒,不包含日期信息。

  4. timedelta类:表示两个日期或时间之间的时间差。可以对两个日期或时间进行加减运算,得到它们之间的时间差。例如,可以计算两个日期之间相隔多少天。

  5. strftime函数:用于将datetime对象格式化为字符串。可以根据指定的格式将日期和时间对象转换成字符串,如将日期格式化为"YYYY-MM-DD"或将时间格式化为"HH:MM:SS"等。

  6. strptime函数:用于将字符串解析为datetime对象。可以根据指定的格式将字符串解析为datetime对象,如将"2021-01-01"解析为日期对象。

  7. now函数:返回当前的日期和时间。可以使用now函数获取当前的日期和时间信息。

  8. timedelta函数:用于创建一个时间差。可以使用timedelta函数创建一个指定时间差的timedelta对象,如创建一个表示5天的时间差对象。

datetime模块提供了一系列的函数和数据结构来处理日期和时间,可以方便地进行日期和时间的计算、格式化和解析等操作。它在数据分析、日志分析等领域都有广泛的应用,是Python中处理日期和时间的重要工具。

总结:datatime模块是在time模块的基础上做了封装,提供了更多更好用的类,常用的类有datetimedatetime, timedelta, tzinfo

  • date类主要用于处理年、月、日的日期数据;
  • time类主要用于处理时、分、秒的时间数据;
  • datetime类是date类和time类的综合,可以处理年、月、日、时、分、秒;
  • timedelta类主要用于做时间的加减运算;
方法(属性)说明
today()返回当地的日期
fromtimestamp(timestamp)根据给定的时间戮,返回本地日期
mindate所能表示的最小日期
maxdate所能表示的最大日期
import datetimetimestamp = 1623988800  # Represents June 18, 2021, 12:00:00 AM (UTC)datetime_obj = datetime.datetime.fromtimestamp(timestamp)print(datetime_obj)  # Output: 2021-06-18 00:00:00

示例一

【例】请利用Python获取当前日期。

关键技术:可以利用datetime模块date类的today()方法将当前日期保存在变量中。

通过使用date.today(),可以创建一个date类对象,其中包含了日期元素,如年、月、日,但不包含时间元素,比如时分、秒。最后,可以使用yearmonthday来捕获具体的日期元素。

import datetime
current_date= datetime. datetime. today()
print (current_date)
print (current_date. year)
print (current_date. month)
print (current_date. day)

在这里插入图片描述

示例二

【例】请利用Python获取当前日期和时间。

关键技术:可以利用datetime模块datetime类的today()方法将当前日期和时间保存在变量中。

通过使用datetime.today(),可以创建一个datetime类对象,其中包含了日期元素和时间元素,如年、月、日、时、分、秒。最后,可以使用yearmonthday来捕获具体的日期元素,通过hourminutesecond来捕获具体的时间元素。

import datetime
current_date= datetime. datetime. today()
print (current_date)
print (current_date. year)
print (current_date. month)
print (current_date. day)
print (current_date. hour)
print (current_date. minute)
print (current_date. second)

在这里插入图片描述

二、时间运算

示例一

【例】给定两个时间类型的数据,计算两个时间的不同之处。

关键技术:利用datetime将时间类型数据进行转换,然后利用减法运算计算时间的不同之处,默认输出结果转换为用("天”,"秒”)表达。

在这里插入图片描述
在这里插入图片描述

示例二

【例】如果要将输出结果转换以“天”为单位,此时应该如何处理?

关键技术:针对上例中的delta变量,利用delta.days可以将输出结果转换以“天”为单位。

在这里插入图片描述
输出结果如下所示:379

示例三

【例】如果要将输出结果转换以“秒”为单位,此时应该如何处理?

关键技术:针对上例中的delta变量,利用delta.seconds可以将输出结果转换以“秒”为单位。
在这里插入图片描述

输出结果如下所示: 53100

三、时间序列分析

时间序列是把同一事件的历史统计资料按照时间顺序排列起来得到的一组数据序列,主要的分析方法包括移动平均和指数平滑。

时间序列预测法是以时间数列所能反映的社会经济现象的发展过程和规律性进行引伸外推,预测其发展趋势的方法。

时间序列预测法就是通过编制和分析时间序列,根据时间序列所反映出来的发展过程、方向和趋势,进行类推或延伸,借以预测下一段时间或以后若干年内可能达到的水平。

自回归(Autoregressive model/AR)模型

自回归模型(Autoregressive Model,简称AR模型)仅通过时间序列变量的自身历史观测值来反映有关因素对预测目标的影响和作用,不受模型变量相互独立的假设条件约束,所构成的模型可以消除普通回归预测方法中由于自变量选择、多重共线性等造成的困难,是最常见的平稳时间序列模型之一。

考虑一个单摆系统。

设xt为第t次摆动过程中的摆幅。根据物理原理,第 t 次的摆幅xt由前一次的摆幅xt-1决定,即有xt =a1xt-10考虑到空气振动的影响,我们往往假设Xt = a1xt-1 + εt
在这里插入图片描述

其中,随机干扰εt~N(0, σ2 ),称模型为一阶自回归模型。

更一般地,可以考虑序列值x可由前p个时刻的序列值及当前的噪声表出,即xt= a1xt-1 +…+ ajXt-j+…+ apXt-p + εt模型。在这里插入图片描述

其中,a;为参数, et为白噪声,则称该序列为 p阶自回归AR ( p)

示例

【例】已知存储在d盘的给定某只股票的交易数据(timeseries_data.csv) ,请利用自回归(AR)模型进行数据拟合,输出AR模型的阶数和拟合效果图
在这里插入图片描述

滑动平均(moving average model/MA)模型

滑动平均(moving average model/MA)模型也称移动平均模型,是用过去各个时期的随机干扰或预测误差的线性组合来表达当前预测值。相比之下, AR模型是通过分析研究历史数据对当前数据的影响进行建模。

q阶MA模型的公式为:xt = μ + at - θ1at-1 - … - θqat-q在这里插入图片描述

示例

【例】同样对于上述给定的股票交易数据,请利用滑动平均(MA)模型进行数据拟合,输出MA模型的拟合效果图。
在这里插入图片描述

自回归滑动平均(Autoregressive moving average model/ARMA) 模型

ARMA模型就是AR模型和MA模型混合。在更加复杂的情况下,一个ARMA过程可能是AR与MA过程、几个AR过程、AR与ARMA过程的迭加,也可能是测度误差较大的AR过程。

ARMA(p,q)模型公式:
在这里插入图片描述

由此可见, ARMA(p,0)模型就是AR( p )模型, ARMA(0,q)模型就是MA(q)模型。

示例

【例】同样对于上述给定的股票交易数据,请利用自回归滑动平均(ARMA)模型进行数据拟合,输出ARMA模型的拟合效果图。
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/11740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业微信hook接口协议,ipad协议http,发送链接的方式邀请成员进群

发送链接的方式邀请成员进群 参数名必选类型说明uuid是String每个实例的唯一标识,根据uuid操作具体企业微信 请求示例 {"uuid":"3240fde0-45e2-48c0-90e8-cb098d0ebe43","roomid":10696052955013729, "vids":[788130334…

Qt---文件系统

一、基本文件操作 1. QFile对文件进行读和写 QFile file( path 文件路径) 读: file.open(打开方式) QlODevice::readOnly 全部读取->file.readAll(),按行读->file.readLine(),atend()->判断是否读到文件尾 …

STM32存储左右互搏 USB接口FATS文件读写U盘

STM32存储左右互搏 USB接口FATS文件读写U盘 STM32的USB接口可以例化为Host主机从而对U盘进行操作。SD卡/MicroSD/TF卡也可以通过读卡器转换成U盘使用。这里介绍STM32CUBEIDE开发平台HAL库实现U盘FATS文件访问的例程。 USB接口介绍 常见的USB接口电路部分相似而有不同的连接器…

K8S -----二进制搭建 Kubernetes v1.20

目录 一、准备环境 1.1 修改主机名 1.2 关闭防火墙(三台一起,这里只展示master01) 1.3 在master添加hosts(依旧是三台一起) 1.4 调整内核参数并开启网桥模式 二、部署docker引擎 三、部署 etcd 集群 1.在mast…

15.JUC原子类

文章目录 JUC原子类1.JUC中的Atomic原子操作包1.1. 基本原子类(Basic Atomic Classes)1.2. 数组原子类(Array Atomic Classes)1.3. 引用原子类(Reference Atomic Classes)4. 字段更新原子类(Fie…

StackQueue+泛型简单理解

🍁 个人主页:爱编程的Tom💫 本篇博文收录专栏:Java专栏👉 目前其它专栏:c系列小游戏 c语言系列--万物的开始_ 🎉 欢迎 👍点赞✍评论⭐收藏💖三连支持一…

LeetCode2215找出两数组的不同

题目描述 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,请你返回一个长度为 2 的列表 answer ,其中:answer[0] 是 nums1 中所有 不 存在于 nums2 中的 不同 整数组成的列表。answer[1] 是 nums2 中所有 不 存在于 nums1 中的 不同 整数组…

Autosar架构

蓝框那种叫component,绿框的叫function cluster。 接口 有三种接口,RTE跟SWC之间链接的叫Autosar Interface,RTE跟BSW的Components链接是Standardized Interface,RTE跟BSW的services链接的是Standardized Autosar Interface。 St…

网络协议的分类

1.概要 网络协议可以分为三类: 封装协议路由协议功能类协议 2.分类说明 OSPF报文直接调用_ IP协议__协议进行封装,以目的地址_244.0.0.5 __发送到所有的OSPF路由器? 244.0.0.1 所有主机;244.0.0.2 所有路由器;244.0.0.6 指定…

Vue+springboot的批量删除功能

vue前台 <div style"margin-bottom: 10px"><el-button type"primary" plain click"handleAdd">新增</el-button><el-button click"delBatch" type"danger" plain style"margin-left: 5px"…

C语言例题41、八进制转换为十进制

#include<stdio.h>void main() {int x;printf("请输入一个8进制整数&#xff1a;");scanf("%o", &x);printf("转换成十进制后的整数为%d\n", x); }运行结果&#xff1a; 本章C语言经典例题合集&#xff1a;http://t.csdnimg.cn/FK0Qg…

Java入门基础学习笔记21——Scanner

在程序中接收用户通过键盘输入的数据&#xff1a; 需求&#xff1a; 请在程序中&#xff0c;提示用户通过键盘输入自己的姓名、年龄、并能在程序中收到这些信息&#xff0c;怎么解决&#xff1f; Java已经写好了实现程序&#xff0c;我们调用即可。 API&#xff1a;Applicat…

2024 年中国大学生程序设计竞赛全国邀请赛(郑州)暨第六届CCPC河南省大学生程序设计竞赛 problem K. 树上问题

//先找一个美丽的树&#xff0c;然后遍历树找节点,分析是否符合条件。 //画几个图&#xff0c;思考下。 #include<bits/stdc.h> using namespace std; #define int long long const int n1e611; int a,b,c[n],d,l,r,k,w,an; vector<int>t[n]; void dfs(int x,int…

什么是页分裂、页合并?

数据组织方式 在InnoDB存储引擎中&#xff0c;表数据都是根据主键顺序组织存放的&#xff0c;这种存储方式的表称为索引组织表(index organized table IOT)。 行数据&#xff0c;都是存储在聚集索引的叶子节点上的。而我们之前也讲解过InnoDB的逻辑结构图&#xff1a; 在I…

61、内蒙古工业大学、内蒙科学技术研究院:CBAM-CNN用于SSVEP - BCI的分类方法[脑机二区还是好发的]

前言&#xff1a; 之前写过一篇对CBAM模型改进的博客&#xff0c;在CBAM中引入了ECANet结构&#xff0c;对CBAM中的CAM、SAM模块逐一改进&#xff0c;并提出ECA-CBAM单链双链结构&#xff0c;我的这个小的想法已经被一些同学实现了&#xff0c;并进行了有效的验证&#xff0c;…

快速对比 找出2个名单不同之处

import pandas as pd# 读取两个Excel文件 df1 pd.read_excel(1.xlsx) df2 pd.read_excel(2.xlsx)# 检查两个DataFrame的列是否相同 if list(df1.columns) ! list(df2.columns):print("两个Excel文件的列不一致。")print("文件1的列&#xff1a;", df1.co…

AI智能体|手把手教你申请一个Kimi(Moonshot)的API KEY

大家好&#xff0c;我是无界生长。 今天分享一下如何申请一个Kimi(Moonshot)的API KEY&#xff0c;为后面Kimi(Moonshot)接入微信机器人做铺垫。学会了的话&#xff0c;欢迎分享转发&#xff01; 前提 拥有一个Kimi(Moonshot)账号 使用手机号注册即可&#xff0c;新用户可免费…

【线程创建】——三种方式➕多线程案例练习

02 线程创建 Thread , Runnable , Callable 三种创建方式 Thread class - 继承Thread类 (重点) Runnable接口 - 实现Runnable接口 (重点) Callable接口 - 实现Callable接口 (了解) Thread 类实现 它继承了老祖宗 Object java.lang.Object java.lang.Thread 它实现了 Runnab…

文本到语音的学习笔记:从Docker开始

1.docker 是什么意思&#xff1f; Docker 是一种开源的容器化平台&#xff0c;它允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中&#xff0c;然后可以在任何支持Docker的系统上运行这个应用&#xff0c;而不必担心环境差异导致的问题。 以下是Docker的一些关键特…

【go项目01_学习记录11】

操作数据库 1 文章列表2 删除文章 1 文章列表 &#xff08;1&#xff09;先保证文章已经有多篇&#xff0c;可以直接在数据库中添加&#xff0c;或者访问链接: localhost:3000/articles/create&#xff0c;增加几篇文章。 &#xff08;2&#xff09;之前设置好了articles.ind…