时间序列
- 前言
- 一、Datetime 模块
- 常用函数和数据结构的详细解释
- datetime模块
- 示例一
- 示例二
- 二、时间运算
- 示例一
- 示例二
- 示例三
- 三、时间序列分析
- 自回归(Autoregressive model/AR)模型
- 示例
- 滑动平均(moving average model/MA)模型
- 示例
- 自回归滑动平均(Autoregressive moving average model/ARMA) 模型
- 示例
前言
时间序列是按照时间顺序排列的一系列随时间变化而变化的数据点或观测值。时间序列可以是离散的,例如每月的销售数据,也可以是连续的,例如气温和股票价格等。时间序列常用于预测和分析未来的趋势,例如经济增长、股票走势、天气变化等。
时间序列分析是数据分析中的重要部分,它涉及到对随时间变化的数据进行研究,以揭示其内在规律、趋势和周期性变化。Python作为一种强大的编程语言,拥有众多的数据处理和可视化库,如pandas
、numpy
、matplotlib
和seaborn
等,这些库在处理时间序列数据时表现出色。
首先,我们需要明确什么是时间序列数据。时间序列数据是按照时间顺序排列的一系列数据点,这些数据点可以是任何类型的测量值,如股票价格、气温、销售额等。时间序列分析的目标是通过这些数据点来理解和预测未来的趋势和模式。
在Python中,pandas
库是处理时间序列数据的首选工具。pandas
提供了DataFrame
数据结构,可以轻松地导入、清洗、转换和分析时间序列数据。例如,我们可以使用pandas
的read_csv
函数导入CSV
格式的时间序列数据,然后使用to_datetime
函数将日期列转换为pandas
的DateTimeIndex
格式,这样可以更方便地进行时间序列分析。
一旦数据被导入并准备好,我们就可以使用pandas
提供的各种函数来进行时间序列分析。例如,我们可以使用rolling
函数来计算移动平均或移动标准差,以平滑数据并消除短期噪声。我们还可以使用diff
函数来计算数据的差分,以揭示数据的趋势和周期性变化。
除了基本的统计分析,时间序列分析还包括更高级的技术,如ARIMA
模型、指数平滑和傅里叶分析等。这些技术可以帮助我们更深入地理解数据的内在规律,并用于预测未来的趋势。在Python中,我们可以使用statsmodels
库来实现这些高级技术。
最后,可视化是时间序列分析的重要组成部分。通过绘制时间序列图、自相关图、部分自相关图等图表,我们可以直观地了解数据的趋势、周期性和季节性变化。在Python中,matplotlib
和seaborn
库提供了丰富的绘图功能,可以帮助我们创建高质量的可视化图表。
一、Datetime 模块
Python标准库中包含了datetime
模块,该模块提供了非常强大的功能来处理日期和时间。在Pandas
中,时间序列数据可以通过多种方式表示,包括Python的原生datetime
对象、字符串、整数等。
Datetime
模块提供了将这些不同的时间表示方式转换为Pandas
中的Datetime
类型的函数,以及一系列常用的时间序列操作函数。
常用函数和数据结构的详细解释
以下是Datetime
模块的一些常用函数和数据结构的详细解释:
-
to_datetime
函数:将字符串或整数等转换为Pandas
中的Datetime
类型。它能够自动推断日期的格式,并将其转换为Pandas
中的Datetime
类型。例如,可以通过调用to_datetime
函数将字符串"2021-01-01
"转换为Datetime
对象。 -
DatetimeIndex
类:表示由Datetime
类型组成的时间序列索引。它可以用于创建一个Datetime
类型的索引,用于对时间序列数据进行索引和切片操作。 -
Timestamp
类:表示一个具体的时间点。它是Datetime
模块中最常用的数据结构之一,可以用于表示一个具体的日期和时间。例如,可以用Timestamp
类表示"2021-01-01 12:00:00"这个特定的时间点。 -
DateOffset
类:表示一个时间偏移量,用于对时间进行增减操作。它可以与Datetime
类型的对象进行加减运算,用于计算相对于一个特定时间点的偏移量。例如,可以通过将一个DateOffset
对象加到一个Datetime
对象上,得到一个新的Datetime
对象。 -
Period
类:表示一个时间段。它是Datetime
模块中用于表示时间段的数据结构之一,可以表示一个时间段的开始和结束时间。例如,可以用Period
类表示"2021-01-01
"到"2021-01-31
"这个时间段。
除了以上介绍的函数和数据结构之外,Datetime
模块还提供了一系列的时间序列操作函数,包括日期的加减运算、日期的比较判断、日期的格式化输出等。通过使用这些函数,可以方便地进行时间序列数据的处理和分析。
datetime模块
Python的datetime
模块是Python标准库中用于处理日期和时间的模块。它提供了一系列的函数和数据结构,用于操作日期和时间。
datetime
模块中的主要类和函数包括:
-
datetime
类:表示一个具体的日期和时间。这个类提供了许多方法来操作日期和时间,如获取年、月、日、时、分、秒等。 -
date
类:表示一个日期。这个类只包含年、月、日,不包含时间信息。 -
time
类:表示一个时间。这个类只包含时、分、秒,不包含日期信息。 -
timedelta
类:表示两个日期或时间之间的时间差。可以对两个日期或时间进行加减运算,得到它们之间的时间差。例如,可以计算两个日期之间相隔多少天。 -
strftime
函数:用于将datetime
对象格式化为字符串。可以根据指定的格式将日期和时间对象转换成字符串,如将日期格式化为"YYYY-MM-DD
"或将时间格式化为"HH:MM:SS
"等。 -
strptime
函数:用于将字符串解析为datetime
对象。可以根据指定的格式将字符串解析为datetime
对象,如将"2021-01-01
"解析为日期对象。 -
now
函数:返回当前的日期和时间。可以使用now
函数获取当前的日期和时间信息。 -
timedelta
函数:用于创建一个时间差。可以使用timedelta
函数创建一个指定时间差的timedelta
对象,如创建一个表示5天的时间差对象。
datetime
模块提供了一系列的函数和数据结构来处理日期和时间,可以方便地进行日期和时间的计算、格式化和解析等操作。它在数据分析、日志分析等领域都有广泛的应用,是Python中处理日期和时间的重要工具。
总结:datatime
模块是在time
模块的基础上做了封装,提供了更多更好用的类,常用的类有date
、time
、datetime
, timedelta
, tzinfo
。
date
类主要用于处理年、月、日的日期数据;time
类主要用于处理时、分、秒的时间数据;datetime
类是date
类和time
类的综合,可以处理年、月、日、时、分、秒;timedelta
类主要用于做时间的加减运算;
方法(属性) | 说明 |
---|---|
today() | 返回当地的日期 |
fromtimestamp(timestamp) | 根据给定的时间戮,返回本地日期 |
min | date 所能表示的最小日期 |
max | date 所能表示的最大日期 |
import datetime
timestamp = 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
类对象,其中包含了日期元素,如年、月、日,但不包含时间元素,比如时分、秒。最后,可以使用year
、month
和day
来捕获具体的日期元素。
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
类对象,其中包含了日期元素和时间元素,如年、月、日、时、分、秒。最后,可以使用year
、month
和day
来捕获具体的日期元素,通过hour
、minute
和second
来捕获具体的时间元素。
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模型的拟合效果图。