题目链接
本文仅演示数据预处理环节。
理论基础:
数据预处理
本文取每个水池中,A、B两个采样点各理化因子的实测值的均值作为各理化因子的计算值。总磷、总淡、氨氮15周的数据可以参考附件一。而附件二中COD、溶氧、PH值间隔两周采集一次,与附件一数据不对称,不足以建立合理的模型,因此考虑利用现有数据插值以补充数据。
插值方法选用三次B样条插值,该方法可以很好的保持数据光滑性和连续性,减少信息量的损失。最终得到的数据如下。
源代码:(以轮虫-时间为例)
#暂时手动导入数据,下周开始学习自动从EXCEL表读取数据
#轮虫-时间
import numpy as np
import matplotlib.pyplot as plt
#进行样条插值
import scipy.interpolate as spi
['']=['SimHei'] #用来正常显示中文标签
['']=False #用来正常显示负号
#数据准备
X=[1,3,5,7,9,11,13,15]
Y1=[1913,1945,1920,2205,2260,2302,2385,2420]
Y2=[591,670,760,837,860,880,885,912]
Y3=[]
Y4=[]
#定义整周数点
xpoint=(1,)
#定义曲线x点
xline=(1,)
#进行三次样条拟合点
xpoint_r=(X,Y1,k=3) #样本点导入,生成参数
ypoint1=(xpoint,xpoint_r) #根据观测点和样条参数,生成插值
xpoint_r=(X,Y2,k=3) #样本点导入,生成参数
ypoint2=(xpoint,xpoint_r) #根据观测点和样条参数,生成插值
xpoint_r=(X,Y3,k=3) #样本点导入,生成参数
ypoint3=(xpoint,xpoint_r) #根据观测点和样条参数,生成插值
xpoint_r=(X,Y4,k=3) #样本点导入,生成参数
ypoint4=(xpoint,xpoint_r) #根据观测点和样条参数,生成插值
#进行三次样条拟合曲线
xline_r=(X,Y1,k=3) #样本点导入,生成参数
yline1=(xline,xline_r) #根据观测点和样条参数,生成插值
xline_r=(X,Y2,k=3) #样本点导入,生成参数
yline2=(xline,xline_r) #根据观测点和样条参数,生成插值
xline_r=(X,Y3,k=3) #样本点导入,生成参数
yline3=(xline,xline_r) #根据观测点和样条参数,生成插值
xline_r=(X,Y4,k=3) #样本点导入,生成参数
yline4=(xline,xline_r) #根据观测点和样条参数,生成插值
#输出数据表格
(figsize=(15,10))
cell_text=[(ypoint1,2),(ypoint2,2),(ypoint3,2),(ypoint4,2)]
the_table=(cellText=cell_text,
rowLabels=["1号池","2号池","3号池","4号池"],
colLabels=xpoint,
)
#作图
(xpoint,ypoint1)
(xline,yline1,label='1号池')
(xpoint,ypoint2)
(xline,yline2,label='2号池')
(xpoint,ypoint3)
(xline,yline3,label='3号池')
(xpoint,ypoint4)
(xline,yline4,label='4号池')
([])
#('时间(周)')
('轮虫(10^6/L)')
('轮虫-时间(周)曲线图')
()#显示标签
()