ARIMA时间序列建模过程——原理及python实现

合集下载

用python做时间序列预测九:ARIMA模型简介

用python做时间序列预测九:ARIMA模型简介

⽤python做时间序列预测九:ARIMA模型简介本篇介绍时间序列预测常⽤的ARIMA模型,通过了解本篇内容,将可以使⽤ARIMA预测⼀个时间序列。

什么是ARIMA?ARIMA是'Auto Regressive Integrated Moving Average'的简称。

ARIMA是⼀种基于时间序列历史值和历史值上的预测误差来对当前做预测的模型。

ARIMA整合了⾃回归项AR和滑动平均项MA。

ARIMA可以建模任何存在⼀定规律的⾮季节性时间序列。

如果时间序列具有季节性,则需要使⽤SARIMA(Seasonal ARIMA)建模,后续会介绍。

ARIMA模型参数ARIMA模型有三个超参数:p,d,qpAR(⾃回归)项的阶数。

需要事先设定好,表⽰y的当前值和前p个历史值有关。

d使序列平稳的最⼩差分阶数,⼀般是1阶。

⾮平稳序列可以通过差分来得到平稳序列,但是过度的差分,会导致时间序列失去⾃相关性,从⽽失去使⽤AR项的条件。

qMA(滑动平均)项的阶数。

需要事先设定好,表⽰y的当前值和前q个历史值AR预测误差有关。

实际是⽤历史值上的AR项预测误差来建⽴⼀个类似归回的模型。

ARIMA模型表⽰AR项表⽰⼀个p阶的⾃回归模型可以表⽰如下:c是常数项,εt是随机误差项。

对于⼀个AR(1)模型⽽⾔:当ϕ1=0 时,yt 相当于⽩噪声;当ϕ1=1 并且 c=0 时,yt 相当于随机游⾛模型;当ϕ1=1 并且 c≠0 时,yt 相当于带漂移的随机游⾛模型;当ϕ1<0 时,yt 倾向于在正负值之间上下浮动。

MA项表⽰⼀个q阶的预测误差回归模型可以表⽰如下:c是常数项,εt是随机误差项。

yt 可以看成是历史预测误差的加权移动平均值,q指定了历史预测误差的期数。

完整表⽰即: 被预测变量Yt = 常数+Y的p阶滞后的线性组合 + 预测误差的q阶滞后的线性组合ARIMA模型定阶看图定阶差分阶数d如果时间序列本⾝就是平稳的,就不需要差分,所以此时d=0。

ARIMA模型原理以及代码实现案例

ARIMA模型原理以及代码实现案例

ARIMA模型原理以及代码实现案例⼀、时间序列分析北京每年每个⽉旅客的⼈数,上海飞往北京每年的游客⼈数等类似这种顾客数、访问量、股价等都是时间序列数据。

这些数据会随着时间变化⽽变化。

时间序列数据的特点是数据会随时间的变化⽽变化。

随机过程的特征值有均值、⽅差、协⽅差等。

如果随机过程的特征随时间变化⽽变化,那么数据是⾮平稳的,相反,如果随机过程的特征随时间变化⽽不变化,则此过程是平稳的。

如图所⽰:⾮平稳时间序列分析时,若导致⾮平稳的原因是确定的,可以⽤的⽅法主要有趋势拟合模型、季节调整模型、移动平均、指数平滑等。

若导致⾮平稳的原因是随机的,⽅法主要有ARIMA,以及⾃回归条件异⽅差模型等。

⼆、ARIMA1、简介ARIMA通常⽤于需求预测和规划中。

可以⽤来对付随机过程的特征随着时间变化⽽⾮固定。

并且导致时间序列⾮平稳的原因是随机⽽⾮确定的。

不过,如果从⼀个⾮平稳的时间序列开始,⾸先需要做差分,直到得到⼀个平稳的序列。

模型的思想就是从历史的数据中学习到随时间变化的模式,学到了就⽤这个规律去预测未来。

ARIMA(p,d,q)d是差分的步长(差分的阶数指的是进⾏多少次差分。

⽐如步长为n的⼀阶差分diff(x) = f(x) - f(x - n),⽽⼆阶步长为n的差分: diff(x) = f(x) - f(x-n), diff(x-n) = f(x-n) - f(x - n - n), diff⼆阶差分(x - n) = diff(x) - diff(x-n)),⽤来得到平稳序列p为相应的⾃回归项q是移动平均项数2、⾃回归模型AR⾃回归模型描述当前值与历史值之间的关系,⽤变量⾃⾝的历史时间数据对⾃⾝进⾏预测。

⾃回归模型必须满⾜平稳性。

⾃回归模型需要先确定⼀个阶数p,表⽰⽤⼏期的历史值来预测当前值。

p阶⾃回归模型可以表⽰为:y t是当前值,u是常数项,p是阶数,r是⾃相关系数,e是误差AR的限制:⾃回归模型是⾃⾝的数据进⾏预测必须具有平稳性必须具有相关性如果⾃相关系数⼩⾬0.5,则不宜采⽤⾃回归只适⽤于预测与⾃⾝前期相关的现象3、移动平均模型MA移动平均模型关注的⾃回归模型中的误差项的累加,q阶⾃回归过程的公式定义如下:移动平均模型能有效地消除预测中的随机波动4、⾃回归移动平均模型ARMA⾃回归模型AR和移动平均模型MA模型相结合,我们就得到了⾃回归移动平均模型ARMA(p,q),计算公式如下:5、p、q的确定 (1) (2)结合最终的预测误差来确定p、q的阶数,在相同的预测误差情况下,根据奥斯卡姆剃⼑准则,模型越⼩越好。

Python时间序列处理之ARIMA模型的使用讲解

Python时间序列处理之ARIMA模型的使用讲解

Python时间序列处理之ARIMA模型的使⽤讲解ARIMA模型ARIMA模型的全称是⾃回归移动平均模型,是⽤来预测时间序列的⼀种常⽤的统计模型,⼀般记作ARIMA(p,d,q)。

ARIMA的适应情况ARIMA模型相对来说⽐较简单易⽤。

在应⽤ARIMA模型时,要保证以下⼏点:时间序列数据是相对稳定的,总体基本不存在⼀定的上升或者下降趋势,如果不稳定可以通过差分的⽅式来使其变稳定。

⾮线性关系处理不好,只能处理线性关系判断时序数据稳定基本判断⽅法:稳定的数据,总体上是没有上升和下降的趋势的,是没有周期性的,⽅差趋向于⼀个稳定的值。

ARIMA数学表达ARIMA(p,d,q),其中p是数据本⾝的滞后数,是AR模型即⾃回归模型中的参数。

d是时间序列数据需要⼏次差分才能得到稳定的数据。

q是预测误差的滞后数,是MA模型即滑动平均模型中的参数。

a) p参数与AR模型AR模型描述的是当前值与历史值之间的关系,滞后p阶的AR模型可以表⽰为:其中u是常数,et代表误差。

b) q参数与MA模型MA模型描述的是当前值与⾃回归部分的误差累计的关系,滞后q阶的MA模型可以表⽰为:其中u是常数,et代表误差。

c) d参数与差分⼀阶差分:⼆阶差分:d) ARIMA = AR+MAARIMA模型使⽤步骤获取时间序列数据观测数据是否为平稳的,否则进⾏差分,化为平稳的时序数据,确定d通过观察⾃相关系数ACF与偏⾃相关系数PACF确定q和p得到p,d,q后使⽤ARIMA(p,d,q)进⾏训练预测Python调⽤ARIMA#差分处理diff_series = diff_series.diff(1)#⼀阶diff_series2 = diff_series.diff(1)#⼆阶#ACF与PACF#从scipy导⼊包from scipy import statsimport statsmodels.api as sm#画出acf和pacfsm.graphics.tsa.plot_acf(diff_series)sm.graphics.tsa.plot_pacf(diff_series)#arima模型from statsmodels.tsa.arima_model import ARIMAmodel = ARIMA(train_data,order=(p,d,q),freq='')#freq是频率,根据数据填写arima = model.fit()#训练print(arima)pred = arima.predict(start='',end='')#预测总结以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,谢谢⼤家对的⽀持。

Python数据分析实验 实验十三 ARIMA时间序列分析

Python数据分析实验 实验十三 ARIMA时间序列分析

实验十三ARIMA时间序列分析学院:数计学院专业:统计学年级:2017 班:姓名:学号:【实验目的】1. 了解ARIMA相关概念;2. 掌握ARIMA模型的构建与应用;3. 学会在python中构建ARIMA模型【实验内容】一、时间序列的模拟1.平稳时间序列(1)随机游走序列(2)平稳时间序列2.非平稳序列模拟(1)布朗运动序列(2)非平稳时间序列3.时间序列分析模型(1)AR模型(自回归模型)模拟y1序列为AR(1)模拟的数据序列。

(2)MA模型(移动平均模型)模拟y1序列为MA(1)模拟的数据序列。

(3)ARMA模型(4)ARIMA模型ARIMA模型根据原序列是否平稳以及回归中所含部分的不同,包括移动平均过程(MA)、自回归过程(AR)、自回归移动平均过程(ARMA)及差分自回归移动平均过程(ARIMA)。

np.diff实现差分运算。

y4是一非平稳序列,要利用ARIMA模型处理则先转换为平稳系列,一般采用差分法。

dy4为一阶差分结果序列,从图初步可以判断该序列为平稳序列。

对比原序列与差分后的序列,可以看出一阶差分后数据趋于平稳。

4.ARMA模型的构建(1)自相关性检验:MA阶数确定对y2进行自相关性检验:自相关决定MA的阶数,从图可以看出,MA模型为1阶,与y2为MA(1)的模拟一致。

(2)偏自相关性检验:AR阶数确定对y1进行偏自相关性检验:偏自相关图可以看出,AR模型为1阶,与y1是AR(1)模拟一致。

(3)ARMA阶数的确定从上述acf()和pacf()图示中可以看到,MA阶q=4,AR阶p=2,即应该是ARMA模型。

但很多时候往往用图示法得到的p和q不可靠,因此用信息量准则。

根据信息量最小准则,对y1序列应该建立ARMA(1,0).根据信息量最小准则,对y1序列应该建立ARMA(0,1).根据信息量BIC最小,y3序列可选择构建ARMA(1,1),与我们的模拟相一致。

(4)参数的估计与检验序列y1的ARMA模型:y1序列的估计和模拟模型AR(1):y(t)=0.8y(t-1)+u(t)基本吻合,常数项不显著。

时序预测中的ARIMA模型详解(Ⅰ)

时序预测中的ARIMA模型详解(Ⅰ)

时序预测中的ARIMA模型详解时序预测是一种重要的统计分析方法,通过对历史数据的分析和预测,可以为未来的决策提供有力的支持。

自动回归综合移动平均模型(ARIMA)是一种常用的时序预测方法,它结合了自回归、差分和移动平均的特点,能够对非平稳的时序数据进行建模和预测。

本文将详细介绍ARIMA模型的原理、应用和参数选择方法。

1. ARIMA模型的原理ARIMA模型是由自回归模型(AR)和移动平均模型(MA)组成的,其中AR模型考虑了时序数据自身的滞后项的影响,而MA模型考虑了误差项的滞后项的影响。

ARIMA模型还引入了差分(I)的概念,用来处理非平稳的时序数据。

ARIMA(p, d, q)模型包括了自回归阶数p、差分次数d和移动平均阶数q三个参数,其中p和q是非负整数,d是非负整数或零。

ARIMA模型的原理可以用数学公式表示为:Yt = c + φ1Yt-1 + φ2Yt-2 + ... + φpYt-p + εt - θ1εt-1 -θ2εt-2 - ... - θqεt-q其中Yt表示时序数据的值,c表示常数项,φ1, φ2, ..., φp和θ1,θ2, ..., θq分别表示自回归和移动平均的系数,εt表示误差项。

2. ARIMA模型的应用ARIMA模型广泛应用于金融、经济、气象、环境等领域的时序数据预测中。

例如,在金融领域,ARIMA模型可以用来预测股票价格、汇率等金融指标的走势;在经济领域,ARIMA模型可以用来预测国内生产总值(GDP)、消费指数等经济指标的变化;在气象领域,ARIMA模型可以用来预测气温、降雨量等气象变量的变化;在环境领域,ARIMA模型可以用来预测空气质量、水质等环境指标的变化。

3. ARIMA模型的参数选择ARIMA模型的参数选择是一个重要的问题,通常可以通过自相关函数(ACF)和偏自相关函数(PACF)来进行参数的初步选择。

首先对时序数据进行差分,直到得到平稳的数据;然后通过ACF和PACF的图形分析,找到合适的p和q值,最后通过模型的拟合度和残差的自相关性来选择合适的参数。

arima模型的建模步骤带例题

arima模型的建模步骤带例题

一、概述ARIMA模型是一种常用的时间序列分析方法,它可以用来对未来的趋势进行预测。

本文将介绍ARIMA模型的建模步骤,并通过一个例题来说明具体的操作过程。

二、ARIMA模型的概述ARIMA模型是一种广泛应用于时间序列分析的统计模型,它可以对数据的趋势和周期性进行建模,并用来进行未来的预测。

ARIMA模型的全称是自回归移动平均模型,它包含了自回归(AR)和移动平均(MA)两个部分,以及差分(I)的操作。

ARIMA模型的一般形式可以表示为ARIMA(p, d, q),其中p代表自回归阶数,q代表移动平均阶数,d代表差分阶数。

三、ARIMA模型的建模步骤1. 数据的平稳性检验在建立ARIMA模型之前,首先需要对所处理的时间序列数据进行平稳性检验。

一般来说,如果数据是非平稳的,就需要进行差分操作,直到数据变得平稳为止。

2. 确定ARIMA模型的阶数确定ARIMA模型的阶数是建模过程中非常关键的一步。

我们可以使用自相关图(ACF)和偏自相关图(PACF)来帮助确定模型的阶数。

在自相关图中,我们可以通过观察截尾与否来确定移动平均模型的阶数,而在偏相关图中,我们可以通过观察第一个截尾的位置来确定自回归模型的阶数。

3. 拟合ARIMA模型在确定了ARIMA模型的阶数之后,接下来就是拟合模型。

我们可以利用著名的统计软件R或Python来进行ARIMA模型的拟合和参数估计。

4. 模型诊断在拟合了ARIMA模型之后,我们需要对模型进行诊断,检验其残差序列是否符合白噪声的特性。

我们可以利用Ljung-Box检验来验证模型的拟合效果。

5. 模型预测利用已经确定的ARIMA模型对未来的数据进行预测。

我们可以得到预测的置信区间,从而对预测结果的可靠性进行评估。

四、例题假设有一组时间序列数据如下:[10, 12, 15, 18, 22, 20, 17, 14, 12, 10],现在我们要使用ARIMA模型对未来的趋势进行预测。

ARIMA算法解析与Python实现

ARIMA算法解析与Python实现

ARIMA算法解析与Python实现ARIMA(差分自回归移动平均)是一种用于时间序列预测和分析的经典算法。

ARIMA模型是基于时间序列历史数据的统计模型,可以分析数据的趋势、季节性和随机性,并作出未来一段时间的预测。

在本文中,我们将对ARIMA算法进行解析,并使用Python实现。

ARIMA模型由以下三个部分组成:自回归(AR)、差分(I)和移动平均(MA)。

分别对应ARIMA模型的参数p、d、q。

其中,p表示自回归阶数,d表示差分阶数,q表示移动平均阶数。

这三个参数的选择通常通过观察ACF(自相关函数)和PACF(偏自相关函数)进行。

1.数据预处理:对时间序列数据进行平稳性检验。

如果时间序列不是平稳的,需要进行差分操作,直到得到平稳的时间序列。

2.模型选择:通过观察ACF和PACF的图形,选择合适的p、d、q参数,以便建立ARIMA模型。

3.模型训练:使用选定的p、d、q参数建立ARIMA模型,对数据进行训练。

4.模型评估:使用训练好的ARIMA模型对已知时间序列进行预测,并计算预测误差。

5.模型优化:根据预测误差对ARIMA模型进行优化,不断调整p、d、q参数,直到得到最优的模型。

在Python中,我们可以使用statsmodels库来进行ARIMA建模和预测。

以下是一个简单的示例:```pythonimport pandas as pdimport numpy as npimport statsmodels.api as sm#导入数据data = pd.read_csv('data.csv')#创建ARIMA模型model = sm.tsa.ARIMA(data, order=(p, d, q))#拟合模型result = model.fit#预测未来一段时间的数据forecast = result.predict(start=len(data), end=len(data)+n, dynamic=True)```其中,data为时间序列数据,p、d、q为ARIMA模型的参数。

python arima应用实例

python arima应用实例

标题:Python ARIMA 应用实例一、简介1.1 ARIMA 模型概述自回归综合移动平均模型(Autoregressive Integrated Moving Average,ARIMA)是一种用于时间序列预测和分析的经典统计模型。

ARIMA 模型能够较好地拟合时间序列数据,并对未来的走势进行预测,因此在金融、经济、气象等领域被广泛应用。

1.2 Python 中的 ARIMA 实现Python 提供了丰富的工具包,如 statsmodels 和 pmdarima,用于实现 ARIMA 模型。

这些工具包能够帮助我们进行时间序列分析,提供了方便的函数和方法来拟合 ARIMA 模型并进行预测。

二、实例分析2.1 数据准备我们以股票价格时间序列数据为例,演示如何使用 Python 中的ARIMA 模型进行分析和预测。

我们需要准备相关的股票价格数据,可以从各大财经全球信息站或数据接口获取。

2.2 模型拟合接下来,我们使用Python 中的工具包对股票价格时间序列进行拟合。

通过选择合适的 ARIMA 模型阶数(p, d, q),并使用最小二乘法进行参数估计,可以得到拟合后的模型。

2.3 模型诊断拟合完成后,需要对模型进行诊断,检验是否满足模型假设和条件。

我们可以通过观察残差序列、自相关性和偏自相关性等统计指标,来评估模型的拟合效果。

2.4 预测应用我们使用拟合好的 ARIMA 模型进行未来股票价格的预测。

通过将历史数据传入模型,并调用预测函数,可以得到未来一段时间内股票价格的预测值。

三、实践及效果3.1 实际案例我们可以选择一只具有代表性的股票,如腾讯、阿里巴巴等,进行实际应用。

通过历史数据的拟合和预测,可以观察模型的效果和准确性,评估其在实际应用中的表现。

3.2 效果评估在实际应用中,我们可以使用一些指标来评估 ARIMA 模型的预测效果,如均方根误差(RMSE)、平均绝对误差(MAE)等。

这些指标可以帮助我们了解模型的预测精度和稳定性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
result_arima = arima_mod.fit()
result_arima_pre = result_arima.predict(start='2011', end='2011')
print(result_arma_pre)
print(result_arima_pre)
如果对序列使用了差分,最后则需要对结果进行还原操作:
from statsmodels.graphics.tsaplots import acf,pacf,plot_acf,plot_pacf
from statsmodels.tsa.arima_model import ARMA
from statsmodels.tsa.arima_model import ARIMA
time_series_.index = pd.Index(sm.tsa.datetools.dates_from_range('1978','2010'))
time_series_.plot(figsize=(12,8))
plt.show()
3.1异常值及缺失值处理
异常值一般采用移动中位数方法:
frompandasimportrolling_median
output['value']['Critical Value(1%)'] = t[4]['1%']
output['value']['Critical Value(5%)'] = t[4]['5%']
output['value']['Critical Value(10%)'] = t[4]['10%']
model = ARMA(data_ts, order=(p,q))
try:
results_ARMA = model.fit()
except:
continue
bic = results_ARMA.bic
if bic < init_bic:
init_p = p
init_q = q
init_bic = bic
p--代表预测模型中采用的时序数据本身的滞后数(lags) ,也叫做AR/Auto-Regressive项;
d--代表时序数据需要进行几阶差分化,才是稳定的,也叫Integrated项;
q--代表预测模型中采用的预测误差的滞后数(lags),也叫做MA/Moving Average项。
差分:假设y表示t时刻的Y的差分。
print(output)
###————————————————-——result—————————————————--———#####
value
Test Statistic Value 0.807369
p-value 0.991754
Lags Used 1
Number of Observations Used 31
# realI.append(str(time_series_log.index[i]).split(' ')[0].split('-')[0])
# preI.append(str(time_series_log.index[i]).split(' ')[0].split('-')[0])
# for i in range(len(time_series)):
return init_bic, init_p, init_q
3.5模型拟合
b,p,q = proper_model(time_series, 10)
arima_mod = ARIMA(time_series_,order=(p,0,q))
arma_mod = ARMA(time_series_,order=(p,q))
# print(result_arma_pre)
# v0 = time_series_log[0]
# realV = []
# realI = []
# preV = []
# preI = []
# realV.append(v0)
# preV.append(v0)
# for i in range(len(time_series_log)):
output['value']['Test Statistic Value'] = t[0]
output['value']['p-value'] = t[1]
output['value']['Lags Used'] = t[2]
output['value']['Number of Observations Used'] = t[3]
自相关系数ACF
偏相关系数PACF
模型选择
拖尾
p阶截尾
AR(p)
q阶截尾
拖尾
MA(q)
p阶拖尾
q阶拖尾
ARMA(p, q)
同时,还可利用aic、bic统计量自动确定。
plot_acf(time_series)#acf图
plot_pacf(time_series)#pacf图
plt.show()
#bic最小化选择最优参数,aic同理
from statsmodels.stats.diagnostic importacorr_ljungbox
p_value = acorr_ljungbox(result_arima.resid.values.squeeze(), lags=5)[1]
print(p_value)
3.6模型预测
result_arma_pre = result_arma.predict(start='2011', end='2011')
if d=0, yt=Yt, if d=1, yt=Yt−Yt−1, if d=2, yt=(Yt−Yt−1)−(Yt−1−Yt−2)=Yt−2Yt−1+Yt−2
ARIMA的预测模型可以表示为:
Y的预测值=白噪音+1个或多个时刻的加权+一个或多个时刻的预测误差。
假设p,q,d已知,
ARIMA用数学形式表示为:
ytˆ=μ+ϕ1∗yt−1+...+ϕp∗yt−p+θ1∗et−1+...+θq∗et−q
其中,ϕ表示AR的系数,θ表示MA的系数
3.Python建模
##构
import matplotlib.pyplot as plt
import statsmodels.api as sm
threshold =3#指的是判定一个点为异常的阈值
df['pandas'] = rolling_median(df['u'], window=3, center=True).fillna(method='bfill').fillna(method='ffill')
#df['u']是原始数据,df['pandas']是求移动中位数后的结果,window指的是移动平均的窗口宽度
result_arma = arma_mod.fit()
3.6模型检测
假设检验,判断(诊断)残差序列是否为白噪声序列从而确定模型优劣。Ljung-Box test是对randomness的检验,或者说是对时间序列是否存在滞后相关的一种统计检验。对于滞后相关的检验,我们常常采用的方法还包括计算ACF和PCAF并观察其图像,但是无论是ACF还是PACF都仅仅考虑是否存在某一特定滞后阶数的相关。LB检验则是基于一系列滞后阶数,判断序列总体的相关性或者说随机性是否存在。给定置信值a(0.05、0.01...),如果p值大于a值则接受原假定,即序列为白噪声序列,否认序列存在相关性。
# v = v0+time_series[i]
Critical Value(1%) -3.66143
Critical Value(5%) -2.96053
Critical Value(10%) -2.61932
3.3不平稳处理
1)对数处理。对数处理可以减小数据的波动;
time_series_log = np.log(time_series_)
time_series_log.plot(figsize=(8,6))
1. ARIMA的优缺点
优点:模型十分简单,只需要内生变量而不需要借助其他外生变量。
缺点:要求时序数据是稳定的(stationary),或者是通过差分化(differencing)后是稳定的;本质上只能捕捉线性关系,而不能捕捉非线性关系。
2. ARIMA的参数与数学形式
ARIMA模型有三个参数:p,d,q。
#序列化
time_series_ = pd.Series([151.0, 188.46, 199.38, 219.75, 241.55, 262.58, 328.22, 396.26, 442.04, 517.77, 626.52, 717.08, 824.38, 913.38, 1088.39, 1325.83, 1700.92, 2109.38, 2499.77, 2856.47, 3114.02, 3229.29, 3545.39, 3880.53, 4212.82, 4757.45, 5633.24, 6590.19, 7617.47, 9333.4, 11328.92, 12961.1, 15967.61])
相关文档
最新文档