2025-07-13 08:55:18 +08:00

122 lines
3.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# In[1]:
import matplotlib.pyplot as plt
# 导入matplotlib的pyplot模块用于数据可视化。
import tensorflow as tf
# 导入tensorflow库用于深度学习模型的构建和训练
from vmdpy import VMD
# 从vmdpy库导入VMD用于变分模态分解
import pandas as pd
# 导入pandas库用于数据处理和分析
import warnings
# 导入warnings库用于控制警告消息
warnings.filterwarnings("ignore")
# 设置忽略警告消息,通常用于减少输出中的不必要警告
# In[2]:
# 调用GPU加速
gpus = tf.config.experimental.list_physical_devices(device_type='GPU')
for gpu in gpus:
tf.config.experimental.set_memory_growth(gpu, True)
# In[3]:
# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['Times New Roman']
# 用来正常显示负号
plt.rcParams['axes.unicode_minus'] = False
# In[4]:
df_raw_data = pd.read_csv('电力负荷预测数据2.csv', encoding='gbk')
# 使用pandas的read_csv函数读取CSV文件。
# '股票预测.csv'是文件名。
# usecols=[0,-1]指定只读取CSV文件的第一列和最后一列。
# encoding='gbk'指定文件编码格式为GBKGBK常用于中文字符编码。
series_close = pd.Series(df_raw_data['power'].values, index=df_raw_data['time'])
# 创建一个pandas的Series对象。
# df_raw_data['power'].values提取'power'列的值作为Series的数据。
# index=df_raw_data['time']设置Series的索引为'time'列的值。
# In[5]:
print(series_close)
# In[6]:
def vmd_decompose(series, num_modes, alpha, tau, DC, init, tol):
# 定义变分模态分解VMD函数具有多个参数。
# series待分解的时间序列。
# num_modes分解的模态数量。
# alpha, tau, K, DC, init, tolVMD算法的参数。
decom = VMD(series.values,K =num_modes, alpha=alpha, tau=tau, DC=DC, init=init, tol=tol)
# 使用VMD方法对输入的时间序列进行分解。
vmd_result, *_ = decom
# 从VMD返回的结果中获取分解后的模态。
df_vmd = pd.DataFrame(vmd_result.T)
# 将分解后的模态转换为DataFrame。
df_vmd.columns = ['imf' + str(i+1) for i in range(len(df_vmd.columns))]
# 为DataFrame的每一列命名表示每个模态。
return df_vmd
# 返回分解结果。
# 调用函数并传入参数
df_vmd_result = vmd_decompose(series=series_close, num_modes=8, alpha=2000, tau=0, DC=1, init=1, tol=1e-7)
# 使用vmd_decompose函数对series_close进行VMD分解。
# 可视化VMD分解结果
fig, axs = plt.subplots(nrows=len(df_vmd_result.columns), figsize=(10, 6), sharex=True)
# 创建一个绘图对象和多个子图对象。
for i, col in enumerate(df_vmd_result.columns):
axs[i].plot(df_vmd_result[col])
axs[i].set_title(col)
# 遍历每个模态并绘制在子图上。
plt.suptitle('VMD Decomposition')
# 设置图表的总标题。
plt.xlabel('Time')
# 设置x轴的标签。
plt.show()
# 显示图表。
# In[7]:
print(df_vmd_result)
# In[8]:
df_vmd_result.to_excel("VMD.xlsx",index=False)#保存数据为VMD.xlsx
# In[ ]: