2019年国赛高教杯数学建模D题空气质量数据的校准解题全过程文档及程序

本文主要是介绍2019年国赛高教杯数学建模D题空气质量数据的校准解题全过程文档及程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2019年国赛高教杯数学建模

D题 空气质量数据的校准

原题再现

  空气污染对生态环境和人类健康危害巨大,通过对“两尘四气”(PM2.5、PM10、CO、NO2、SO2、O3)浓度的实时监测可以及时掌握空气质量,对污染源采取相应措施。虽然国家监测控制站点(国控点)对“两尘四气”有监测数据,且较为准确,但因为国控点的布控较少,数据发布时间滞后较长且花费较大,无法给出实时空气质量的监测和预报。某公司自主研发的微型空气质量检测仪(如图所示)花费小,可对某一地区空气质量进行实时网格化监控,并同时监测温度、湿度、风速、气压、降水等气象参数。
在这里插入图片描述
  由于所使用的电化学气体传感器在长时间使用后会产生一定的零点漂移和量程漂移,非常规气态污染物(气)浓度变化对传感器存在交叉干扰,以及天气因素对传感器的影响,在国控点近邻所布控的自建点上,同一时间微型空气质量检测仪所采集的数据与该国控点的数据值存在一定的差异,因此,需要利用国控点每小时的数据对国控点近邻的自建点数据进行校准。
  附件 1.CSV 和附件 2.CSV 分别提供了一段时间内某个国控点每小时的数据和该国控点近邻的一个自建点数据(相应于国控点时间且间隔在 5 分钟内),各变量单位见附件 3。请建立数学模型研究下列问题:
  1. 对自建点数据与国控点数据进行探索性数据分析。
  2. 对导致自建点数据与国控点数据造成差异的因素进行分析。
  3. 利用国控点数据,建立数学模型对自建点数据进行校准。

整体求解过程概述(摘要)

  掌握空气质量并采取相应措施,对维持生态环境和推动人类健康具有重大的现实意义。本文以空气质量的监测数据为研究对象,在合理假设的基础上,首先,对国控点和自建点的监测数据进行了探索性分析;其次,找到了一种基于时间对齐的差异值计算方法,在此基础上分别建立并求解了基于关联度分析和基于多元线性回归的差异值影响模型,分析了导致自建点数据和国控点数据产生差异的因素;接着,基于分段线性插值的自建点数据校准模型解答了问题三;最后,对模型优缺点进行了分析。主要结论如下:
  针对问题一,从数据质量检查、数据的统计量、污染物浓度直方图、污染物浓度和气象参数的相关系数、“两尘四气”浓度的 24 小时波动趋势等五个方面对自建点数据和国控点数据开展探索性分析。结论表明:国控点数据中存在多处“小时数的不连续点”,自建点数据也存在一些不连续点;该区域空气污染主要由颗粒物造成,PM2.5、PM10达到二级浓度限值,“四气”均达到一级浓度限值;从直方图看,国控点和自建点数据在分布上存在明显差异; “两尘四气”浓度和气象参数等 11 个因素之间存在显著的两两相关关系;“两尘四气”浓度在一天内达到峰值与谷值的时间段不同,国控点和自建点数据污染物浓度的 24 小时变动趋势不一致。
  针对问题二,基于时间对齐算法实现国控点数据和自建点数据的可比较性;建立并求解了基于关联度分析和多元线性回归的差异值影响模型,均循环 6 次,分别考察了 11个影响因素对“两尘四气”浓度差异值的影响。时间对齐后,附件 1 的有效记录为 4137行,附件 2 的有效记录为 197341 行,进而将附件 2 压缩为 4137 行,定量计算出两者的差异值。关联度分析结论表明:影响“两尘四气”浓度差异值的最主要因素不同,对 PM2.5、PM10、CO、NO2、SO2、O3 监测浓度差异影响最大的分别为第 11 个(湿度)、第 11 个(湿度)、第 4 个(NO2)、第 5 个(SO2)、第 5 个(SO2)、第 6 个(O3)影响因素;污染物浓度变化的确会对传感器存在交叉干扰;影响因素的重要程度并非一成不变,针对不同污染物,影响因素的主次关系变化较大。通过多元回归分析发现:P 值表明所有 6个模型在整体上是显著的,R2 值表明模型 2、模型 3 和模型 6 的拟合度较高;零点漂移和量程漂移可视作回归方程的常数项变化;传感器的长时间使用、气体污染物浓度变化以及气象因素均可导致自建点数据和国控点数据之间的差异,影响程度由回归系数决定;并非只有气体污染物对数据差异产生影响,颗粒物的影响效应同样存在。
  针对问题三,基于分段线性插值方法对自建点数据进行校准,将自建点数据校准问题,转化为一个过已知有限个数据点(国控点监测数据)求近似函数的问题,从而将附件 1 中的 4137 条国控点监测数据,扩展成为 197341 条自建点的校准数据。结论表明:校准后的自建点数据与国控点数据吻合度较好;自建点与国控点的残差为 56717、校准后的数据与国控点的残差为 1649,仅为原残差的 2.9%。文中所建立的模型简便易行,便于推广,可利用国控点的数据对近邻自建点的数据进行校准。

模型假设:

  为简化问题,做出如下合理假设:
  (1)同一时间,自建点与国控点所处的客观环境是一致的,即污染物浓度和天气因素的实际值是完全相同的。
  (2)不考虑监测数据的存储、传输、分发等环节的随机噪声所导致的数据误差。
  (3)假设数据总体是符合线性正态误差模型,即误差项 ε ~ N(0,σ^2)

问题分析:

  考虑到数据量较大,首先需要对附件 1.CSV(国控点监测数据),附件 2.CSV(自建点监测数据,含气象参数)进行数据预处理,将后续程序中需要用到的数据另存为后缀为.mat 的文件。
  探索性数据分析(Exploratory Data Analysis,简称 EDA),是指对已有的数据(题目中对应为附件1和附件2中的原始数据)在尽量少的先验假定下进行探索,通过作图、制表、方程拟合、计算特征量等手段探索数据的结构和规律的一种数据分析方法[2]。针对问题一,首先需要对原始数据进行数据质量检查,检查内容主要包括数据一致性,处理无效值和缺失值;在此基础上,通过最小值、最大值、均值、中位数、标准差、偏度以及峰度等统计量反映国控点和自建点监测数据的数量特征;进一步地,还可绘制出变量的直方图、分析变量之间的相关关系,通过可视化的方式直观考察国控点和自建点在监测值上的差异性。
  影响差异值的三大来源分别是:传感器的零点漂移和量程漂移、污染物的交叉干扰、天气因素对传感器的影响。针对问题二,主要包括两个子问题:1)如何定量地刻画国控点和自建点监测数据的差异值;2)如何建立合理模型,对引致差异值的影响因素进行分析。分析要点应该包括:究竟是哪些影响因素导致了差异值的产生?能否通过分析关联度,测算出影响因素的排序?是否可以通过多元回归,考察各影响因素对于差异值的显著程度、作用方向及影响程度?文中考虑采用灰度系统理论中的关联度分析方法和多元线性回归方法。
  针对问题三,已知国控点的监测数据准确,但布控较少、发布时间滞后;自建点监测数据更新快,但误差较大。如何利用国控点数据对自建点数据进行校准这一问题,等同于求一个过已知有限个数据点(国控点监测数据)的近似函数,进而产生出与自建点监测数据同步更新的数据,并据此对自建点数据进行校准。校准方法的有效性需要进行客观、准确的评价,可考虑通过可视化方式、定量计算两种方式进行评价。文中考虑采用线性插值的方法进行数据校准。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:(代码和文档not free)

The actual procedure is shown in the screenshot

function data = getTime(str,flag)
% 函数功能:根据输入的时间字符串,flag=2,输出相应的年、月、日
% flag 为其它数值时,输出相应的年、月、日、时、分、秒
if nargin ==1flag = 2;
end
tmpdate = datevec(str);
if flag == 1data = tmpdate(1:3,:);
elsedata = tmpdate;
end
% 对数据进行预处理
% Tab1 预处理:标题行 tab1Title、国控点时间 tab1Time、监测值 tab1MonitorValue
[~,~,tab1Alldata]= xlsread('附件 1.csv'); % 读取“附件 1.csv”
Ltab1 = length(tab1Alldata); % 取行数
% tab1Title = tab1Alldata(1 ,:); % tab1 行名称
tab1Alldata = tab1Alldata(2:Ltab1 ,:); % 删除标题行
tab1Time = getTime(tab1Alldata(:,7)); % 国控点时间:年月日时分秒
tab1Time = tab1Time(:,1:4); % 仅保留年、月、日、时
tab1MonitorValue = cell2mat(tab1Alldata(:,1:6)); % tab1 传感器记录值
% save tab1Title.mat tab1Title
save tab1Time.mat tab1Time
save tab1MonitorValue.mat tab1MonitorValue
% Tab2 预处理:标题行 tab2Title、自建点时间 tab2Time、监测值 tab2MonitorValue
[~,~,tab2Alldata]= xlsread('附件 2.csv'); % 读取“附件 2.csv”
Ltab2 = length(tab2Alldata); % 取行数
% tab2Title = tab2Alldata(1 ,:); % tab2 行名称
tab2Alldata = tab2Alldata(2:Ltab2 ,:); % 删除标题行
tab2Time = getTime(tab2Alldata(:,12)); % 自建点时间:年月日时分秒
tab2Time = tab2Time(:,1:5); % 仅保留年、月、日、时、分
tab2MonitorValue = cell2mat(tab2Alldata(:,1:11)); % tab2 传感器记录值
% save tab2Title.mat tab2Title
save tab2Time.mat tab2Time
save tab2MonitorValue.mat tab2MonitorValue
% 解决问题 1,对自建点数据和国控点数据进行探索性数据分析
%% 装载数据
% 国控点数据 附件 1 标题:PM2.5、PM10、CO、NO2、SO2、O3
load tab1Time.mat % 附件 1 国控点记录时间:年月日时 (4200 * 4)
load tab1MonitorValue.mat % 附件 1 监测值:4200 * 6
% 自建点数据
% 附件 2 标题:PM2.5、PM10、CO、NO2、SO2、O3、风速、压强、降水量、温度、湿度
load tab2Time.mat % 附件 2 自建点记录时间:年月日时分 (234717 * 5)
load tab2MonitorValue.mat % 附件 2 监测值:(234717 * 11)
%% 缺失值分析
% ii = 1:4200;plot(ii,tab1Time(:,4));ii = 1:1000; plot(ii,tab1Time(ii,4));
ii = 300:600;plot(ii,tab1Time(ii,4),'-b','LineWidth',2);grid on
xlabel('附件 1 的数据记录号','FontSize',12);
ylabel('记录时间的小时数','FontSize',12);
set(gca,'ytick',0:2:23) 
set(gca,'FontName','Times New Roman','FontSize',14) %设置坐标轴刻度字体名称、大小
%% 描述性统计:最小值、最大值、均值、中位数、标准差、偏度、峰度
% 国控点数据
tab1DataDisplay = [];
for i = 1:6tmpDataDisplay = explorDataAnalysis(tab1MonitorValue(:,i));tab1DataDisplay = [tab1DataDisplay tmpDataDisplay];
end
save tab1DataDisplay.mat tab1DataDisplay
% 自建点数据
tab2DataDisplay = [];
for i = 1:11tmpDataDisplay = explorDataAnalysis(tab2MonitorValue(:,i));tab2DataDisplay = [tab2DataDisplay tmpDataDisplay];
end
save tab2DataDisplay.mat tab2DataDisplay
%% 相关系数:结果与 corrcoef 相同
C1 = corr(tab1MonitorValue,'type','Pearson'); % 国控点数据
C2 = corr(tab2MonitorValue,'type','Pearson'); % 自建点数据
%% 国控点数据波形图
figure
tab1Date = 1:length(tab1Time);
set(gca,'FontName','Times New Roman','FontSize',12) %设置坐标轴刻度字体名称、大小
subplot(231);plot(tab1Date,tab1MonitorValue(:,1));title('国控点 PM2.5','FontSize',12);xlim([0 4300]);
subplot(232);plot(tab1Date,tab1MonitorValue(:,2));title('国控点 PM10','FontSize',12);xlim([0 4300]);
subplot(233);plot(tab1Date,tab1MonitorValue(:,3));title('国控点 CO','FontSize',12);xlim([0 4300]);
subplot(234);plot(tab1Date,tab1MonitorValue(:,4));title('国控点 NO2','FontSize',12);xlim([0 4300]);
subplot(235);plot(tab1Date,tab1MonitorValue(:,5));title('国控点 SO2','FontSize',12);xlim([0 4300]);
subplot(236);plot(tab1Date,tab1MonitorValue(:,6));title('国控点 O3','FontSize',12);xlim([0 4300]);
%% 对 24 小时浓度均值的波动情况进行统计分析
% 国控点数据
hourWave = zeros(24,6);
for i = 0:23tmpIndex = tab1Time(:,4)==i;tmpValue = tab1MonitorValue(tmpIndex,:);hourWave(i+1,:) = sum(tmpValue,1)/length(tmpValue); 
end
% 自建点数据
hourWave2 = zeros(24,6);
for i = 0:23tmpIndex = tab2Time(:,4)==i;tmpValue = tab2MonitorValue(tmpIndex,1:6);hourWave2(i+1,:) = sum(tmpValue,1)/length(tmpValue); 
end
figure
tab1Date = 0:23;
set(gca,'FontName','Times New Roman','FontSize',12,'LineWidth',3)%设置坐标轴刻度字体、大小、线宽
subplot(231);plot(tab1Date,hourWave(:,1),'--bs','MarkerFaceColor','g');
hold on;plot(tab1Date,hourWave2(:,1),'-ro');
title('PM2.5 均值 24 小时波动','FontSize',12);xlim([0 24]);
subplot(232);plot(tab1Date,hourWave(:,2),'-bs','MarkerFaceColor','g');
hold on;plot(tab1Date,hourWave2(:,2),'-ro');
title('PM10 均值 24 小时波动','FontSize',12);xlim([0 24]);
subplot(233);plot(tab1Date,hourWave(:,3),'-bs','MarkerFaceColor','g');
hold on;plot(tab1Date,hourWave2(:,3),'-ro');
title('CO 均值 24 小时波动','FontSize',12);xlim([0 24]);
subplot(234);plot(tab1Date,hourWave(:,4),'-bs','MarkerFaceColor','g');
hold on;plot(tab1Date,hourWave2(:,4),'-ro');
title('NO2 均值 24 小时波动','FontSize',12);xlim([0 24]);
subplot(235);plot(tab1Date,hourWave(:,5),'-bs','MarkerFaceColor','g');
hold on;plot(tab1Date,hourWave2(:,5),'-ro');
title('SO2 均值 24 小时波动','FontSize',12);xlim([0 24]);
subplot(236);plot(tab1Date,hourWave(:,6),'-bs','MarkerFaceColor','g');
hold on;plot(tab1Date,hourWave2(:,6),'-ro');
title('O3 均值 24 小时波动','FontSize',12);xlim([0 24]);
legend('国控点','自建点','FontSize',12)
%% tab1 和 tab2 直方图比较
figure
binNum = 10;
set(gca,'FontName','Times New Roman','FontSize',12) %设置坐标轴刻度字体名称、大小
subplot(341);hist(tab1MonitorValue(:,1),binNum);title('国控点 PM2.5 直方图','FontSize',12);
subplot(342);hist(tab2MonitorValue(:,1),binNum);title('自建点 PM2.5 直方图','FontSize',12);
subplot(343);hist(tab1MonitorValue(:,2),binNum);title('国控点 PM10 直方图','FontSize',12);
subplot(344);hist(tab2MonitorValue(:,2),binNum);title('自建点 PM10 直方图','FontSize',12);
subplot(345);hist(tab1MonitorValue(:,3),binNum);title('国控点 CO 直方图','FontSize',12);
subplot(346);hist(tab2MonitorValue(:,3),binNum);title('自建点 CO 直方图','FontSize',12);
subplot(347);hist(tab1MonitorValue(:,4),binNum);title('国控点 NO2 直方图','FontSize',12);
subplot(348);hist(tab2MonitorValue(:,4),binNum);title('自建点 NO2 直方图','FontSize',12);
subplot(349);hist(tab1MonitorValue(:,5),binNum);title('国控点 SO2 直方图','FontSize',12);
subplot(3,4,10);hist(tab2MonitorValue(:,5),binNum);title('自建点 SO2 直方图','FontSize',12);
subplot(3,4,11);hist(tab1MonitorValue(:,6),binNum);title('国控点 O3 直方图','FontSize',12);
subplot(3,4,12);hist(tab2MonitorValue(:,6),binNum);title('自建点 O3 直方图','FontSize',12);
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

这篇关于2019年国赛高教杯数学建模D题空气质量数据的校准解题全过程文档及程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/242772

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf