线性插值每年到每季度的数据 - 错误
Interpolating yearly to quarterly Data linearly - error
我有许多国家/地区的年度时间序列数据,我想使用 R 或 Python 进行线性插值以使其成为季度数据。到目前为止在 Whosebug 上讨论的内容没有回答我的问题。
我一直在遵循 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)
我有许多国家/地区的年度时间序列数据,我想使用 R 或 Python 进行线性插值以使其成为季度数据。到目前为止在 Whosebug 上讨论的内容没有回答我的问题。
我一直在遵循 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)