我的CSV值为
ref_date;wings;airfoil;turbines
2015-03-31;123,22;22,77;99,0
2015-04-30;123,22;28,77;99,0
2015-05-31;123,22;22,177;02,0
2015-06-30;56,288;22,77;99,0
我读入数据框,并使用
将其转换为时间序列df_agg = aggregate(df$wings, by=list(date=df$ref_date), FUN=mean)
df_agg['date'] = as.Date(df_agg[['date']], format='%Y-%m-%d')
tt = xts(df_agg[,c('x')], order.by=df_agg$date)
现在我有tt
个xts
个对象。要使用forecast
包,我必须将其转换为ts
对象,因此我使用zoo
:
pred = forecast(zoo(tt))
df_pred = as.data.frame(pred)
但是,为了能够得到一个带有日期而不是一系列数字的列的结果,我必须将其转换回来
zoo(df_pred, as.Date(as.numeric(rownames(df_pred))))
现在我有一个像
的结果 Forecast Lo 80 Hi 80 Lo 95 Hi 95
2015-07-30 12 10 15 11 14
2015-08-31 13.4 11 15.4 11.2 13
有没有办法完成同样的工作而不必再次在数据框,xts,zoo,ts和zoo之间来回移动?
在Python中,这就像
from statsmodels.api import sm
df = pd.read_csv(file_csv)
df.index = pd.to_datetime(df.date, format='%Y-%m-%d')
y_pred = sm.ARIMA(df)
答案 0 :(得分:4)
1)zoo 预测包的开发版本为as.ts.forecast
,动物园的开发版本(成为动物园版本1.8.0)具有增强的as.zoo.ts
默认情况下,对于频率为4和12的ts系列应用yearmon / yearqtr。这些将允许更紧凑地编写问题的代码。由于预测包没有明确支持非ts时间序列,因此定义了一个简单的单行动物园方法进行预测。然后使用read.zoo
读入数据。为了使用最后的注释中的数据来保持这种自包含,我们使用text=Lines
,但实际上它将替换为myfile.dat
之类的内容。 read.zoo
命令也将yearmon类应用于索引并使用mean聚合它。最后运行forecast
,然后将输出转换为zoo类。整个序列只涉及一次转换,唯一需要的原因是预测只支持ts。
library(forecast)
library(zoo)
as.zoo.forecast <- function(x, ...) as.zoo(as.ts(x))
z <- read.zoo(text = Lines, header = TRUE, sep = ";", dec = ",",
FUN = as.yearmon, aggregate = mean)
f <- forecast(z$wings)
as.zoo(f)
在发布新的软件包版本之前,您可以在上述代码之前运行以下代码。在发布新的预测和动物园软件包之后,仅上面的代码就足够了。
# taken from development verison of forecast package
as.ts.forecast <- function(x, ...){
df <- ts(as.matrix(forecast:::as.data.frame.forecast(x)))
tsp(df) <- tsp(x$mean)
return(df)
}
# can use this until devel version of zoo released
as.zoo.ts <- function(x, ...) {
z <- zoo:::as.zoo.ts(x)
if (frequency(z) == 4) time(z) <- as.yearqtr(time(z))
if (frequency(z) == 12) time(z) <- as.yearmon(time(z))
z
}
2)ts 另一种可能性是使用"ts"
类只使用zoo来读取数据。使用上面的z
和as.ts.forecast
(如上所述,一旦预测pkg的devel版本变为当前版本,就可以省略它:
tt <- as.ts(z)
f <- forecast(tt[, "wings"])
as.ts(f)
注意:上面我们使用了这个输入:
Lines <- "ref_date;wings;airfoil;turbines
2015-03-31;123,22;22,77;99,0
2015-04-30;123,22;28,77;99,0
2015-05-31;123,22;22,177;02,0
2015-06-30;56,288;22,77;99,0"