如何解决每年对季度数据进行线性插值-错误
我有一些国家的年度时间序列数据,我想使用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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。