本文主要进行CNN卷积神经网络回归预测的项目开发,本文主要阐述其数据处理部分,包括构造数据字段、按照时间对数据排序、数据可视化、筛选所需字段等步骤。
1. 项目简介
本项目属于机器学习范畴,根据多特征数据集(包含土壤不同深度的湿度逐年变化、降水天数逐年变化、土壤降雨量逐年变化等因素)搭建神经网络对未来几年10cm土壤湿度进行预测。
本项目使用PaddlePaddle框架搭建卷积神经网络对10cm土壤湿度进行回归预测,主要包括数据处理、数据预处理、模型构建、模型训练、模型预测、可视化结果等过程。
2. 数据集介绍
数据集统计了某草原从2012年1月-2022年3月的土壤数据,包括10cm湿度(kg/m2),土壤蒸发量(W/m2),降水天数字段等等。需要对数据集按照时间顺序进行排序处理方可进行时间序列预测。
- 经过初步分析随着时间变化,土壤湿度同样呈现规律性变化
3. 数据处理
3.1 导入数据集及所需库
本项目使用PaddlePaddle框架进行搭建,使用JupyterNotebook进行开发演示。
%matplotlib inline
# 导入 paddle
import paddle
import paddle.nn.functional as F
# 导入其他模块
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")
print(paddle.__version__)
import paddle.nn as nn
2.1.1 读取数据
因为是excel形式保存的数据,使用pandas下的read_excel进行读取即可。
soil_humidity = pd.read_excel("data/data179898/soil_humidity.xlsx")
soil_humidity.head()
2.1.2 构建Datetime字段
- 需要把一些object或者是字符、整型等某列进行转换为pandas可识别的datetime时间类型数据,方便时间的运算等操作。
- pandas.to_datetime函数可以将一个标量,数组,Series或者是DataFrame/字典类型的数据转换为pandas中datetime类型的时间类型数据。
- 转化Datetime方便我们后续根据时间顺序来对数据进行排序
soil_humidity["Datetime"] = pd.to_datetime(soil_humidity["datetime"])
soil_humidity.drop(["datetime"],axis=1, inplace=True)
2.1.3 按照时间顺序排序
- 将数据从2012-01-01到2022年-03-01排序
- 按照时间早晚的方式排序,方便后续进行处理预测等
soil_humidity.index = soil_humidity.Datetime
soil_humidity.drop(["Datetime"],axis=1, inplace=True)
soil_humidity = soil_humidity.sort_index()
soil_humidity.head()
接下来,根据按照时间顺序排序后的数据,绘制10cm湿度字段与时间的变化关系图。
- 代码中前几行的含义是设置字体,使图像能够显示中文字体
from pylab import mpl
from matplotlib.font_manager import FontProperties
myfont=FontProperties(fname=r'/usr/share/fonts/fangzheng/FZSYJW.TTF',size=12)
sns.set(font=myfont.get_name())
# 可视化数据分布
plt.plot(soil_humidity["10cm湿度(kg/m2)"],"b--")
plt.yticks(fontproperties = 'Times New Roman', size = 18)
plt.xticks(fontproperties = 'Times New Roman', size = 18)
# 2.2 添加网格显示
# plt.grid(True, linestyle='--', alpha=0.5) # 开启网格,虚线,透明度0.5
# 2.3 添加描述信息
plt.xlabel("时间", size = 18)
plt.ylabel("10cm湿度(kg/m2)", size = 18)
plt.title("湿度随时间变化关系", fontsize=22)
plt.show()
绘制出的图像如下图所示:
- 观察图像可以发现,10cm湿度随着月份的变化呈现规律性变化
- 因此,可以考虑使用CNN单序列预测
- 当然,对于这种预测值与时间呈现一定规律性的数据,我们还可以采用LSTM神经网络对其进行预测
2.1.4 筛选所需字段
- CNN单序列预测,只需要一个预测序列字段,通过搭建卷积神经网络来向后推算当前序列的新字段。
- 因此,我们需要使用变量保存要预测的序列
- 保存这个序列以后,我们后面将用到这个序列,对其划分训练集与测试集
soil_humidity_10cm = soil_humidity.loc[soil_humidity.index[:], ['10cm湿度(kg/m2)']]
3. 总结
本文完成了CNN神经网络对土壤湿度预测的数据处理部分,比如构建Datetime字段,然后通过Datetime字段进行排序,可视化湿度与时间的变化关系,并对有用字段进行筛选。下文将介绍模型构建、模型训练、模型预测部分。
本文正在参加「金石计划 . 瓜分6万现金大奖」