每年对季度数据进行线性插值-错误

问题描述

我有一些国家的年度时间序列数据,我想使用R或Python进行线性插值以使其每季度一次。到目前为止,关于stackoverflow的讨论都无法回答我的问题。

我一直遵循Jason brownlee记录良好的程序,即: https://machinelearningmastery.com/resample-interpolate-time-series-data-python/

对于我来说,它看起来像这样:

YEAR CH  FR   US
2005 200 700  500
2006 300 740  530
2007 450 760  600

根据代码,我根据需要重写了博客的示例:

def parser(x):
    return datetime.strptime('2005' + x,'%Y')

data = read_csv('data.csv',sep=';',header=0,parse_dates=[0],index_col=0,squeeze=True,date_parser = parser)

我收到很长的错误消息:

ValueError:仍保留未转换的数据:+ x

1)如果我不将+x添加到解析器定义中,则每个观察值的所有年份都相同。解析器怎么了?

2)关于如何同时处理多个时间序列(即CH,FR,US)的任何想法? 我不想为了这个准备步骤就将数据集拆散。

3)如果有人对R中的操作方法有任何建议,我会非常高兴,那里的所有程序似乎都很漫长,没有让我真正需要的东西。

解决方法

以下基本R解决方案使用approxfun创建一个插值函数,并使用年和季度调用它。插值方法是默认的method = "linear"

year_qtr <- function(x,years){
  f <- approxfun(years,x)
  n <- length(years)
  qtrs <- unlist(lapply(years[-n],function(y) y + (0:3)/4))
  qtrs <- c(qtrs,years[n])
  list(x = qtrs,y = f(qtrs))
}

year_qtr(df1$CH,df1$YEAR)
#$x
#[1] 2005.00 2005.25 2005.50 2005.75 2006.00 2006.25 2006.50
#[8] 2006.75 2007.00
#
#$y
#[1] 200.0 225.0 250.0 275.0 300.0 337.5 375.0 412.5 450.0

数据

df1 <- read.table(text = "
YEAR CH  FR   US
2005 200 700  500
2006 300 740  530
2007 450 760  600
",header = TRUE)