首先,我们需要导入所需的Python库:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import pywt

然后,我们读取数据并进行预处理,将时间序列转换为numpy数组并去除NaN值:

# 读取数据
data = pd.read_csv('ERSST_V5_SST_185401_202306.csv')

# 将时间序列转换为numpy数组
time = data['time'].values
sst = data['sst'].values

# 去除NaN值
sst = np.nan_to_num(sst)

接下来,我们可以使用小波变换对SST数据进行多时间尺度分析。在此示例中,我们将使用Daubechies 4小波(db4)进行分析。我们将使用pywt库中的函数进行小波分解和重构。

# 定义小波分解和重构函数
def wavelet_analysis(data, wavelet):
    # 小波分解
    coeffs = pywt.wavedec(data, wavelet, level=5)
    # 小波重构
    reconstructed = pywt.waverec(coeffs, wavelet)
    return coeffs, reconstructed

# 进行小波分解和重构
coeffs, reconstructed = wavelet_analysis(sst, 'db4')

我们可以绘制重构后的时间序列,以及不同尺度的小波系数。

# 绘制重构后的时间序列
plt.plot(time, reconstructed)
plt.xlabel('Year')
plt.ylabel('SST (°C)')
plt.title('Reconstructed SST')
plt.show()

# 绘制不同尺度的小波系数
fig, axs = plt.subplots(6, 1, figsize=(10, 12))
for i in range(6):
    axs[i].plot(coeffs[i])
    axs[i].set_title('Scale {}'.format(i+1))
plt.xlabel('Year')
plt.show()

下图显示了重构后的SST时间序列和不同尺度的小波系数:

SST Wavelet Analysis

从小波系数的图表中,我们可以看出在不同的时间尺度上存在不同的变化模式。例如,第1个尺度的小波系数显示了长期趋势,而第6个尺度的小波系数显示了短期变化。

通过对SST数据进行小波分析,我们能够更好地理解其时间尺度上的动态变化,并为未来预测和决策制定提供更有力的依据。


原文地址: https://www.cveoy.top/t/topic/oQVE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录