Python实现数据变频、线性插值
Excel没有数据变频的函数,但是用python pandas库可以简单实现,这里记录一下过程。
数据的变频可以使用pandas.resample()实现,具体见中文文档,非常给力!!比如,我有一个季度的时序数据,想增加频率,将其扩充为月度,那么resample可以把季度的日期变成月度的;比如,我想将季度数据降频,变成年度数据,也可以用resample实现。
增加频率+插值的一个例子
1. 原始数据及目的
下图是三个指标的月度数据,我的目的是变频为周度数据,中间的值用线性插值进行填充。
2. 读取数据并设置日期index
// An highlighted block
import pandas as pd
# 只读取了后三列数据,自定义设置index
df = pd.read_excel('./金价预测指标.xlsx',sheet_name = 1)
df.index = pd.period_range('06/02/2020',freq='M',periods=13)
# output
Out[1]:
美元指数 利率 通胀指数
2020-06 97.483536 0.640 1.30
2020-07 97.436819 1.410 1.20
2020-08 97.380922 0.770 1.15
2020-09 97.325298 0.807 1.10
2020-10 97.278210 0.844 1.00
2020-11 97.228437 0.880 1.00
2020-12 97.177268 0.913 1.00
2021-01 97.093978 0.946 1.00
2021-02 97.040154 0.980 1.10
2021-03 96.993513 1.010 1.15
2021-04 96.936873 1.040 1.18
2021-05 96.889049 1.070 1.20
2021-06 96.831799 1.100 1.30
- 变频
可以看到,用resample增加频率,可以自动扩充日期,但是中间的值需要自己另行填充。
df = df.resample('W',convention='start').asfreq()
# output
Out[2]:
美元指数 利率 通胀指数
2020-06-01/2020-06-07 97.483536 0.640 1.30
2020-06-08/2020-06-14 NaN NaN NaN
2020-06-15/2020-06-21 NaN NaN NaN
2020-06-22/2020-06-28 NaN NaN NaN
2020-06-29/2020-07-05 97.436819 1.410 1.20
2020-07-06/2020-07-12 NaN NaN NaN
2020-07-13/2020-07-19 NaN NaN NaN
2020-07-20/2020-07-26 NaN NaN NaN
2020-07-27/2020-08-02 97.380922 0.770 1.15
2020-08-03/2020-08-09 NaN NaN NaN
2020-08-10/2020-08-16 NaN NaN NaN
2020-08-17/2020-08-23 NaN NaN NaN
2020-08-24/2020-08-30 NaN NaN NaN
2020-08-31/2020-09-06 97.325298 0.807 1.10
2020-09-07/2020