序列数据平滑(SG平滑、滑动平均平滑)

  经过 序列数据缺失值插补(线性插值) 处理,时间序列数据已经完整。如果需要,序列数据时序平滑对时序分析有重要帮助。其中以滑动平均平滑和SavitzkyGolay(SG)平滑较为常用。

  本文以缺失值插补后的时序 MODIS 数据为输入数据,介绍基于 gma 库 的这两种数据平滑方法的实现方式。

目前,gma 提供了 SavitzkyGolay (SG平滑)和 MovingAverage(滑动平均)两种数据平滑方式。

安装 gma: pip install gma

1 读取数据

import pandas as pd
# 读取原始数据
InFile = r'D:\xxxx\NDVI.xlsx'
Data = pd.read_excel(InFile)[['NDVI']]
print(Data.values)
[0.223985  0.223985  0.223985  0.233396  0.227466  0.229259  0.230363
 0.231399  0.22672   0.225723  0.224726  0.212029  0.236226  0.229548
 0.236484  0.248894  0.266551  0.275269  0.274135  0.270156  0.3743545
 0.478553  0.590506  0.721067  0.7600655 0.799064  0.742108  0.804224
 0.83514   0.777888  0.734315  0.700915  0.602857  0.553114  0.397294
 0.318083  0.289676  0.253421  0.25891   0.24601   0.23812   0.238319
 0.238759  0.232261  0.253731  0.236231 ]

2 时序NDVI数据平滑

import gma
# 初始化平滑参数------平滑窗口为5,平滑次数为2
SMD = gma.math.Smooth(Data['NDVI'], 5, 2)
# SG 平滑,平滑多项式阶数为2,过滤器的样本间距为 1,边缘值处理方法为 'interp'。并将平滑结果添加到 ‘SG’ 列。
Data['SG'] = SMD.SavitzkyGolay(Polyorder=2, Delta=1, Mode='interp')
# 滑动平均平滑。并将平滑结果添加到 ‘ME’ 列。
Data['ME'] = SMD.MovingAverage()

  Data的数据结果如下:

NDVI SG ME
0 0.223985 0.222865 0.224877
1 0.223985 0.225162 0.225604
2 0.223985 0.227171 0.226584
3 0.233396 0.229208 0.227861
4 0.227466 0.229505 0.228495
5 0.229259 0.22967 0.228919
6 0.230329 0.23011 0.228951
7 0.231399 0.23005 0.227998
8 0.22672 0.228575 0.226941
9 0.225723 0.224614 0.226264
10 0.224726 0.221431 0.226087
11 0.212029 0.221331 0.227059
12 0.236226 0.227398 0.230943
13 0.229548 0.231761 0.236196
14 0.236484 0.238355 0.243119
15 0.248894 0.249721 0.250959
16 0.266551 0.265861 0.26285
17 0.275269 0.269101 0.281041
18 0.274135 0.268047 0.310279
19 0.270156 0.291688 0.355611
20 0.374355 0.365817 0.419193
21 0.478553 0.47818 0.494744
22 0.590506 0.599373 0.572358
23 0.721067 0.706752 0.645911
24 0.760066 0.765305 0.70615
25 0.799064 0.777875 0.747505
26 0.742108 0.776536 0.769282
27 0.804224 0.799921 0.778868
28 0.83514 0.812062 0.771852
29 0.777888 0.790799 0.748991
30 0.734315 0.740177 0.710194
31 0.700915 0.688655 0.657338
32 0.602857 0.619424 0.589679
33 0.553114 0.525311 0.516098
34 0.397294 0.413735 0.44203
35 0.318083 0.326882 0.377134
36 0.289676 0.279163 0.325689
37 0.253421 0.261368 0.28864
38 0.25891 0.252809 0.264981
39 0.24601 0.245663 0.252024
40 0.23812 0.241012 0.245428
41 0.238319 0.236421 0.241954
42 0.238759 0.237341 0.240452
43 0.232261 0.239408 0.239434
44 0.253731 0.240544 0.239483
45 0.236231 0.241633 0.239223

3 制图查看

Data.plot()

序列数据平滑(SG平滑、滑动平均平滑)_第1张图片

4 数据导出为Excel

Data.to_excel(r'D:\SmoothNDVI.xlsx',index=False)

你可能感兴趣的:(地理与气象分析库,地理数据与处理,python)